プロジェクト

全般

プロフィール

統計
| リビジョン:

h-you / trunk / src / ProcessManagement / ProcessManagement / Common / CommonMotions.cs @ 492

履歴 | 表示 | アノテート | ダウンロード (199 KB)

1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Diagnostics;
6
using System.Windows.Forms;
7
using System.Drawing;
8
using System.IO;
9
using System.Text.RegularExpressions;
10
using System.Data;
11
using System.Security.Cryptography;
12
using System.Globalization;
13
using System.Runtime.InteropServices;
14
using System.Collections;
15

    
16
using Microsoft.VisualBasic; //for StrConv
17

    
18
using log4net;
19
using log4net.Appender;
20
using log4net.Repository.Hierarchy;
21

    
22
using ProcessManagement.DB.Core;
23
using ProcessManagement.DataModel;
24
using ProcessManagement.DB.IOAccess;
25
using ProcessManagement.Forms.CustomControls;
26
using ProcessManagement.Forms.DataEntry;
27

    
28
namespace ProcessManagement.Common
29
{
30
    /// <summary>
31
    /// 工事管理システム共通クラス
32
    /// </summary>
33
    public static class CommonMotions
34
    {
35
        #region 定義部
36
        /// <summary>
37
        /// log4netログを使用する
38
        /// </summary>
39
        private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
40
        #endregion
41

    
42
        #region 変数
43
        /// <summary>
44
        /// 定義ファイル読込クラス定義
45
        /// </summary>
46
        private static DefinitionFileRead m_dfr_model = null;
47

    
48
        /// <summary>
49
        /// 管理マスタデータ保持領域
50
        /// </summary>
51
        private static SystemMaster m_systemMaster = new SystemMaster();
52

    
53
        /// <summary>
54
        /// 消費税データ保持領域
55
        /// </summary>
56
        private static List<ConsumptionTax> m_ConsumptionTax = new List<ConsumptionTax>();
57

    
58
        /// <summary>
59
        /// ログインユーザー担当者データ
60
        /// </summary>
61
        private static PersonInChargeMaster m_LoginUserData = new PersonInChargeMaster();
62

    
63
        /// <summary>
64
        /// ログインユーザー参照部署データ
65
        /// </summary>
66
        private static List<PersonDepartmentMaster> m_LoginUserRefDepartment = new List<PersonDepartmentMaster>();
67

    
68
        /// <summary>
69
        /// ログインユーザーセキュリティ区分
70
        /// </summary>
71
        private static SecurityMaster m_LoginUserSecurity = new SecurityMaster();
72

    
73
        /// <summary>
74
        /// ログインユーザー処理起動区分
75
        /// </summary>
76
        private static List<ProcessExcute> m_LoginUserProcExe = new List<ProcessExcute>();
77

    
78
        /// <summary>
79
        /// 製品ファイルバージョン格納エリア
80
        /// </summary>
81
        private static FileVersionInfo m_ProductVersionInfo = FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
82

    
83
        /// <summary>
84
        /// RGBカラーテーブル
85
        /// </summary>
86
        private static Color[] m_RGBColor = new Color[256];
87

    
88
        #endregion
89

    
90
        #region コンストラクタ
91
        /// <summary>
92
        /// 何もしない
93
        /// </summary>
94
        #endregion
95

    
96
        #region プロパティ
97
        /// <summary>
98
        /// 本稼働フラグ
99
        /// </summary>
100
        public static bool ProductionExecution
101
        {
102
            get { return CommonDefine.m_ProductionExecution; }
103
        }
104
        /// <summary>
105
        /// 定義ファイル読込クラス
106
        /// </summary>
107
        public static DefinitionFileRead DFRModel
108
        {
109
            get { return m_dfr_model; }
110
        }
111

    
112
        /// <summary>
113
        /// 管理マスタデータ
114
        /// </summary>
115
        public static SystemMaster SystemMasterData
116
        {
117
            get { return m_systemMaster; }
118
            set { m_systemMaster = value; }
119
        }
120

    
121
        /// <summary>
122
        /// 消費税データ
123
        /// </summary>
124
        public static List<ConsumptionTax> ConsumptionTax
125
        {
126
            get { return m_ConsumptionTax; }
127
            set { m_ConsumptionTax = value; }
128
        }
129

    
130
        /// <summary>
131
        /// ログインユーザー担当者データ
132
        /// </summary>
133
        public static PersonInChargeMaster LoginUserData
134
        {
135
            get { return m_LoginUserData; }
136
            set { m_LoginUserData = value; }
137
        }
138

    
139
        /// <summary>
140
        /// ログインユーザー参照部署データ
141
        /// </summary>
142
        public static List<PersonDepartmentMaster> LoginUserRefDepartment
143
        {
144
            get { return m_LoginUserRefDepartment; }
145
            set { m_LoginUserRefDepartment = value; }
146
        }
147

    
148
        /// <summary>
149
        /// ログインユーザーセキュリティ区分
150
        /// </summary>
151
        public static SecurityMaster LoginUserSecurity
152
        {
153
            get { return m_LoginUserSecurity; }
154
            set { m_LoginUserSecurity = value; }
155
        }
156

    
157
        /// <summary>
158
        /// ログインユーザー処理起動区分
159
        /// </summary>
160
        public static List<ProcessExcute> LoginUserProcExe
161
        {
162
            get { return m_LoginUserProcExe; }
163
            set { m_LoginUserProcExe = value; }
164
        }
165

    
166
        /// <summary>
167
        /// RGBカラーテーブル
168
        /// </summary>
169
        public static Color[] RGBColor
170
        {
171
            get { return m_RGBColor; }
172
            set { m_RGBColor = value; }
173
        }
174

    
175
        /// <summary>
176
        /// 製品ファイルバージョン格納エリア
177
        /// </summary>
178
        public static FileVersionInfo ProductVersionInfo
179
        {
180
            get { return m_ProductVersionInfo; }
181
        }
182

    
183
        #endregion
184

    
185
        #region 初期化
186
        /// <summary>
187
        /// 初期化
188
        /// </summary>
189
        public static bool Initialize()
190
        {
191
            try
192
            {
193
                // 定義ファイル読込
194
                DefinitionFileInit();
195

    
196
                // ----- 他共通クラス初期化
197
                // DB接続情報取得
198
                DBCommon.Instance.Initialize();
199
                // 管理マスタ取得
200
                if (!SetSystemMaster()) return false;
201
                // 消費税データ取得
202
                if (!SetconsumptionTax()) return false;
203
                // 共通費計算係数取得
204
                if(!ClsCostCulculation.DBToArrayData()) return false;
205

    
206
                // RGBカラーパレット作成処理
207
                CreatePalette();
208

    
209
                return true;
210
            }
211
            catch (Exception ex)
212
            {
213
                logger.ErrorFormat("初期化エラー:{0}:{1}", GetMethodName(), ex.Message);
214
                return false;
215
            }
216
        }
217
        #endregion
218

    
219
        #region ---------- データ変換メソッド
220
        #region 西暦を和暦に変換する
221
        /// <summary>
222
        /// 西暦を和暦に変換する
223
        /// </summary>
224
        /// <returns></returns>
225
        public static string cnvJapaneseCalendar(DateTime Terget)
226
        {
227
            try
228
            {
229
                CultureInfo culture = new CultureInfo("ja-JP", true);
230
                culture.DateTimeFormat.Calendar = new JapaneseCalendar();
231

    
232
                return Terget.ToString("ggyy年M月d日", culture);
233
            }
234
            catch (Exception ex)
235
            {
236
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
237
                return string.Empty;
238
            }
239
        }
240
        #endregion
241

    
242
        #region 今の年号を取得する
243
        /// <summary>
244
        /// 今の年号を取得する
245
        /// </summary>
246
        /// <returns></returns>
247
        public static string GetNameOfAnEra(DateTime TargetDate)
248
        {
249
            try
250
            {
251
                CultureInfo culture = new CultureInfo("ja-JP", true);
252
                culture.DateTimeFormat.Calendar = new JapaneseCalendar();
253

    
254
                return TargetDate.ToString("gg", culture);
255
            }
256
            catch (Exception ex)
257
            {
258
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
259
                return string.Empty;
260
            }
261
        }
262
        #endregion
263

    
264
        #region Int値より文字列に変化して指定位置に指定文字を入れる。(工事番号編集)
265
        /// <summary>
266
        /// Int値より文字列に変化して指定位置に指定文字を入れる。
267
        /// </summary>
268
        /// <param name="strCode"></param>
269
        /// <returns></returns>
270
        public static string cnvStringCodeFromInt(int IntCode, string strCode, int iPoint)
271
        {
272
            try
273
            {
274
                // 文字列変換
275
                string strWork = IntCode.ToString();
276
                // 指定位置が文字列長を超えている場合はエラー
277
                if (strWork.Length <= iPoint) return string.Empty;
278
                // 文字挿入
279
                strWork = strWork.Substring(0, iPoint) + strCode + strWork.Substring(iPoint);
280
                return strWork;
281
            }
282
            catch (System.Exception ex)
283
            {
284
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
285
                return string.Empty;
286
            }
287
        }
288
        #endregion
289

    
290
        #region 文字列より指定文字を除去してInt値に変換する
291
        /// <summary>
292
        /// 文字列より指定文字を除去してInt値に変換する
293
        /// </summary>
294
        /// <param name="strCode"></param>
295
        /// <returns></returns>
296
        public static int cnvIntFromStringCode(string strCode, string strRemove)
297
        {
298
            try
299
            {
300
                // 文字列除去後変換
301
                return cnvInt(strCode.Replace(strRemove, ""));
302
            }
303
            catch (System.Exception ex)
304
            {
305
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
306
                return 0;
307
            }
308
        }
309
        #endregion
310

    
311
        #region オブジェクトを日付に変換する
312
        /// <summary>
313
        /// 日付返還変換
314
        /// </summary>
315
        /// <param name="sendData"></param>
316
        /// <returns></returns>
317
        public static DateTime cnvDate(object sendData)
318
        {
319
            DateTime dtDateWork = DateTime.MinValue;
320
            try
321
            {
322
                // 空判定
323
                if (sendData == null) return dtDateWork;
324
                if (sendData.ToString().Length == 0) return dtDateWork;
325

    
326
                // 変換
327
                bool bRet = DateTime.TryParse(sendData.ToString(), out dtDateWork);
328

    
329
                return dtDateWork;
330
            }
331
            catch (System.Exception ex)
332
            {
333
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
334
                return dtDateWork;
335
            }
336
        }
337
        #endregion
338

    
339
        #region オブジェクトより数値変換(long)
340
        /// <summary>
341
        /// オブジェクトより数値変換(long)
342
        /// </summary>
343
        /// <param name="sendData"></param>
344
        /// <returns></returns>
345
        public static long cnvLong(object sendData)
346
        {
347
            try
348
            {
349
                long retData = 0;
350

    
351
                // 空判定
352
                if (sendData == null) return retData;
353
                if (sendData.ToString().Trim().Length == 0) return retData;
354

    
355
                // 変換
356
                long.TryParse(sendData.ToString().Replace(",", "").Replace("\\", "").Trim(), out retData);
357

    
358
                return retData;
359
            }
360
            catch (System.Exception ex)
361
            {
362
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
363
                return 0;
364
            }
365
        }
366
        #endregion
367

    
368
        #region オブジェクトより数値変換(int)
369
        /// <summary>
370
        /// オブジェクトより数値変換(int)
371
        /// </summary>
372
        /// <param name="sendData"></param>
373
        /// <returns></returns>
374
        public static int cnvInt(object sendData)
375
        {
376
            try
377
            {
378
                int retData = 0;
379

    
380
                // 空判定
381
                if (sendData == null) return retData;
382
                if (sendData.ToString().Trim().Length == 0) return retData;
383

    
384
                // 変換
385
                int.TryParse(sendData.ToString().Replace(",", "").Replace("\\", "").Trim(), out retData);
386

    
387
                return retData;
388
            }
389
            catch (System.Exception ex)
390
            {
391
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
392
                return 0;
393
            }
394
        }
395
        #endregion
396

    
397
        #region オブジェクトより数値変換(string)
398
        /// <summary>
399
        /// オブジェクトより数値変換(string)
400
        /// </summary>
401
        /// <param name="sendData"></param>
402
        /// <returns></returns>
403
        public static string cnvString(object sendData)
404
        {
405
            try
406
            {
407
                string retData = string.Empty;
408

    
409
                // 空判定
410
                if (sendData == null) return retData;
411
                if (sendData.ToString().Trim().Length == 0) return retData;
412

    
413

    
414
                // 変換
415
                retData = sendData.ToString();
416

    
417
                return retData;
418
            }
419
            catch (System.Exception ex)
420
            {
421
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
422
                return "";
423
            }
424
        }
425
        #endregion
426

    
427
        #region オブジェクトより数値変換(double)
428
        /// <summary>
429
        /// オブジェクトより数値変換(double)
430
        /// </summary>
431
        /// <param name="sendData"></param>
432
        /// <returns></returns>
433
        public static double cnvDouble(object sendData)
434
        {
435
            try
436
            {
437
                double retData = 0;
438

    
439
                // 空判定
440
                if (sendData == null) return retData;
441
                if (sendData.ToString().Trim().Length == 0) return retData;
442

    
443

    
444
                // 変換
445
                double.TryParse(sendData.ToString().Replace(",", "").Replace("\\", "").Trim(), out retData);
446

    
447
                return retData;
448
            }
449
            catch (System.Exception ex)
450
            {
451
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
452
                return 0;
453
            }
454
        }
455
        #endregion
456

    
457
        #region オブジェクトより数値変換(float)
458
        /// <summary>
459
        /// オブジェクトより数値変換(float)
460
        /// </summary>
461
        /// <param name="sendData"></param>
462
        /// <returns></returns>
463
        public static float cnvFloat(object sendData)
464
        {
465
            try
466
            {
467
                float retData = 0;
468

    
469
                // 空判定
470
                if (sendData == null) return retData;
471
                if (sendData.ToString().Trim().Length == 0) return retData;
472

    
473

    
474
                // 変換
475
                float.TryParse(sendData.ToString().Replace(",", "").Replace("\\", "").Trim(), out retData);
476

    
477
                return retData;
478
            }
479
            catch (System.Exception ex)
480
            {
481
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
482
                return 0;
483
            }
484
        }
485
        #endregion
486

    
487
        #region オブジェクトより数値変換(decimal)
488
        /// <summary>
489
        /// オブジェクトより数値変換(decimal)
490
        /// </summary>
491
        /// <param name="sendData"></param>
492
        /// <returns></returns>
493
        public static decimal cnvDecimal(object sendData)
494
        {
495
            try
496
            {
497
                decimal retData = 0;
498

    
499
                // 空判定
500
                if (sendData == null) return retData;
501
                if (sendData.ToString().Trim().Length == 0) return retData;
502

    
503

    
504
                // 変換
505
                decimal.TryParse(sendData.ToString().Replace(",", "").Replace("\\", "").Trim(), out retData);
506

    
507
                return retData;
508
            }
509
            catch (System.Exception ex)
510
            {
511
                Console.WriteLine("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
512
                return 0;
513
            }
514
        }
515
        #endregion
516

    
517
        #region オブジェクトよりBool値変換(bool)
518
        /// <summary>
519
        /// オブジェクトよりBool値変換(bool)
520
        /// </summary>
521
        /// <param name="sendData"></param>
522
        /// <returns></returns>
523
        public static bool cnvBool(object sendData)
524
        {
525
            try
526
            {
527
                bool retData = false;
528

    
529
                // 空判定
530
                if (sendData == null) return retData;
531
                if (sendData.ToString().Trim().Length == 0) return retData;
532

    
533
                // 変換
534
                bool.TryParse(sendData.ToString(), out retData);
535

    
536
                return retData;
537
            }
538
            catch (System.Exception ex)
539
            {
540
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
541
                return false;
542
            }
543
        }
544
        #endregion
545

    
546
        #region オブジェクトより数値変換(TimeSpan)
547
        /// <summary>
548
        /// オブジェクトより数値変換(TimeSpan)
549
        /// </summary>
550
        /// <param name="sendData"></param>
551
        /// <returns></returns>
552
        public static TimeSpan cnvTimeSpan(object sendData)
553
        {
554
            try
555
            {
556
                TimeSpan retData = TimeSpan.Zero;
557

    
558
                // 空判定
559
                if (sendData == null) return retData;
560
                if (sendData.ToString().Trim().Length == 0) return retData;
561

    
562

    
563
                // 変換
564
                TimeSpan.TryParse(sendData.ToString().Trim(), out retData);
565

    
566
                return retData;
567
            }
568
            catch (System.Exception ex)
569
            {
570
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
571
                return TimeSpan.MinValue;
572
            }
573
        }
574
        #endregion
575

    
576
        #region decimal値をTimeSpan値へ変換する
577
        /// <summary>
578
        /// decimal値をTimeSpan値へ変換する
579
        /// </summary>
580
        public static TimeSpan cnvDecimal2TimeSpan(decimal sendData)
581
        {
582
            try
583
            {
584
                TimeSpan retData = TimeSpan.Zero;
585

    
586
                // 空判定
587
                if (sendData.ToString().Trim().Length == 0) return retData;
588

    
589
                // 変換
590
                retData = new TimeSpan((int)sendData, (int)((sendData % 1) * 100.00m), 0);
591

    
592
                return retData;
593
            }
594
            catch (System.Exception ex)
595
            {
596
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
597
                return TimeSpan.MinValue;
598
            }
599
        }
600
        #endregion
601

    
602
        #region TimeSpan値をdecimal値へ変換する
603
        /// <summary>
604
        /// TimeSpan値をdecimal値へ変換する
605
        /// </summary>
606
        public static decimal cnvTimeSpan2Decimal(TimeSpan sendData)
607
        {
608
            try
609
            {
610
                decimal retData = 0;
611

    
612
                // 空判定
613
                if (sendData.ToString().Trim().Length == 0) return retData;
614

    
615
                // 変換
616
                retData = sendData.Hours + (sendData.Minutes / 100.00m);
617

    
618
                return retData;
619
            }
620
            catch (System.Exception ex)
621
            {
622
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
623
                return 0.0m;
624
            }
625
        }
626
        #endregion
627

    
628
        #region 四捨五入
629
        /// <summary>
630
        /// 四捨五入
631
        /// </summary>
632
        /// <param name="InputData"></param>
633
        /// <returns></returns>
634
        public static int cnvRound(double InputData)
635
        {
636
            int retRoundData = 0;
637
            try
638
            {
639
                retRoundData = (int)Math.Round(InputData, 0, MidpointRounding.AwayFromZero);
640

    
641
                return retRoundData;
642
            }
643
            catch (System.Exception ex)
644
            {
645
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
646
                return retRoundData;
647
            }
648
        }
649
        #endregion
650

    
651
        #region 切り上げ
652
        /// <summary>
653
        /// 切り上げ
654
        /// </summary>
655
        /// <param name="InputData"></param>
656
        /// <returns></returns>
657
        public static int cnvRoundUp(double InputData)
658
        {
659
            int retRoundData = 0;
660
            try
661
            {
662
                retRoundData = (int)Math.Ceiling(InputData);
663

    
664
                return retRoundData;
665
            }
666
            catch (System.Exception ex)
667
            {
668
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
669
                return retRoundData;
670
            }
671
        }
672
        #endregion
673

    
674
        #region 切り捨て
675
        /// <summary>
676
        /// 切り捨て
677
        /// </summary>
678
        /// <param name="InputData"></param>
679
        /// <returns></returns>
680
        public static int cnvTruncate(double InputData)
681
        {
682
            int retRoundData = 0;
683
            try
684
            {
685
                retRoundData = (int)Math.Truncate(InputData);
686

    
687
                return retRoundData;
688
            }
689
            catch (System.Exception ex)
690
            {
691
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
692
                return retRoundData;
693
            }
694
        }
695
        #endregion
696

    
697
        #region 四捨五入(四捨五入位置指定)
698
        /// <summary>
699
        /// 四捨五入(四捨五入位置指定)
700
        /// </summary>
701
        /// <param name="value"></param>
702
        /// <param name="pos"></param>
703
        /// <returns></returns>
704
        public static int IntRound(double value, int pos)
705
        {
706
            // 何乗かを求める
707
            int posion = (int)Math.Pow(10, (pos + 1));
708

    
709
            int upperval = (int)(value / posion);
710
            upperval *= posion;
711
            int lowerval = (int)(value % posion);
712
            int chkval = (int)(lowerval / Math.Pow(10, pos));
713
            if (chkval > 4) upperval += (1 * posion);
714

    
715
            return upperval;
716
        }
717
        #endregion
718

    
719
        #region 切り捨て(切り捨て位置指定)
720
        /// <summary>
721
        /// 切り捨て(切り捨て位置指定)
722
        /// </summary>
723
        /// <param name="value"></param>
724
        /// <param name="pos"></param>
725
        /// <returns></returns>
726
        public static int IntRoundDown(double value, int pos)
727
        {
728
            // 何乗かを求める
729
            int posion = (int)Math.Pow(10, (pos + 1));
730

    
731
            int upperval = (int)(value / posion);
732
            upperval *= posion;
733

    
734
            return upperval;
735
        }
736
        #endregion
737

    
738
        #region 切り上げ(切り上げ位置指定)
739
        /// <summary>
740
        /// 切り上げ(切り上げ位置指定)
741
        /// </summary>
742
        /// <param name="value"></param>
743
        /// <param name="pos"></param>
744
        /// <returns></returns>
745
        public static int IntRoundUp(double value, int pos)
746
        {
747
            // 何乗かを求める
748
            int posion = (int)Math.Pow(10, (pos + 1));
749

    
750
            int upperval = (int)(value / posion);
751
            upperval *= posion;
752
            int lowerval = (int)(value % posion);
753
            int chkval = (int)(lowerval / Math.Pow(10, pos));
754
            if (chkval > 0) upperval += (1 * posion);
755

    
756
            return upperval;
757
        }
758
        public static decimal DecimalRoundUp(decimal value, int pos)
759
        {
760
            // 何乗かを求める
761
            int posion = (int)Math.Pow(10, pos);
762

    
763
            return (Math.Ceiling(value * posion) / posion);
764
        }
765
        #endregion
766

    
767
        #region 0~26までの数字をA~Zに変換する
768
        /// <summary>
769
        /// 0~26までの数字をA~Zに変換する
770
        /// </summary>
771
        /// <param name="num"></param>
772
        /// <returns></returns>
773
        public static string cnvNumberToAlphaChar(int num)
774
        {
775
            try
776
            {
777
                // ----- 16進数文字列 -> 数値
778
                int CnvCode = Convert.ToInt32("0041", 16);      // 'A'
779
                int LastCode = Convert.ToInt32("005A", 16);     // 'Z'
780

    
781
                // 'Z'を超えたら余剰を使って変換する
782
                int work = (CnvCode + num);
783
                if (work <= LastCode)
784
                {
785
                    // 変換値を加算する
786
                    CnvCode += num;
787
                }
788
                else
789
                {
790
                    CnvCode += (work % LastCode);
791
                }
792
                // 'Z'を超えたら採番しない
793
                //if (CnvCode > LastCode) return string.Empty;
794

    
795
                // 数値(文字コード) -> 文字
796
                char c = Convert.ToChar(CnvCode);
797
                // 英字「文字列」
798
                string newChar = c.ToString();
799

    
800
                return newChar;
801
            }
802
            catch (System.Exception ex)
803
            {
804
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
805
                return "";
806
            }
807
        }
808
        #endregion
809

    
810
        #region Excelのカラム名的なアルファベットを数値へ変換します。
811
        /// <summary>
812
        /// Excelのカラム名的なアルファベットを数値へ変換します。
813
        /// </summary>
814
        /// <returns></returns>
815
        public static int cnvAlphaToNumber(this string self)
816
        {
817
            int result = 0;
818
            if (string.IsNullOrEmpty(self)) return result;
819

    
820
            char[] chars = self.ToCharArray();
821
            int len = self.Length - 1;
822
            foreach (var c in chars)
823
            {
824
                int asc = (int)c - 64;
825
                if (asc < 1 || asc > 26) return 0;
826
                result += asc * (int)Math.Pow((double)26, (double)len--);
827
            }
828
            return (result - 1);
829
        }
830
        #endregion
831

    
832
        #region 日付が最小値ならば"未定"文字を返す
833
        /// <summary>
834
        /// 日付が最小値ならば"未定"文字を返す
835
        /// </summary>
836
        /// <param name="srcDate"></param>
837
        /// <returns></returns>
838
        public static string cnvDateToUndecidedString(DateTime srcDate)
839
        {
840
            try
841
            {
842
                string work = "";
843
                if (srcDate.Equals(DateTime.MinValue))
844
                    work = CommonDefine.s_UndecidedString;
845
                else
846
                    work = srcDate.ToShortDateString();
847

    
848
                return work;
849
            }
850
            catch (System.Exception ex)
851
            {
852
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
853
                return "";
854
            }
855
        }
856
        #endregion
857

    
858
        #region オブジェクトより日付を返す(文字列が"未定"文字ならば日付最小値を返す)
859
        /// <summary>
860
        /// オブジェクトより日付を返す
861
        /// 文字列が"未定"文字ならば日付最小値を返す
862
        /// </summary>
863
        /// <param name="srcDate"></param>
864
        /// <returns></returns>
865
        public static DateTime cnvUndecidedStringToDate(object srcDate)
866
        {
867
            DateTime work = DateTime.MinValue;
868
            try
869
            {
870
                if (!srcDate.Equals(CommonDefine.s_UndecidedString))
871
                    work = cnvDate(srcDate);
872

    
873
                return work;
874
            }
875
            catch (System.Exception ex)
876
            {
877
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
878
                return work;
879
            }
880
        }
881
        #endregion
882

    
883
        #region オブジェクトより数値(文字列が"未定"文字ならば0を返す)
884
        /// <summary>
885
        /// オブジェクトより数値
886
        /// 文字列が"未定"文字ならば0を返す
887
        /// </summary>
888
        /// <param name="srcDate"></param>
889
        /// <returns></returns>
890
        public static double cnvUndecidedStringToDouble(object srcDate)
891
        {
892
            double work = 0;
893
            try
894
            {
895
                if (!srcDate.Equals(CommonDefine.s_UndecidedString))
896
                    work = cnvDouble(srcDate);
897

    
898
                return work;
899
            }
900
            catch (System.Exception ex)
901
            {
902
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
903
                return work;
904
            }
905
        }
906
        #endregion
907

    
908
        #region 色指定文字列より色を返す
909
        /// <summary>
910
        /// 色指定文字列より色を返す
911
        /// </summary>
912
        /// <param name="strColor"></param>
913
        /// <returns></returns>
914
        public static Color cnvStringToColor(string strColor)
915
        {
916
            Color ColorRet = Color.White;
917
            try
918
            {
919
                // 色文字列チェック
920
                if (!CommonMotions.chkObjectIsNull(strColor) && strColor.Length != 0)
921
                {
922
                    ColorRet = ColorTranslator.FromHtml(strColor);
923
                }
924
                return ColorRet;
925
            }
926
            catch (System.Exception ex)
927
            {
928
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
929
                return ColorRet;
930
            }
931
        }
932
        #endregion
933

    
934
        #region 色指定文字列より色を返す・設定無しは指定場所のデフォルトを返す
935
        /// <summary>
936
        /// 色指定文字列より色を返す・設定無しは指定場所のデフォルトを返す
937
        /// </summary>
938
        /// <param name="strColor"></param>
939
        /// <param name="point"></param>
940
        /// <returns></returns>
941
        public static Color getBackForeColor(string strColor, TermMaster.PalceOfColorDef point)
942
        {
943
            Color ColorRet = Color.White;
944
            try
945
            {
946
                // デフォルトセット
947
                if (point == TermMaster.PalceOfColorDef.BackColor)
948
                {   // 背景
949
                    ColorRet = Color.White;
950
                }
951
                else if (point == TermMaster.PalceOfColorDef.ForeColor)
952
                {   // 文字色
953
                    ColorRet = Color.Black;
954
                }
955
                else
956
                {
957
                    ColorRet = Color.Transparent;
958
                }
959

    
960
                if (!chkObjectIsNull(strColor) && strColor.Length != 0)
961
                {
962
                }
963
                else
964
                {
965
                    strColor = String.Format("0x{0:X2}{1:X2}{2:X2}", ColorRet.R, ColorRet.G, ColorRet.B);
966
                }
967

    
968
                ColorRet = cnvStringToColor(strColor);
969

    
970
                return ColorRet;
971
            }
972
            catch (System.Exception ex)
973
            {
974
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
975
                return ColorRet;
976
            }
977
        }
978
        #endregion
979

    
980
        #region 補色を取得する
981
        /// <summary>
982
        /// 補色を取得する
983
        /// </summary>
984
        /// <param name="color"></param>
985
        /// <returns></returns>
986
        public static Color GetComplementaryColor(Color color)
987
        {
988
            try
989
            {
990
                byte r = (byte)(color.R ^ 0xFF);
991
                byte g = (byte)(color.G ^ 0xFF);
992
                byte b = (byte)(color.B ^ 0xFF);
993

    
994
                return Color.FromArgb(r, g, b);
995
            }
996
            catch (System.Exception ex)
997
            {
998
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
999
                return color;
1000
            }
1001
        }
1002
        #endregion
1003

    
1004
        #region 指定桁数の数値最大値を返す
1005
        /// <summary>
1006
        /// 指定桁数の数値最大値を返す
1007
        /// </summary>
1008
        /// <param name="NumLen"></param>
1009
        /// <returns></returns>
1010
        public static int CreateMaxNumeric(int NumLen)
1011
        {
1012
            try
1013
            {
1014
                string strNum = string.Empty;
1015
                for (int i = 0; i < NumLen; i++)
1016
                {
1017
                    strNum += "9";
1018
                }
1019

    
1020
                return cnvInt(strNum);
1021
            }
1022
            catch (System.Exception ex)
1023
            {
1024
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1025
                return 0;
1026
            }
1027
        }
1028
        #endregion
1029

    
1030
        #region RGBカラーパレット作成処理
1031
        /// <summary>
1032
        /// RGBカラーパレット作成処理
1033
        /// </summary>
1034
        /// <returns></returns>
1035
        private static void CreatePalette()
1036
        {
1037
            try
1038
            {
1039
                // 青→緑
1040
                for (int i = 0; i < 64; i++)
1041
                {
1042
                    int _green = i * 4;
1043
                    m_RGBColor[i] = Color.FromArgb(255, 0, _green, 255 - _green);
1044
                }
1045
                // 緑→黄
1046
                for (int i = 0; i < 64; i++)
1047
                {
1048
                    int _red = i * 4;
1049
                    m_RGBColor[i + 64] = Color.FromArgb(255, _red, 255, 0);
1050

    
1051
                }
1052
                // 黄→赤
1053
                for (int i = 0; i < 128; i++)
1054
                {
1055
                    int _green = 255 - i * 2;
1056
                    m_RGBColor[i + 128] = Color.FromArgb(255, 255, _green, 0);
1057
                }
1058
            }
1059
            catch (Exception ex)
1060
            {
1061
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1062
            }
1063
        }
1064
        #endregion
1065

    
1066
        #region 半角数字を全角数字に変換する。
1067
        /// <summary>
1068
        /// 半角数字を全角数字に変換する。
1069
        /// </summary>
1070
        public static string HanToZenNum(string s)
1071
        {
1072
            return Regex.Replace(s, "[0-9]", p => ((char)(p.Value[0] - '0' + '0')).ToString());
1073
        }
1074
        #endregion
1075

    
1076
        #region TimeSpanから年数を取得する
1077
        /// <summary>
1078
        /// TimeSpanから年数を取得する(切り上げ)
1079
        /// </summary>
1080
        /// <param name="timespan"></param>
1081
        /// <returns></returns>
1082
        public static int GetTimeSpanYears(this TimeSpan timespan)
1083
        {
1084
            return CommonMotions.cnvRoundUp((double)timespan.Days / 365.2425);
1085
        }
1086
        #endregion
1087

    
1088
        #region TimeSpanから月数を取得する
1089
        /// <summary>
1090
        /// TimeSpanから月数を取得する
1091
        /// </summary>
1092
        /// <param name="timespan"></param>
1093
        /// <returns></returns>
1094
        public static int GetTimeSpanMonths(this TimeSpan timespan)
1095
        {
1096
            return (int)((double)timespan.Days / 30.436875);
1097
        }
1098
        #endregion
1099

    
1100
        #endregion
1101

    
1102
        #region ---------- データチェックメソッド
1103
        #region ディレクトリの存在チェック
1104
        /// <summary>
1105
        /// ディレクトリの存在チェック
1106
        /// </summary>
1107
        /// <param name="DirectryName">フォルダパス</param>
1108
        /// <returns></returns>
1109
        public static bool ChkDirPath(string DirectryName, bool CreateFlg = false)
1110
        {
1111
            try
1112
            {
1113
                // フォルダ (ディレクトリ) が存在しているかどうか確認する
1114
                if (!Directory.Exists(@DirectryName))
1115
                {
1116
                    // 作成フラグOffならばエラー
1117
                    if (!CreateFlg) return false;
1118

    
1119
                    // ディレクトリを作成する
1120
                    Directory.CreateDirectory(@DirectryName);
1121
                }
1122

    
1123
                return true;
1124
            }
1125
            catch (Exception ex)
1126
            {
1127
                logger.ErrorFormat(ex.Message);
1128
                return false;
1129
            }
1130
        }
1131
        #endregion
1132

    
1133
        #region オブジェクトのNullチェック
1134
        /// <summary>
1135
        /// オブジェクトのNullチェック
1136
        /// </summary>
1137
        /// <param name="sendData">オブジェクト</param>
1138
        /// <returns></returns>
1139
        public static bool chkObjectIsNull(Object sendData)
1140
        {
1141
            try
1142
            {
1143
                if (sendData == null) return true;
1144

    
1145
                return false;
1146
            }
1147
            catch (System.Exception ex)
1148
            {
1149
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1150
                return false;
1151
            }
1152
        }
1153
        #endregion
1154

    
1155
        #region 数値チェック
1156
        /// <summary>
1157
        /// 数値チェック
1158
        /// </summary>
1159
        /// <param name="data">Long文字列</param>
1160
        /// <param name="indispensable">入力必須チェック</param>
1161
        /// <returns>true:正常 false:異常</returns>
1162
        public static bool chkNumeric(object CheckData, bool indispensable = false)
1163
        {
1164
            try
1165
            {
1166
                if (chkObjectIsNull(CheckData)) return false;
1167

    
1168
                string RecvData = cnvString(CheckData);
1169
                double revData = 0;
1170
                // 必須入力チェック
1171
                if (indispensable)
1172
                {
1173
                    if (RecvData.Replace(",", "").Replace("\\", "").Trim().Length == 0) return false;
1174
                }
1175
                // Nullが入っていなくてレングスが0は数値として扱う
1176
                if (RecvData.Replace(",", "").Replace("\\", "").Trim().Length == 0) return true;
1177

    
1178
                return double.TryParse(RecvData.Replace(",", "").Replace("\\", "").Trim(), out revData);
1179
            }
1180
            catch (System.Exception ex)
1181
            {
1182
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1183
                return false;
1184
            }
1185
        }
1186
        #endregion
1187

    
1188
        #region 数値チェック(long)
1189
        /// <summary>
1190
        /// 数値チェック(long)
1191
        /// </summary>
1192
        /// <param name="data">Long文字列</param>
1193
        /// <param name="indispensable">入力必須チェック</param>
1194
        /// <returns>true:正常 false:異常</returns>
1195
        public static bool chkNumeric(object sendData, ref long retData, bool indispensable = false)
1196
        {
1197
            try
1198
            {
1199
                // 必須入力チェック
1200
                if (indispensable)
1201
                {
1202
                    if (cnvString(sendData).Replace(",", "").Replace("\\", "").Trim().Length == 0) return false;
1203
                }
1204

    
1205
                return long.TryParse(cnvString(sendData).Replace(",", "").Replace("\\", "").Trim(), out retData);
1206
            }
1207
            catch (System.Exception ex)
1208
            {
1209
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1210
                return false;
1211
            }
1212
        }
1213
        #endregion
1214

    
1215
        #region 数値チェック(int)
1216
        /// <summary>
1217
        /// 数値チェック(int)
1218
        /// </summary>
1219
        /// <param name="data">Long文字列</param>
1220
        /// <param name="indispensable">入力必須チェック</param>
1221
        /// <returns>true:正常 false:異常</returns>
1222
        public static bool chkNumeric(object sendData, ref int retData, bool indispensable = false)
1223
        {
1224
            try
1225
            {
1226
                // 必須入力チェック
1227
                if (indispensable)
1228
                {
1229
                    if (cnvString(sendData).Replace(",", "").Replace("\\", "").Trim().Length == 0) return false;
1230
                }
1231

    
1232
                return int.TryParse(cnvString(sendData).Replace(",", "").Replace("\\", "").Trim(), out retData);
1233
            }
1234
            catch (System.Exception ex)
1235
            {
1236
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1237
                return false;
1238
            }
1239
        }
1240
        #endregion
1241

    
1242
        #region 数値チェック(double)
1243
        /// <summary>
1244
        /// 数値チェック(double)
1245
        /// </summary>
1246
        /// <param name="data">Long文字列</param>
1247
        /// <param name="indispensable">入力必須チェック</param>
1248
        /// <returns>true:正常 false:異常</returns>
1249
        public static bool chkNumeric(object sendData, ref double retData, bool indispensable = false)
1250
        {
1251
            try
1252
            {
1253
                // 必須入力チェック
1254
                if (indispensable)
1255
                {
1256
                    if (cnvString(sendData).Replace(",", "").Replace("\\", "").Trim().Length == 0) return false;
1257
                }
1258

    
1259
                return double.TryParse(cnvString(sendData).Replace(",", "").Replace("\\", "").Trim(), out retData);
1260
            }
1261
            catch (System.Exception ex)
1262
            {
1263
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1264
                return false;
1265
            }
1266
        }
1267
        #endregion
1268

    
1269
        #region 時間チェック(TimeSpan)
1270
        /// <summary>
1271
        /// 時間チェック(TimeSpan)
1272
        /// </summary>
1273
        /// <returns>true:正常 false:異常</returns>
1274
        public static bool chkTimeSpan(object sendData, ref TimeSpan retData, bool indispensable = false)
1275
        {
1276
            try
1277
            {
1278
                // 必須入力チェック
1279
                if (indispensable)
1280
                {
1281
                    if (cnvString(sendData).Trim().Length == 0) return false;
1282
                }
1283

    
1284
                return TimeSpan.TryParse(cnvString(sendData).Replace(",", "").Replace("\\", "").Trim(), out retData);
1285
            }
1286
            catch (System.Exception ex)
1287
            {
1288
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1289
                return false;
1290
            }
1291
        }
1292
        #endregion
1293

    
1294
        #region 文字列長さチェック(UTF-8)
1295
        /// <summary>
1296
        /// 文字列長さチェック(UTF-8)
1297
        /// </summary>
1298
        /// <param name="strData">対象文字列</param>
1299
        /// <param name="lngMaxLen">最大長</param>
1300
        /// <param name="indispensable">入力必須チェック</param>
1301
        /// <returns>true:正常 false:異常</returns>
1302
        public static bool chkStringLength(string strData, int lngMaxLen, bool indispensable = false)
1303
        {
1304
            bool bRet = true;
1305
            //int lngLen = 0;
1306
            try
1307
            {
1308

    
1309
                //Encoding sjis = Encoding.GetEncoding("shift-jis");
1310
                Encoding utf8 = Encoding.GetEncoding("utf-8");
1311

    
1312
                // 必須入力チェック
1313
                if (indispensable)
1314
                {
1315
                    if (strData.Length == 0) bRet = false;
1316
                }
1317
                // S-Jisチェック
1318
                //lngLen = sjis.GetByteCount(strData);
1319
                // UTF-8チェック
1320
                //lngLen = utf8.GetByteCount(strData);
1321
                //if (lngLen > lngMaxLen) bRet = false;
1322
                // C#内はUTFなので文字長だけをチェックする
1323
                if (strData.Length > lngMaxLen) bRet = false;
1324
            }
1325
            catch (System.Exception ex)
1326
            {
1327
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1328
                bRet = false;
1329
            }
1330

    
1331
            return bRet;
1332
        }
1333
        #endregion
1334

    
1335
        #region 郵便番号チェック
1336
        /// <summary>
1337
        /// 郵便番号チェック
1338
        /// </summary>
1339
        /// <param name="strData">郵便番号文字列</param>
1340
        /// <returns>true:正常 false:異常</returns>
1341
        public static bool chkZipcode(string strdata)
1342
        {
1343
            bool bRet = false;
1344

    
1345
            Regex regex = new Regex("^[0-9]{3}[-][0-9]{4}$");
1346
            if (regex.IsMatch(strdata))
1347
            {
1348
                bRet = true;
1349
            }
1350
            return bRet;
1351
        }
1352
        #endregion
1353

    
1354
        #region 電話番号/FAX番号チェック
1355
        /// <summary>
1356
        /// 電話番号/FAX番号チェック
1357
        /// </summary>
1358
        /// <param name="data">電話番号文字列</param>
1359
        /// <returns>true:正常 false:異常</returns>
1360
        public static bool chkPhoneNumber(string strdata)
1361
        {
1362
            bool bRet = false;
1363

    
1364
            Regex regex = new Regex("^[0-9]{2,5}-[0-9]{1,4}-[0-9]{3,4}$");
1365
            if (regex.IsMatch(strdata))
1366
            {
1367
                bRet = true;
1368
            }
1369
            return bRet;
1370
        }
1371
        #endregion
1372

    
1373
        #region メールアドレスチェック
1374
        /// <summary>
1375
        /// メールアドレスチェック
1376
        /// </summary>
1377
        /// <param name="data">電話番号文字列</param>
1378
        /// <returns>true:正常 false:異常</returns>
1379
        public static bool chkMailAddress(string strdata)
1380
        {
1381
            bool bRet = false;
1382

    
1383
            Regex regex = new Regex(@"\A\P{Cc}+@\P{Cc}+\z");
1384
            if (regex.IsMatch(strdata))
1385
            {
1386
                bRet = true;
1387
            }
1388
            return bRet;
1389
        }
1390
        #endregion
1391

    
1392
        #region 日付チェック
1393
        /// <summary>
1394
        /// 日付チェック
1395
        /// </summary>
1396
        /// <param name="data">日付文字列</param>
1397
        /// <returns>true:正常 false:異常</returns>
1398
        public static bool chkDate(string strdata)
1399
        {
1400
            bool bRet = true;
1401
            try
1402
            {
1403
                DateTime dtwork = DateTime.MinValue;
1404

    
1405
                return DateTime.TryParse(strdata, out dtwork);
1406
            }
1407
            catch (System.Exception ex)
1408
            {
1409
                logger.DebugFormat("chkDate Error message:{0}", ex.Message);
1410
                bRet = false;
1411
            }
1412
            return bRet;
1413
        }
1414
        #endregion
1415

    
1416
        #region 対象が空かどうかをチェックする
1417
        /// <summary>
1418
        /// 対象が空かどうかをチェックする
1419
        /// </summary>
1420
        /// <param name="objCell"></param>
1421
        /// <param name="iColumn"></param>
1422
        /// <returns>true:空 flase:有効</returns>
1423
        public static bool chkCellBlank(object objCell)
1424
        {
1425
            try
1426
            {
1427
                if (chkObjectIsNull(objCell)) return true;
1428
                if (objCell.ToString().Length == 0) return true;
1429

    
1430
                return false;
1431
            }
1432
            catch (System.Exception ex)
1433
            {
1434
                logger.DebugFormat("chkDate Error message:{0}", ex.Message);
1435
                return true;
1436
            }
1437
        }
1438
        #endregion
1439

    
1440
        #region 指定文字が全てひらがなのチェック
1441
        /// <summary>
1442
        /// 指定文字が全てひらがなのチェック
1443
        /// </summary>
1444
        /// <param name="str"></param>
1445
        /// <returns></returns>
1446
        public static bool chkIsHiragana(string str)
1447
        {
1448
            return Regex.IsMatch(str, @"^\p{IsHiragana}*$");
1449
        }
1450
        #endregion
1451

    
1452
        #region 指定文字が全てカタカナのチェック
1453
        /// <summary>
1454
        /// 指定文字が全てカタカナのチェック
1455
        /// </summary>
1456
        /// <param name="str"></param>
1457
        /// <returns></returns>
1458
        public static bool chkIsKatakana(string str)
1459
        {
1460
            return Regex.IsMatch(str, @"^\p{IsKatakana}*$");
1461
        }
1462
        #endregion
1463

    
1464
        #region 指定文字が全て数字のチェック
1465
        /// <summary>
1466
        /// 指定文字が全て数字のチェック
1467
        /// </summary>
1468
        /// <param name="str"></param>
1469
        /// <returns></returns>
1470
        public static bool chkIsNumeric(string str)
1471
        {
1472
            return Regex.IsMatch(str, @"[^a-zA-z0-9-_]");
1473
        }
1474
        #endregion
1475

    
1476
        #region 画面フィールド入力必須チェック
1477
        /// <summary>
1478
        /// 画面フィールド入力必須チェック
1479
        /// </summary>
1480
        /// <param name="dispControl">コントロールオブジェクト</param>
1481
        /// <returns>false:エラー true:エラーなし</returns>
1482
        public static bool DispFieldIndispensable(Control dispControl)
1483
        {
1484
            bool bAns = true;
1485
            try
1486
            {
1487
                // 必須入力チェック
1488
                if (chkObjectIsNull(dispControl))
1489
                {
1490
                    bAns = false;
1491
                }
1492
                else
1493
                {
1494
                    if (dispControl.Text.ToString().Length == 0)
1495
                    {
1496
                        bAns = false;
1497
                    }
1498
                }
1499
            }
1500
            catch (Exception ex)
1501
            {
1502
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1503
                bAns = false;
1504
            }
1505
            finally
1506
            {
1507
                // 背景色変更
1508
                chgBackColor(dispControl, bAns);
1509
            }
1510
            return bAns;
1511
        }
1512
        #endregion
1513

    
1514
        #region 画面フィールド入力文字数チェック
1515
        /// <summary>
1516
        /// 画面フィールド入力文字数チェック
1517
        /// </summary>
1518
        /// <param name="dispControl">コントロールオブジェクト</param>
1519
        /// <param name="sLength">文字列長</param>
1520
        /// <param name="indispensable">true:必須入力チェック</param>
1521
        /// <returns>false:エラー true:エラーなし</returns>
1522
        public static bool DispFieldLengthCheck(Control dispControl, int sLength, bool indispensable = false)
1523
        {
1524
            bool bAns = true;
1525
            try
1526
            {
1527
                // 必須入力チェック
1528
                if (indispensable)
1529
                {
1530
                    bAns = DispFieldIndispensable(dispControl);
1531
                }
1532

    
1533
                if (dispControl.Text.ToString().Length != 0)
1534
                {
1535
                    // レングスチェック
1536
                    bAns = chkStringLength(dispControl.Text.ToString(), sLength);
1537
                }
1538
            }
1539
            catch (Exception ex)
1540
            {
1541
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1542
                bAns = false;
1543
            }
1544
            finally
1545
            {
1546
                // 背景色変更
1547
                chgBackColor(dispControl, bAns);
1548
            }
1549
            return bAns;
1550
        }
1551
        #endregion
1552

    
1553
        #region 画面フィールド入力日付チェック
1554
        /// <summary>
1555
        /// 画面フィールド入力日付チェック
1556
        /// </summary>
1557
        /// <param name="dispControl">コントロールオブジェクト</param>
1558
        /// <param name="indispensable">true:必須入力チェック</param>
1559
        /// <returns>false:エラー true:エラーなし</returns>
1560
        public static bool DispFieldDateCheck(Control dispControl, bool indispensable = false)
1561
        {
1562
            bool bAns = true;
1563
            try
1564
            {
1565
                // 必須入力チェック
1566
                if (indispensable)
1567
                {
1568
                    bAns = DispFieldIndispensable(dispControl);
1569
                }
1570

    
1571
                if (dispControl.Text.ToString().Length != 0)
1572
                {
1573
                    // 未定はエラーにしない
1574
                    if (!indispensable && dispControl.Text.Equals(CommonDefine.s_UndecidedString)) { }
1575
                    else
1576
                        // 日付チェック
1577
                        bAns = chkDate(dispControl.Text.ToString());
1578
                }
1579
            }
1580
            catch (Exception ex)
1581
            {
1582
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1583
                bAns = false;
1584
            }
1585
            finally
1586
            {
1587
                // 背景色変更
1588
                chgBackColor(dispControl, bAns);
1589
            }
1590
            return bAns;
1591
        }
1592
        #endregion
1593

    
1594
        #region 画面フィールドコンボボックスチェック
1595
        /// <summary>
1596
        /// 画面フィールド入力コンボボックスチェック
1597
        /// </summary>
1598
        /// <param name="dispControl">コントロールオブジェクト</param>
1599
        /// <param name="indispensable">true:必須入力チェック</param>
1600
        /// <returns>false:エラー true:エラーなし</returns>
1601
        public static bool DispFieldCombCheck(Control dispControl, bool indispensable = false)
1602
        {
1603
            bool bAns = true;
1604
            try
1605
            {
1606
                ComboBox comboBox = (ComboBox)dispControl;
1607
                // 必須入力チェック
1608
                if (indispensable)
1609
                {
1610
                    bAns = DispFieldIndispensable(dispControl);
1611
                    // 必須時未定はエラー
1612
                    if (dispControl.Text.Equals(CommonDefine.s_UndecidedString)) bAns = false;
1613
                }
1614

    
1615
                if (dispControl.Text.ToString().Length != 0)
1616
                {
1617
                    // 未定はエラーにしない
1618
                    if (!indispensable && dispControl.Text.Equals(CommonDefine.s_UndecidedString)) { }
1619
                    else
1620
                    {
1621
                        // 入力チェック
1622
                        if (dispControl.Text.ToString().Length == 0) bAns = false;
1623
                    }
1624
                }
1625
            }
1626
            catch (Exception ex)
1627
            {
1628
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1629
                bAns = false;
1630
            }
1631
            finally
1632
            {
1633
                // 背景色変更
1634
                chgBackColor(dispControl, bAns);
1635
            }
1636
            return bAns;
1637
        }
1638
        #endregion
1639

    
1640
        #region 画面フィールド入力郵便番号チェック
1641
        /// <summary>
1642
        /// 画面フィールド入力郵便番号チェック
1643
        /// </summary>
1644
        /// <param name="dispControl">コントロールオブジェクト</param>
1645
        /// <param name="indispensable">true:必須入力チェック</param>
1646
        /// <returns>false:エラー true:エラーなし</returns>
1647
        public static bool DispFieldZipCodeCheck(Control dispControl, bool indispensable = false)
1648
        {
1649
            bool bAns = true;
1650
            try
1651
            {
1652
                // 必須入力チェック
1653
                if (indispensable)
1654
                {
1655
                    bAns = DispFieldIndispensable(dispControl);
1656
                }
1657

    
1658
                if (dispControl.Text.ToString().Length != 0)
1659
                {
1660
                    // 郵便番号チェック
1661
                    bAns = chkZipcode(dispControl.Text.ToString());
1662
                }
1663
            }
1664
            catch (Exception ex)
1665
            {
1666
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1667
                bAns = false;
1668
            }
1669
            finally
1670
            {
1671
                // 背景色変更
1672
                chgBackColor(dispControl, bAns);
1673
            }
1674
            return bAns;
1675
        }
1676
        #endregion
1677

    
1678
        #region 画面フィールド入力Intチェック
1679
        /// <summary>
1680
        /// 画面フィールド入力Intチェック
1681
        /// </summary>
1682
        /// <param name="dispControl">コントロールオブジェクト</param>
1683
        /// <param name="indispensable">true:必須入力チェック</param>
1684
        /// <returns>false:エラー true:エラーなし</returns>
1685
        public static bool DispFieldIntCheck(Control dispControl, bool indispensable = false)
1686
        {
1687
            bool bAns = true;
1688
            try
1689
            {
1690
                // 必須入力チェック
1691
                if (indispensable)
1692
                {
1693
                    bAns = DispFieldIndispensable(dispControl);
1694
                }
1695

    
1696
                if (dispControl.Text.ToString().Length != 0)
1697
                {
1698
                    int work = 0;
1699
                    // 数値チェック
1700
                    //bAns = chkNumeric(dispControl.Text.ToString(), ref work);
1701
                    bAns = int.TryParse(dispControl.Text.ToString(), out work);
1702
                }
1703
            }
1704
            catch (Exception ex)
1705
            {
1706
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1707
                bAns = false;
1708
            }
1709
            finally
1710
            {
1711
                // 背景色変更
1712
                chgBackColor(dispControl, bAns);
1713
            }
1714
            return bAns;
1715
        }
1716
        #endregion
1717

    
1718
        #region 画面フィールド入力Doubleチェック
1719
        /// <summary>
1720
        /// 画面フィールド入力Doubleチェック
1721
        /// </summary>
1722
        /// <param name="dispControl">コントロールオブジェクト</param>
1723
        /// <param name="indispensable">true:必須入力チェック</param>
1724
        /// <returns>false:エラー true:エラーなし</returns>
1725
        public static bool DispFieldDoubleCheck(Control dispControl, bool indispensable = false)
1726
        {
1727
            bool bAns = true;
1728
            try
1729
            {
1730
                // 必須入力チェック
1731
                if (indispensable)
1732
                {
1733
                    bAns = DispFieldIndispensable(dispControl);
1734
                }
1735

    
1736
                if (dispControl.Text.ToString().Length != 0)
1737
                {
1738
                    double work = 0;
1739
                    // 数値チェック
1740
                    bAns = chkNumeric(dispControl.Text.ToString(), ref work);
1741
                }
1742
            }
1743
            catch (Exception ex)
1744
            {
1745
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1746
                bAns = false;
1747
            }
1748
            finally
1749
            {
1750
                // 背景色変更
1751
                chgBackColor(dispControl, bAns);
1752
            }
1753
            return bAns;
1754
        }
1755
        #endregion
1756

    
1757
        #region 画面フィールド入力電話番号チェック
1758
        /// <summary>
1759
        /// 画面フィールド入力電話番号チェック
1760
        /// </summary>
1761
        /// <param name="dispControl">コントロールオブジェクト</param>
1762
        /// <param name="indispensable">true:必須入力チェック</param>
1763
        /// <returns>false:エラー true:エラーなし</returns>
1764
        public static bool DispFieldPhoneNumberCheck(Control dispControl, bool indispensable = false)
1765
        {
1766
            bool bAns = true;
1767
            try
1768
            {
1769
                // 必須入力チェック
1770
                if (indispensable)
1771
                {
1772
                    bAns = DispFieldIndispensable(dispControl);
1773
                }
1774

    
1775
                if (dispControl.Text.ToString().Length != 0)
1776
                {
1777
                    // 電話番号チェック
1778
                    bAns = chkPhoneNumber(dispControl.Text.ToString());
1779
                }
1780
            }
1781
            catch (Exception ex)
1782
            {
1783
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1784
                bAns = false;
1785
            }
1786
            finally
1787
            {
1788
                // 背景色変更
1789
                chgBackColor(dispControl, bAns);
1790
            }
1791
            return bAns;
1792
        }
1793
        #endregion
1794

    
1795
        #region 画面フィールド入力メールアドレスチェック
1796
        /// <summary>
1797
        /// 画面フィールド入力メールアドレスチェック
1798
        /// </summary>
1799
        /// <param name="dispControl">コントロールオブジェクト</param>
1800
        /// <param name="indispensable">true:必須入力チェック</param>
1801
        /// <returns>false:エラー true:エラーなし</returns>
1802
        public static bool DispFieldMailAddressCheck(Control dispControl, bool indispensable = false)
1803
        {
1804
            bool bAns = true;
1805
            try
1806
            {
1807
                // 必須入力チェック
1808
                if (indispensable)
1809
                {
1810
                    bAns = DispFieldIndispensable(dispControl);
1811
                }
1812

    
1813
                if (dispControl.Text.ToString().Length != 0)
1814
                {
1815
                    // メールアドレスチェック
1816
                    bAns = chkMailAddress(dispControl.Text.ToString());
1817
                }
1818
            }
1819
            catch (Exception ex)
1820
            {
1821
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1822
                bAns = false;
1823
            }
1824
            finally
1825
            {
1826
                // 背景色変更
1827
                chgBackColor(dispControl, bAns);
1828
            }
1829
            return bAns;
1830
        }
1831
        #endregion
1832

    
1833
        #region 画面フィールド入力カタカナチェック
1834
        /// <summary>
1835
        /// 画面フィールド入力カタカナチェック
1836
        /// </summary>
1837
        public static bool DispFieldKatakanaCheck(Control dispControl, bool indispensable = false)
1838
        {
1839
            bool bAns = true;
1840
            try
1841
            {
1842
                // 必須入力チェック
1843
                if (indispensable)
1844
                {
1845
                    bAns = DispFieldIndispensable(dispControl);
1846
                }
1847

    
1848
                if (dispControl.Text.ToString().Length != 0)
1849
                {
1850
                    // カタカナチェック
1851
                    bAns = chkIsKatakana(dispControl.Text.ToString());
1852
                }
1853
            }
1854
            catch (Exception ex)
1855
            {
1856
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1857
                bAns = false;
1858
            }
1859
            finally
1860
            {
1861
                // 背景色変更
1862
                chgBackColor(dispControl, bAns);
1863
            }
1864
            return bAns;
1865
        }
1866
        #endregion
1867

    
1868
        #region 画面フィールド入力ひらながチェック
1869
        /// <summary>
1870
        /// 画面フィールド入力ひらがなチェック
1871
        /// </summary>
1872
        public static bool DispFieldHiraganaCheck(Control dispControl, bool indispensable = false)
1873
        {
1874
            bool bAns = true;
1875
            try
1876
            {
1877
                // 必須入力チェック
1878
                if (indispensable)
1879
                {
1880
                    bAns = DispFieldIndispensable(dispControl);
1881
                }
1882

    
1883
                if (dispControl.Text.ToString().Length != 0)
1884
                {
1885
                    // ひらながチェック
1886
                    bAns = chkIsHiragana(dispControl.Text.ToString());
1887
                }
1888
            }
1889
            catch (Exception ex)
1890
            {
1891
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1892
                bAns = false;
1893
            }
1894
            finally
1895
            {
1896
                // 背景色変更
1897
                chgBackColor(dispControl, bAns);
1898
            }
1899
            return bAns;
1900
        }
1901
        #endregion
1902

    
1903
        #region 指定した日が第何週かを求める
1904
        /// <summary>
1905
        /// 指定した日が第何週かを求める
1906
        /// </summary>
1907
        /// <param name="date"></param>
1908
        /// <returns></returns>
1909
        public static int NthWeek(DateTime date)
1910
        {
1911
            int w = (int)(new DateTime(date.Year, date.Month, 1).DayOfWeek);
1912
            return (date.Day + w - 1) / 7 + 1;
1913

    
1914
        }
1915
        #endregion
1916
        #endregion
1917

    
1918
        #region ---------- 工事管理システム専用
1919

    
1920
        #region システム起動確認データ取得
1921
        /// <summary>
1922
        /// システム起動確認データ取得
1923
        /// </summary>
1924
        public static void GetSystemExecute(ref SystemExecute recordRec)
1925
        {
1926
            IOSystemExecute SysExecDB = new IOSystemExecute();
1927
            try
1928
            {
1929
                // システムのバージョンをチェックする
1930
                // キーを取得する
1931
                int PCode = CommonDefine.ExePrimaryCode.First(x => x.Value.Equals("システムバージョン")).Key;
1932

    
1933
                // バージョン読込
1934
                string strSQL = SysExecDB.CreatePrimarykeyString(PCode);
1935
                if (!SysExecDB.SelectAction(strSQL, ref recordRec))
1936
                {   // レコード無時はエラー
1937
                    logger.ErrorFormat("バージョンチェックデータ読込みエラー:{0}", CommonMotions.GetMethodName());
1938
                    return;
1939
                }
1940
            }
1941
            catch (Exception ex)
1942
            {
1943
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1944
            }
1945
            finally
1946
            {
1947
                SysExecDB.close(); SysExecDB = null;
1948
            }
1949
        }
1950
        #endregion
1951

    
1952
        #region 製品版・確認運用時Trueを返す
1953
        /// <summary>
1954
        /// 製品版・確認運用時Trueを返す
1955
        /// </summary>
1956
        /// <returns></returns>
1957
        public static bool OperationConfirmation()
1958
        {
1959
            try
1960
            {
1961
                bool bRet = false;
1962
                switch (ProductDefine.ProductType)
1963
                {
1964
                    case (int)ProductDefine.ProductTypeDef.Originals:
1965
                    case (int)ProductDefine.ProductTypeDef.ProductsModelType2_1:
1966
                    case (int)ProductDefine.ProductTypeDef.ProductsModelType2_2:
1967
                    case (int)ProductDefine.ProductTypeDef.ProductsModelType3:
1968
                    case (int)ProductDefine.ProductTypeDef.ProductsModelType4:
1969
                    case (int)ProductDefine.ProductTypeDef.ProductsModelType5:
1970
                    case (int)ProductDefine.ProductTypeDef.ProductsModelType6:
1971
                        break;
1972
                    case (int)ProductDefine.ProductTypeDef.ProductsModelType1:
1973
                        // 一人親方バージョンはtrue
1974
                        bRet = true;
1975
                        break;
1976
                    default:
1977
                        break;
1978
                }
1979
                return bRet;
1980
            }
1981
            catch (Exception ex)
1982
            {
1983
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1984
                return false;
1985
            }
1986
        }
1987
        #endregion
1988

    
1989
        #region 実行ファイル名称よりタイトル取得
1990
        /// <summary>
1991
        /// 実行ファイル名称よりタイトル取得
1992
        /// </summary>
1993
        /// <returns></returns>
1994
        public static string GetExecFileName()
1995
        {
1996
            try
1997
            {
1998
                FileVersionInfo CurVersionInfo = CommonMotions.ProductVersionInfo;
1999
                StringBuilder strTitle = new StringBuilder();
2000
                for (int i = 0; i < CurVersionInfo.ProductName.Length; i++)
2001
                {
2002
                    if (i < 1) strTitle.Append(CurVersionInfo.ProductName.Substring(i, 1));
2003
                    else strTitle.AppendFormat(" {0}", CurVersionInfo.ProductName.Substring(i, 1));
2004
                }
2005

    
2006
                return strTitle.ToString();
2007
            }
2008
            catch (Exception ex)
2009
            {
2010
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2011
                return string.Empty;
2012
            }
2013
        }
2014
        #endregion
2015

    
2016
        #region 定義ファイル読込
2017
        /// <summary>
2018
        /// 定義ファイル読込
2019
        /// </summary>
2020
        private static void DefinitionFileInit()
2021
        {
2022
            try
2023
            {
2024
                //定義ファイル読込
2025
                System.IO.FileStream fs = new System.IO.FileStream(CommonDefine.s_DefinitionFileName, System.IO.FileMode.Open);
2026
                System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(DefinitionFileRead));
2027
                m_dfr_model = (DefinitionFileRead)serializer.Deserialize(fs);
2028
            }
2029
            catch (Exception ex)
2030
            {
2031
                logger.ErrorFormat("定義ファイル読込エラー:{0}:{1}", GetMethodName(), ex.Message);
2032
            }
2033
        }
2034

    
2035
        #endregion
2036

    
2037
        #region 管理マスタ取得
2038
        /// <summary>
2039
        /// 管理マスタ取得
2040
        /// </summary>
2041
        public static bool SetSystemMaster()
2042
        {
2043
            // 管理マスタクラス
2044
            IOMSystem ocDB = new IOMSystem();
2045
            try
2046
            {
2047
                // 管理マスタ取得
2048
                // 1レコードだけなので取り出す
2049
                StringBuilder strSQL = new StringBuilder();
2050
                strSQL.Append(" Where SystemCode = 1");
2051
                if (!ocDB.SelectAction(strSQL.ToString(), ref m_systemMaster)) return false;
2052

    
2053
                return true;
2054
            }
2055
            catch (Exception ex)
2056
            {
2057
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2058
                return false;
2059
            }
2060
            finally
2061
            {
2062
                ocDB.close(); ocDB = null;
2063
            }
2064
        }
2065
        #endregion
2066

    
2067
        #region 消費税データ取得
2068
        /// <summary>
2069
        /// 消費税データ取得
2070
        /// </summary>
2071
        public static bool SetconsumptionTax()
2072
        {
2073
            // 消費税データクラス
2074
            IOMConsumptionTax TaxDB = new IOMConsumptionTax();
2075
            try
2076
            {
2077
                // 消費税データ取得
2078
                StringBuilder strSQL = new StringBuilder();
2079
                m_ConsumptionTax.Clear();
2080
                strSQL.Append(" Order By StartDate");
2081
                if (!TaxDB.SelectAction(strSQL.ToString(), ref m_ConsumptionTax)) return false;
2082

    
2083
                return true;
2084
            }
2085
            catch (Exception ex)
2086
            {
2087
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2088
                return false;
2089
            }
2090
            finally
2091
            {
2092
                TaxDB.close(); TaxDB = null;
2093
            }
2094
        }
2095
        #endregion
2096

    
2097
        #region メソッド名を取得する
2098
        /// <summary>
2099
        /// メソッド名を取得する
2100
        /// </summary>
2101
        /// <param name="StackCnt"></param>
2102
        /// <returns></returns>
2103
        public static string GetMethodName(int stackCnt = 1)
2104
        {
2105
            try
2106
            {
2107
                StringBuilder sb = new StringBuilder();
2108

    
2109
                // 一つ前のスタック情報
2110
                StackFrame stackFrame = new StackFrame(stackCnt);
2111

    
2112
                // 呼び出し元メソッドの情報出力
2113
                System.Reflection.MethodBase method = stackFrame.GetMethod();
2114

    
2115
                // Method取得失敗は戻る
2116
                if (method == null) return string.Empty;
2117

    
2118
                // 正しく取得できているかの判定
2119
                if (method.DeclaringType != null && !string.IsNullOrEmpty(method.DeclaringType.Name))
2120
                {
2121
                    // 型名
2122
                    sb.AppendFormat("[TYPE]{0}", method.DeclaringType.Name);
2123
                }
2124

    
2125
                if (!string.IsNullOrEmpty(method.Name))
2126
                {
2127
                    // 編集済みの場合は区切りを入れる
2128
                    if (0 < sb.Length) sb.Append('/');
2129

    
2130
                    // メソッド名
2131
                    sb.AppendFormat("[METHOD]{0}", method.Name);
2132
                }
2133
                return sb.ToString();
2134
            }
2135
            catch (Exception ex)
2136
            {
2137
                logger.ErrorFormat(ex.Message);
2138
            }
2139
            return string.Empty;
2140
        }
2141
        #endregion
2142

    
2143
        #region 期数から期の年を取得する
2144
        /// <summary>
2145
        /// 期数から期の年を取得する
2146
        /// </summary>
2147
        /// <param name="PeriodCount"></param>
2148
        /// <returns></returns>
2149
        public static int PeriodCountToYear(int PeriodCount)
2150
        {
2151
            IOMBizPeriodHistory BizHisDB = new IOMBizPeriodHistory();
2152
            try
2153
            {
2154
                // 今の年を取得する
2155
                int iYear = DateTime.Now.Year;
2156

    
2157
                StringBuilder strSQL = new StringBuilder();
2158
                BizPeriodHistory BizHisRec = new BizPeriodHistory();
2159

    
2160
                // 営業期
2161
                strSQL.Append(BizHisDB.CreatePrimarykeyString(PeriodCount, (int)BizPeriodHistory.PeriodFlagDef.BizPeriod));
2162

    
2163
                // 運営期履歴情報読込
2164
                if (!BizHisDB.SelectAction(strSQL.ToString(), ref BizHisRec)) return iYear;
2165

    
2166
                iYear = BizHisRec.BeginDate.Year;
2167

    
2168
                return iYear;
2169
            }
2170
            catch (Exception ex)
2171
            {
2172
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2173
                return 0;
2174
            }
2175
            finally
2176
            {
2177
                BizHisDB.close(); BizHisDB = null;
2178
            }
2179
        }
2180
        #endregion
2181

    
2182
        #region システム設定が営業期数の時にtrueを返す
2183
        /// <summary>
2184
        /// システム設定が営業期数の時にtrueを返す
2185
        /// </summary>
2186
        /// <returns></returns>
2187
        public static bool BasePeriodYear()
2188
        {
2189
            bool bret = false;
2190
            try
2191
            {
2192
                switch (CommonMotions.SystemMasterData.ConstructionNoBase)
2193
                {
2194
                    case (int)SystemMaster.ConstrNoBaseDef.BusinessPeriod:
2195
                        bret = true;
2196
                        break;
2197
                    default:
2198
                        bret = false;
2199
                        break;
2200
                }
2201

    
2202
                return bret;
2203
            }
2204
            catch (Exception ex)
2205
            {
2206
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2207
                return bret;
2208
            }
2209
        }
2210
        #endregion
2211

    
2212
        #region 年度選択ラベル初期セット
2213
        /// <summary>
2214
        /// 年度選択ラベル初期セット
2215
        /// </summary>
2216
        /// <param name="control"></param>
2217
        public static void SetSerchTitle(Label lbl1, Label lbl2, NumericUpDown updown, Label lbl3)
2218
        {
2219
            try
2220
            {
2221
                int nlabelX = lbl1.Location.X;
2222
                int nCtrlDef = updown.Location.X - lbl2.Location.X;
2223

    
2224
                // タイトル文字セット
2225
                lbl1.Text = GetYearTitle();
2226
                lbl3.Text = GetYearTitle(false);
2227

    
2228
                // タイトル表示制御
2229
                if (BasePeriodYear())
2230
                {
2231
                    lbl2.Visible = true;
2232
                }
2233
                else
2234
                {
2235
                    lbl2.Visible = false;
2236

    
2237
                    Point po = updown.Location;
2238
                    po.X -= nCtrlDef;
2239
                    updown.Location = po;
2240

    
2241
                    Point po2 = lbl3.Location;
2242
                    po2.X -= nCtrlDef;
2243
                    lbl3.Location = po2;
2244
                }
2245
            }
2246
            catch (Exception ex)
2247
            {
2248
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2249
            }
2250
        }
2251
        #endregion
2252

    
2253
        #region 管理マスタの指定により年度名称を返す
2254
        /// <summary>
2255
        /// 管理マスタの指定により年度名称を返す
2256
        /// </summary>
2257
        /// <returns></returns>
2258
        public static string GetYearTitle(bool bTitle = true)
2259
        {
2260
            string strTitle = string.Empty;
2261
            try
2262
            {
2263
                if (bTitle)
2264
                {
2265
                    if (BasePeriodYear())
2266
                    {
2267
                        strTitle = "営業期数";
2268
                    }
2269
                    else
2270
                    {
2271
                        strTitle = "工事年度";
2272
                    }
2273
                }
2274
                else
2275
                {
2276
                    if (BasePeriodYear())
2277
                    {
2278
                        strTitle = "期";
2279
                    }
2280
                    else
2281
                    {
2282
                        strTitle = "年度";
2283
                    }
2284
                }
2285

    
2286
                return strTitle;
2287
            }
2288
            catch (Exception ex)
2289
            {
2290
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2291
                return strTitle;
2292
            }
2293
        }
2294
        #endregion
2295

    
2296
        #region 工事情報より期の最大・最少を取得する
2297
        /// <summary>
2298
        /// 工事情報より期の最大・最少を取得する
2299
        /// </summary>
2300
        /// <param name="StartDate"></param>
2301
        /// <returns></returns>
2302
        public static void GetPeriodYearMinMax(ref int min, ref int max)
2303
        {
2304
            IOConstructionBaseInfo cbiDB = new IOConstructionBaseInfo();
2305
            try
2306
            {
2307
                StringBuilder strSQL = new StringBuilder();
2308
                bool bPeriod = CommonMotions.BasePeriodYear();
2309
                if (bPeriod)
2310
                {   // ----- 営業期ベースの時
2311
                    strSQL.Append("SELECT MIN(CONSTRUCTIONPERIOD), MAX(CONSTRUCTIONPERIOD) FROM CONSTRUCTIONBASEINFO");
2312
                }
2313
                else
2314
                {   // ----- 工事年度ベースの時
2315
                    strSQL.Append("SELECT MIN(ConstructionYear), MAX(ConstructionYear) FROM CONSTRUCTIONBASEINFO");
2316
                }
2317

    
2318
                ArrayList arList = new ArrayList();
2319
                if (!cbiDB.ExecuteReader(strSQL.ToString(), ref arList)) return;
2320

    
2321
                object[] wrkobj = (object[])arList[0];
2322
                min = cnvInt(wrkobj[0]);
2323
                max = cnvInt(wrkobj[1]);
2324
                if (bPeriod)
2325
                {   // ----- 営業期ベースの時
2326
                    if (min < 1)
2327
                    {
2328
                        min = 1;
2329
                        max = 1;
2330
                    }
2331
                }
2332
                else
2333
                {   // ----- 工事年度ベースの時
2334
                    if (min < 1)
2335
                    {
2336
                        min = CommonMotions.SystemMasterData.ConstrBeginDate.Year;
2337
                        max = CommonMotions.SystemMasterData.ConstrCompDate.Year;
2338
                    }
2339
                }
2340
            }
2341
            catch (Exception ex)
2342
            {
2343
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2344
            }
2345
            finally
2346
            {
2347
                cbiDB.close(); cbiDB = null;
2348
            }
2349
        }
2350
        #endregion
2351

    
2352
        #region 管理マスタの現在年を取得する
2353
        /// <summary>
2354
        /// 管理マスタの現在年を取得する
2355
        /// </summary>
2356
        /// <returns></returns>
2357
        public static int GetPeriodYear()
2358
        {
2359
            try
2360
            {
2361
                int nYearVal = DateTime.Now.Year;
2362

    
2363
                if (CommonMotions.BasePeriodYear())
2364
                {
2365
                    // ----- 営業期ベースの時
2366
                    nYearVal = CommonMotions.SystemMasterData.BusinessPeriod;
2367
                }
2368
                else
2369
                {
2370
                    // ----- 工事年度ベースの時
2371
                    nYearVal = CommonMotions.SystemMasterData.ConstrYear;
2372
                }
2373

    
2374
                return nYearVal;
2375
            }
2376
            catch (System.Exception ex)
2377
            {
2378
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2379
                return 0;
2380
            }
2381
        }
2382
        #endregion
2383

    
2384
        #region 対象日より営業期・工事年度を取得する
2385
        /// <summary>
2386
        /// 対象日より営業期・工事年度を取得する
2387
        /// </summary>
2388
        /// <param name="NowDay"></param>
2389
        /// <returns></returns>
2390
        public static int ConvDate2YearOrPeriod(DateTime NowDay)
2391
        {
2392
            IOMBizPeriodHistory BizHisDB = new IOMBizPeriodHistory();
2393
            try
2394
            {
2395
                int nRetVal = 0;
2396

    
2397
                // 範囲に入るデータを取得する
2398
                StringBuilder strSQL = new StringBuilder();
2399

    
2400
                strSQL.AppendFormat(" WHERE (DATE(BeginDate) <= DATE('{0}'))", NowDay.ToShortDateString());
2401
                strSQL.AppendFormat(" AND (DATE('{0}') <= DATE(CompleteDate))", NowDay.ToShortDateString());
2402

    
2403
                int nFlag = (int)BizPeriodHistory.PeriodFlagDef.BizPeriod;
2404
                if (CommonMotions.BasePeriodYear())
2405
                {
2406
                    // 期を選択している場合
2407
                    nFlag = (int)BizPeriodHistory.PeriodFlagDef.BizPeriod;
2408
                }
2409
                else
2410
                {
2411
                    // 年を選択している場合
2412
                    nFlag = (int)BizPeriodHistory.PeriodFlagDef.ConstrYear;
2413
                }
2414
                strSQL.AppendFormat(" And PeriodFlag = {0}", nFlag);
2415
                strSQL.Append(" Order By PeriodFlag Asc, PeriodYear Asc");
2416

    
2417
                List<BizPeriodHistory> BizList = new List<BizPeriodHistory>();
2418
                if (!BizHisDB.SelectAction(strSQL.ToString(), ref BizList)) return 0;
2419

    
2420
                nRetVal = BizList[0].PeriodYear;
2421

    
2422
                return nRetVal;
2423
            }
2424
            catch (Exception ex)
2425
            {
2426
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2427
                return 0;
2428
            }
2429
            finally
2430
            {
2431
                BizHisDB.close(); BizHisDB = null;
2432
            }
2433
        }
2434
        #endregion
2435

    
2436
        #region ポイントに規定値を加算して戻す
2437
        /// <summary>
2438
        /// ポイントに規定値を加算して戻す
2439
        /// </summary>
2440
        /// <param name="PosPoint"></param>
2441
        public static Point SetFormPosion(Point PosPoint)
2442
        {
2443
            Point po = PosPoint;
2444
            try
2445
            {
2446
                po.X += CommonDefine.s_DefalutShiftValue;
2447
                po.Y += CommonDefine.s_DefalutShiftValue;
2448

    
2449
                return po;
2450
            }
2451
            catch (Exception ex)
2452
            {
2453
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
2454
                return po;
2455
            }
2456
        }
2457
        #endregion
2458

    
2459
        #region フィールドバックカラー変更処理
2460
        /// <summary>
2461
        /// フィールドバックカラー変更処理(あまりカッコ良くない^^;)
2462
        /// </summary>
2463
        /// <param name="objCtrl"></param>
2464
        /// <param name="chgColor"></param>
2465
        public static void chgBackColor(object objCtrl, bool bPara, bool bWarning = false)
2466
        {
2467
            try
2468
            {
2469
                // エラー色・ワーニング色
2470
                Color ErrorColor = CommonDefine.s_clrError;
2471
                if (bWarning) ErrorColor = CommonDefine.s_clrWarning;
2472

    
2473
                if (objCtrl.GetType().Equals(typeof(TextBox))
2474
                    || objCtrl.GetType().Equals(typeof(TextBoxEX)))
2475
                {
2476
                    TextBox wrk = (TextBox)objCtrl;
2477
                    if (bPara)
2478
                    {
2479
                        wrk.BackColor = CommonDefine.s_clrNormal;
2480
                    }
2481
                    else
2482
                    {
2483
                        wrk.BackColor = ErrorColor;
2484
                        wrk.Focus();
2485
                    }
2486
                }
2487
                else if (objCtrl.GetType().Equals(typeof(DataGridViewTextBoxCell)))
2488
                {
2489
                    DataGridViewTextBoxCell wrk = (DataGridViewTextBoxCell)objCtrl;
2490
                    if (bPara)
2491
                    {
2492
                        wrk.Style.BackColor = CommonDefine.s_clrNormal;
2493
                    }
2494
                    else
2495
                    {
2496
                        wrk.Style.BackColor = ErrorColor;
2497
                        wrk.Selected = true;
2498
                    }
2499
                }
2500
                else if (objCtrl.GetType().Equals(typeof(ComboBoxEX))
2501
                        || objCtrl.GetType().Equals(typeof(ComboBox)))
2502
                {
2503
                    ComboBox wrk = (ComboBox)objCtrl;
2504
                    if (bPara)
2505
                    {
2506
                        wrk.BackColor = CommonDefine.s_clrNormal;
2507
                    }
2508
                    else
2509
                    {
2510
                        wrk.BackColor = ErrorColor;
2511
                        wrk.Focus();
2512
                    }
2513
                }
2514
                else if (objCtrl.GetType().Equals(typeof(ListBox)))
2515
                {
2516
                    ListBox wrk = (ListBox)objCtrl;
2517
                    if (bPara)
2518
                    {
2519
                        wrk.BackColor = CommonDefine.s_clrNormal;
2520
                    }
2521
                    else
2522
                    {
2523
                        wrk.BackColor = ErrorColor;
2524
                        wrk.Focus();
2525
                    }
2526
                }
2527
                else if (objCtrl.GetType().Equals(typeof(Label)))
2528
                {
2529
                    Label wrk = (Label)objCtrl;
2530
                    if (bPara)
2531
                    {
2532
                        wrk.BackColor = CommonDefine.s_clrNormal;
2533
                    }
2534
                    else
2535
                    {
2536
                        wrk.BackColor = ErrorColor;
2537
                    }
2538
                }
2539
                else if (objCtrl.GetType().Equals(typeof(NumericUpDown)))
2540
                {
2541
                    NumericUpDown wrk = (NumericUpDown)objCtrl;
2542
                    if (bPara)
2543
                    {
2544
                        wrk.BackColor = CommonDefine.s_clrNormal;
2545
                    }
2546
                    else
2547
                    {
2548
                        wrk.BackColor = ErrorColor;
2549
                    }
2550
                }
2551
                else if (objCtrl.GetType().Equals(typeof(DateTimePicker)))
2552
                {
2553
                    DateTimePicker wrk = (DateTimePicker)objCtrl;
2554
                    if (bPara)
2555
                    {
2556
                        wrk.BackColor = CommonDefine.s_clrNormal;
2557
                    }
2558
                    else
2559
                    {
2560
                        wrk.BackColor = ErrorColor;
2561
                    }
2562
                }
2563
            }
2564
            catch (Exception ex)
2565
            {
2566
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
2567
            }
2568
        }
2569
        #endregion
2570

    
2571
        #region 営業期数より工事年を取得する
2572
        /// <summary>
2573
        /// 営業期数より工事年を取得する
2574
        /// </summary>
2575
        /// <param name="Period"></param>
2576
        /// <returns></returns>
2577
        public static int BusinessPeriodToConstructionYears(int Period)
2578
        {
2579
            try
2580
            {
2581
                int Beginning = 0;
2582
                int diffwork = 0;
2583
                int RetYears = 0;
2584
                string strwork = string.Empty;
2585

    
2586
                // 現在期との差分を求める
2587
                diffwork = Period - CommonMotions.SystemMasterData.BusinessPeriod;
2588

    
2589
                // 期首月を取得する
2590
                Beginning = CommonMotions.SystemMasterData.BusinessBeginDate.Month;
2591

    
2592
                // 年数を求める
2593
                DateTime dateWork = DateTime.Now;
2594
                int nowMounth = DateTime.Now.Month;
2595
                // 期首月を境に年度を計算する
2596
                int iYear = 0;
2597
                if (nowMounth < Beginning)
2598
                    iYear = dateWork.AddYears(-1).Year;
2599
                else
2600
                    iYear = dateWork.Year;
2601

    
2602
                // ベース年を求める
2603
                RetYears = iYear + diffwork;
2604

    
2605
                return RetYears;
2606
            }
2607
            catch (Exception ex)
2608
            {
2609
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2610
                return 0;
2611
            }
2612
        }
2613
        #endregion
2614

    
2615
        #region 発注者名を法人格を含んだ形で連結する
2616
        /// <summary>
2617
        /// 発注者名を法人格を含んだ形で連結する
2618
        /// </summary>
2619
        /// <param name="master"></param>
2620
        /// <returns></returns>
2621
        public static string OrderersNameUnion(OrderersMaster master)
2622
        {
2623
            try
2624
            {
2625
                string strRet = string.Empty;
2626

    
2627
                if (master.CorporateStatusPoint == (int)SubContractorMaster.StatusNamePointDef.Forword)
2628
                    strRet = master.CorporateStatusName + " " + master.OrderersName1 + " " + master.OrderersName2;
2629
                else if (master.CorporateStatusPoint == (int)SubContractorMaster.StatusNamePointDef.Back)
2630
                    strRet = master.OrderersName1 + " " + master.CorporateStatusName + " " + master.OrderersName2;
2631
                else
2632
                    strRet = master.OrderersName1 + " " + master.OrderersName2;
2633

    
2634
                return strRet;
2635
            }
2636
            catch (Exception ex)
2637
            {
2638
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2639
                return string.Empty;
2640
            }
2641
        }
2642
        #endregion
2643

    
2644
        #region メッセージ送信メソッド(テキストボックス背景文字表示用)
2645
        /// <summary>
2646
        /// メッセージ送信メソッド
2647
        /// </summary>
2648
        /// <param name="hWnd"></param>
2649
        /// <param name="Msg"></param>
2650
        /// <param name="wParam"></param>
2651
        /// <param name="lParam"></param>
2652
        /// <returns></returns>
2653
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
2654
        public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);
2655
        #endregion
2656

    
2657
        #region ファイルの時間を取得する
2658
        /// <summary>
2659
        /// ファイルの時間を取得する
2660
        /// </summary>
2661
        /// <param name="FilePath">ファイルパス</param>
2662
        /// <param name="flg">取得日付フラグ</param>
2663
        /// <returns></returns>
2664
        public static DateTime GetFileTimeStamp(string FilePath, char flg)
2665
        {
2666
            try
2667
            {
2668
                DateTime dtDateTime = DateTime.MinValue;
2669

    
2670
                if (flg == 'C')
2671
                {
2672
                    // 作成日時を取得する
2673
                    dtDateTime = File.GetCreationTime(@FilePath);
2674
                }
2675
                else if (flg == 'U')
2676
                {
2677
                    // 更新日時を取得する
2678
                    dtDateTime = File.GetLastWriteTime(@FilePath);
2679
                }
2680
                else if (flg == 'A')
2681
                {
2682
                    // アクセス日時を取得する
2683
                    dtDateTime = File.GetLastAccessTime(@FilePath);
2684
                }
2685

    
2686
                return dtDateTime;
2687
            }
2688
            catch (Exception ex)
2689
            {
2690
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2691
                return DateTime.Now;
2692
            }
2693
        }
2694
        #endregion
2695

    
2696
        #region ファイルパスよりmd5のハッシュ値を返す
2697
        /// <summary>
2698
        /// ファイルパスよりmd5のハッシュ値を返す
2699
        /// </summary>
2700
        /// <param name="FilePath"></param>
2701
        /// <returns></returns>
2702
        public static string GetFileHashData(string FilePath)
2703
        {
2704
            try
2705
            {
2706
                //ファイルを開く
2707
                FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
2708

    
2709
                //MD5CryptoServiceProviderオブジェクトを作成
2710
                MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
2711

    
2712
                //ハッシュ値を計算する
2713
                byte[] bs = md5.ComputeHash(fs);
2714

    
2715
                //リソースを解放する
2716
                md5.Clear();
2717
                //ファイルを閉じる
2718
                fs.Close();
2719

    
2720
                return BitConverter.ToString(bs).ToLower().Replace("-", "");
2721

    
2722
            }
2723
            catch (Exception ex)
2724
            {
2725
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2726
                return string.Empty;
2727
            }
2728
        }
2729
        #endregion
2730

    
2731
        #region 郵便番号より住所を検索する
2732
        /// <summary>
2733
        /// 郵便番号より住所を検索する
2734
        /// </summary>
2735
        /// <param name="ZipCode">郵便番号</param>
2736
        public static void SearchZipCode2Address(string ZipCode, ref string Address1, ref string Address2)
2737
        {
2738
            Address1 = "";                //住所
2739
            Address2 = "";                //住所
2740

    
2741
            //処理時間を計測
2742
            Stopwatch sw = new Stopwatch();
2743
            //処理時間計測開始
2744
            sw.Start();
2745

    
2746
            // 郵便番号セット
2747
            string sKey = ZipCode;
2748

    
2749
            //文字列の前後のスペースをとる
2750
            sKey = sKey.Trim(' ');
2751
            //Microsoft.VisualBasic名前空間のStrConv関数を使って、全角文字を半角文字に変換
2752
            sKey = Strings.StrConv(sKey, VbStrConv.Narrow, 0);
2753

    
2754
            // 文字列の長さを取得する
2755
            int iLength = sKey.Length;
2756
            // '-'がある場合は先頭文字目の後から '-' を検索し、見つかった位置を取得する
2757
            int iFind = 0;
2758
            if ((iFind = sKey.IndexOf('-', 0)) != 0)
2759
            {
2760
                //左から3文字+"-"文字以降をtmpZip変数に代入
2761
                sKey = sKey.Substring(0, 3) + sKey.Substring(iFind + 1);
2762
            }
2763
            try
2764
            {
2765
                //StreamReaderオブジェクトの作成
2766
                StreamReader sr = new StreamReader(@CommonDefine.s_AddressFilePath, Encoding.Default);
2767

    
2768
                //1行ずつ読み込み
2769
                string dat = "";
2770
                while ((dat = sr.ReadLine()) != null)
2771
                {
2772
                    string tmpZip = "";
2773

    
2774
                    //カンマで区切られた文字列を取得
2775
                    string[] sbuf = dat.Split(',');
2776
                    //配列の3番目が郵便番号
2777
                    tmpZip = sbuf[2].Trim('"');
2778

    
2779
                    //入力された郵便番号と比較
2780
                    if (sKey == tmpZip)
2781
                    {
2782
                        //住所を作成
2783
                        //都道府県名+市区町村名+町域名
2784
                        Address1 = sbuf[6].Trim('"') + sbuf[7].Trim('"');
2785
                        Address2 = sbuf[8].Trim('"');
2786

    
2787
                        sw.Stop();  //処理時間計測終了
2788

    
2789
                        // 処理時間をTimeSpan構造体で書式付き表示
2790
                        TimeSpan ts = sw.Elapsed;
2791
                        // 出力例:00:00:00.9984668
2792
                        logger.DebugFormat("処理時間:{0}", ts.ToString());
2793

    
2794
                        break;          //ループを抜ける
2795
                    }
2796
                    Application.DoEvents();
2797
                }
2798
                //ファイルを閉じる
2799
                sr.Close();
2800
            }
2801
            catch (Exception ex)
2802
            {
2803
                //ファイルエラーが発生した場合
2804
                MessageBox.Show(ex.Message, "ファイルエラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
2805
                //処理を抜ける
2806
                return;
2807
            }
2808
        }
2809
        #endregion
2810

    
2811
        #region 文字列より指定文字から後ろを省いて戻す
2812
        /// <summary>
2813
        /// 文字列より指定文字から後ろを省いて戻す
2814
        /// </summary>
2815
        /// <param name="Mijiretu"></param>
2816
        /// <param name="Delimiter"></param>
2817
        /// <returns></returns>
2818
        public static string ComentSucstring(string Mijiretu, string Delimiter)
2819
        {
2820
            string strRet = Mijiretu;
2821
            try
2822
            {
2823

    
2824
                if (Mijiretu.IndexOf(Delimiter) < 0) return strRet;
2825
                int TargetCnt = Mijiretu.IndexOf(Delimiter) - 1;
2826

    
2827
                if (TargetCnt > 0)
2828
                    strRet = Mijiretu.Substring(0, TargetCnt);
2829

    
2830
                return strRet;
2831
            }
2832
            catch (Exception ex)
2833
            {
2834
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2835
                return string.Empty;
2836
            }
2837
        }
2838
        #endregion
2839

    
2840
        #region 今の時間をセパレータを除いた文字列で戻す
2841
        /// <summary>
2842
        /// 今の時間をセパレータを除いた文字列で戻す
2843
        /// </summary>
2844
        /// <returns></returns>
2845
        public static string stringNowJikan()
2846
        {
2847
            string[] wrk = DateTime.Now.ToShortDateString().Split('/');
2848

    
2849
            string[] wrk2 = DateTime.Now.ToShortTimeString().Split(':');
2850

    
2851
            return string.Format("{0}{1}{2}{3}{4}{5}"
2852
                                            , wrk[0], wrk[1], wrk[2]
2853
                                            , wrk2[0], wrk2[1], wrk2[2]);
2854
        }
2855
        #endregion
2856

    
2857
        #region 経過日数を工数で返す
2858
        /// <summary>
2859
        /// 経過日数を工数で返す
2860
        /// </summary>
2861
        /// <param name="StartDate"></param>
2862
        /// <param name="CompDate"></param>
2863
        /// <returns></returns>
2864
        public static double DiffMounthTimes(DateTime StartDate, DateTime CompDate)
2865
        {
2866
            // 差分計算
2867
            TimeSpan DiffDate = CompDate - StartDate;
2868

    
2869
            // 当日までなので+1日する
2870
            TimeSpan wrkts = new TimeSpan(1, 0, 0, 0);
2871
            DiffDate = DiffDate + wrkts;
2872

    
2873
            // 工数の最小単位で割って10分の1にする
2874
            //return (((double)DiffDate.Days) / CommonDefine.s_ManHourUnitDays) / 10;
2875
            // 日数から月数へ変換する
2876
            return ClsCalendar.cnvMonthFromDays(DiffDate.Days);
2877
        }
2878
        #endregion
2879

    
2880
        #region 文字列を指定文字で指定レングス分埋める
2881
        /// <summary>
2882
        /// 文字列を指定文字で指定レングス分埋める
2883
        /// </summary>
2884
        /// <param name="OrgString"></param>
2885
        /// <param name="SetLength"></param>
2886
        /// <param name="Before"></param>
2887
        /// <returns></returns>
2888
        public static string SetBlankString(string OrgString, string SetString, int SetLength, bool Before)
2889
        {
2890
            try
2891
            {
2892
                string strRet = string.Empty;
2893
                int stringLength = OrgString.Length;
2894

    
2895
                // 文字列を埋める
2896
                for (int i = 0; i < (SetLength - stringLength); i++) strRet += SetString;
2897

    
2898
                // 前か後か
2899
                if (Before)
2900
                {
2901
                    strRet = strRet + OrgString;
2902
                }
2903
                else
2904
                {
2905
                    strRet = OrgString + strRet;
2906
                }
2907

    
2908
                return strRet;
2909
            }
2910
            catch (Exception ex)
2911
            {
2912
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2913
                return string.Empty;
2914
            }
2915
        }
2916
        #endregion
2917

    
2918
        #region 現在年を西暦で求める
2919
        /// <summary>
2920
        /// 現在年を西暦で求める
2921
        /// </summary>
2922
        public static int GetBaseCounstructionYear(int years)
2923
        {
2924
            try
2925
            {
2926
                int Beginning = 0;
2927
                int diffwork = 0;
2928
                string strwork = string.Empty;
2929
                if (CommonMotions.BasePeriodYear())
2930
                {   // ----- 営業期ベースの時
2931

    
2932
                    // 現在期との差分を求める
2933
                    diffwork = years - SystemMasterData.BusinessPeriod;
2934

    
2935
                    // 期首月を取得する
2936
                    Beginning = SystemMasterData.BusinessBeginDate.Month;
2937
                }
2938
                else
2939
                {   // ----- 営業年度ベースの時
2940

    
2941
                    // 現在期との差分を求める
2942
                    diffwork = years - SystemMasterData.ConstrYear;
2943

    
2944
                    // 期首月を取得する
2945
                    Beginning = SystemMasterData.ConstrBeginDate.Month;
2946
                }
2947

    
2948
                // 年数を求める
2949
                DateTime dateWork = DateTime.Now;
2950
                int nowMounth = DateTime.Now.Month;
2951
                // 期首月を境に年度を計算する
2952
                int iYear = 0;
2953
                if (nowMounth < Beginning)
2954
                    iYear = dateWork.AddYears(-1).Year;
2955
                else
2956
                    iYear = dateWork.Year;
2957

    
2958
                // ベース年を求める
2959
                return (iYear + diffwork);
2960
            }
2961
            catch (System.Exception ex)
2962
            {
2963
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
2964
                return 0;
2965
            }
2966
        }
2967
        #endregion
2968

    
2969
        #region 指定期・指定年度の期首日・期末日を取得する
2970
        /// <summary>
2971
        /// 指定期・指定年度の期首日・期末日を取得する
2972
        /// </summary>
2973
        /// <param name="nYear"></param>
2974
        /// <param name="bBeginDay"></param>
2975
        /// <param name="bPeriod"></param>
2976
        /// <returns></returns>
2977
        public static DateTime GetOpeningEndDate(int nYear, bool bBeginDay = true)
2978
        {
2979
            IOMBizPeriodHistory BizHisDB = new IOMBizPeriodHistory();
2980
            try
2981
            {
2982
                DateTime dtRet = DateTime.Now.Date;
2983

    
2984
                StringBuilder strSQL = new StringBuilder();
2985
                BizPeriodHistory BizHisRec = new BizPeriodHistory();
2986

    
2987
                int nFlg = (int)BizPeriodHistory.PeriodFlagDef.BizPeriod;
2988
                if (BasePeriodYear())
2989
                {   // 営業期
2990
                    nFlg = (int)BizPeriodHistory.PeriodFlagDef.BizPeriod;
2991
                }
2992
                else
2993
                {   // 工事年度
2994
                    nFlg = (int)BizPeriodHistory.PeriodFlagDef.ConstrYear;
2995
                }
2996
                strSQL.Append(BizHisDB.CreatePrimarykeyString(nYear, nFlg));
2997

    
2998
                // 運営期履歴情報読込
2999
                if (!BizHisDB.SelectAction(strSQL.ToString(), ref BizHisRec)) return dtRet;
3000

    
3001
                if (bBeginDay)
3002
                {
3003
                    // 期首取得時
3004
                    dtRet = BizHisRec.BeginDate;
3005
                }
3006
                else
3007
                {
3008
                    // 期末取得時
3009
                    dtRet = BizHisRec.CompleteDate;
3010
                }
3011

    
3012
                return dtRet;
3013
            }
3014
            catch (System.Exception ex)
3015
            {
3016
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3017
                return DateTime.Today;
3018
            }
3019
            finally
3020
            {
3021
                BizHisDB.close(); BizHisDB = null;
3022
            }
3023
        }
3024
        #endregion
3025

    
3026
        #region 工事種別より工事詳細台帳が作成OKかどうかをチェックする
3027
        /// <summary>
3028
        /// 工事種別より工事詳細台帳が作成OKかどうかをチェックする
3029
        /// </summary>
3030
        /// <param name="ConstructionType"></param>
3031
        /// <returns></returns>
3032
        public static bool CheckCreateLedgerData(int ConstructionStatusFlg, int ConstructionType)
3033
        {
3034
            try
3035
            {
3036
                bool ExcuteFlg = false;
3037
                int[] Status = new int[] { CommonDefine.ProjectsStatus.First(x => x.Value.Equals("一般補修工事")).Key,
3038
                                            CommonDefine.ProjectsStatus.First(x => x.Value.Equals("空家補修工事")).Key,
3039
                                            CommonDefine.ProjectsStatus.First(x => x.Value.Equals("Hit'sV工事")).Key,
3040
                                            };
3041
                for (int i = 0; i < Status.Length; i++)
3042
                {
3043
                    if (ConstructionStatusFlg == Status[i])
3044
                    {
3045
                        ExcuteFlg = true;
3046
                        break;
3047
                    }
3048
                }
3049
                return ExcuteFlg;
3050
            }
3051
            catch (Exception ex)
3052
            {
3053
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3054
                return false;
3055
            }
3056
        }
3057
        #endregion
3058

    
3059
        #region 予算書・台帳給与金額計算処理
3060
        /// <summary>
3061
        /// 予算書・台帳給与金額計算処理
3062
        /// </summary>
3063
        public static void CalcPayValueData(double MonthryCost, double OrdersPrice, int workingCount,
3064
                                            ref double ExecutionAmount, ref double AmountConfigRate,
3065
                                            bool bSalaryCorrection = true)
3066
        {
3067
            try
3068
            {
3069
                // 受注金額が0の場合は1として計算する
3070
                if (OrdersPrice == 0) OrdersPrice = 1;
3071

    
3072
                // 日当計算
3073
                double DairySalary = 0;
3074
                if (bSalaryCorrection)
3075
                {
3076
                    DairySalary = (MonthryCost * CommonDefine.s_SalaryCorrection) / CommonDefine.s_ManHourUnitMonth;
3077
                }
3078
                else
3079
                {
3080
                    DairySalary = MonthryCost / CommonDefine.s_ManHourUnitMonth;
3081

    
3082
                }
3083

    
3084
                // 給与支払総額
3085
                int iInput = CommonMotions.cnvRound(DairySalary * workingCount);
3086

    
3087
                // 実行金額に給与支払総額をセットする
3088
                ExecutionAmount = iInput;
3089

    
3090
                // 金額構成率計算
3091
                AmountConfigRate = (iInput / OrdersPrice) * 100.0;
3092

    
3093
                // 構成率が範囲外の場合は0にする
3094
                if (AmountConfigRate < -999.00 || 999.00 < AmountConfigRate) AmountConfigRate = 0;
3095
            }
3096
            catch (Exception ex)
3097
            {
3098
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3099
            }
3100
        }
3101
        #endregion
3102

    
3103
        #region 給与取得SQL作成処理
3104
        /// <summary>
3105
        /// 給与取得SQL作成処理
3106
        /// </summary>
3107
        private static string GetSalaryValue(int PersonCode, DateTime GetData)
3108
        {
3109
            try
3110
            {
3111
                // SQL作成
3112
                StringBuilder strSQL = new StringBuilder();
3113
                strSQL.Append("SELECT");
3114
                strSQL.Append(" A.MONTHLYSALARY");
3115
                strSQL.Append(", A.YEARSALARY");
3116
                strSQL.Append(", A.PERSONCODE");
3117
                strSQL.Append(", A.STARTDATE");
3118
                strSQL.Append(" FROM PERSONSALARYMASTER As A");
3119
                strSQL.Append("    , (SELECT");
3120
                strSQL.Append("             BB.PERSONCODE");
3121
                strSQL.Append("           , MAX(BB.STARTDATE) sDate");
3122
                strSQL.Append("       FROM PERSONSALARYMASTER As BB");
3123
                strSQL.AppendFormat(" WHERE BB.PERSONCODE = {0}", PersonCode);
3124
                strSQL.AppendFormat(" AND DATE(BB.StartDate) <= DATE('{0}')", GetData.ToShortDateString());
3125
                strSQL.Append(" GROUP BY BB.PERSONCODE) As B");
3126
                strSQL.Append(" WHERE A.PERSONCODE = B.PERSONCODE");
3127
                strSQL.Append(" AND A.STARTDATE = B.sDate");
3128

    
3129
                return strSQL.ToString();
3130
            }
3131
            catch (Exception ex)
3132
            {
3133
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3134
                return string.Empty;
3135
            }
3136
        }
3137
        #endregion
3138

    
3139
        #region 担当者給与金額取得処理(単独処理)
3140
        /// <summary>
3141
        /// 担当者給与金額取得処理(単独処理)
3142
        /// </summary>
3143
        public static bool GetSalaryValue(int PersonCode, ref double MonthryCost, ref double YearsCost, DateTime GetData)
3144
        {
3145
            IOMPersonInCharge PersonDB = new IOMPersonInCharge();
3146
            try
3147
            {
3148
                // 初期値セット
3149
                MonthryCost = 0;
3150
                YearsCost = 0;
3151

    
3152
                // データ取得
3153
                string strSQL = GetSalaryValue(PersonCode, GetData);
3154
                ArrayList arList = new ArrayList();
3155
                if (!PersonDB.ExecuteReader(strSQL, ref arList)) return false;
3156
                if (arList.Count < 1) return false;
3157
                object[] objGetData = (object[])arList[0];
3158

    
3159
                // 取得値セット
3160
                MonthryCost = CommonMotions.cnvDouble(objGetData[0]);
3161
                YearsCost = CommonMotions.cnvDouble(objGetData[1]);
3162

    
3163
                return true;
3164
            }
3165
            catch (Exception ex)
3166
            {
3167
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3168
                return false;
3169
            }
3170
            finally
3171
            {
3172
                PersonDB.close(); PersonDB = null;
3173
            }
3174
        }
3175
        #endregion
3176

    
3177
        #region 担当者給与金額取得処理(セッションコネクト別)
3178
        /// <summary>
3179
        /// 担当者給与金額取得処理(セッションコネクト別)
3180
        /// </summary>
3181
        public static bool GetSalaryValue(IOMPersonInCharge PersonDB, int PersonCode,
3182
                                            ref double MonthryCost, ref double YearsCost, DateTime GetData)
3183
        {
3184
            try
3185
            {
3186
                // 初期値セット
3187
                MonthryCost = 0;
3188
                YearsCost = 0;
3189

    
3190
                // データ取得
3191
                string strSQL = GetSalaryValue(PersonCode, GetData);
3192
                ArrayList arList = new ArrayList();
3193
                if (!PersonDB.ExecuteReader(strSQL, ref arList, false)) return false;
3194
                object[] objGetData = (object[])arList[0];
3195

    
3196
                // 取得値セット
3197
                MonthryCost = CommonMotions.cnvDouble(objGetData[0]);
3198
                YearsCost = CommonMotions.cnvDouble(objGetData[1]);
3199

    
3200
                return true;
3201
            }
3202
            catch (Exception ex)
3203
            {
3204
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3205
                return false;
3206
            }
3207
        }
3208
        #endregion
3209

    
3210
        #region 与えられたキー値より機密管理区分データを取得する
3211
        /// <summary>
3212
        /// 与えられたキー値より機密管理区分データを取得する
3213
        /// </summary>
3214
        /// <param name="KeyValue"></param>
3215
        /// <returns></returns>
3216
        public static KeyValuePair<int, string> SearchSecurityRankList(int KeyValue)
3217
        {
3218
            KeyValuePair<int, string> RetPairvalue = new KeyValuePair<int, string>(0, string.Empty);
3219
            try
3220
            {
3221
                for (int i = 0; i < CommonDefine.SecurityRankList.Count; i++)
3222
                {
3223
                    if (CommonDefine.SecurityRankList[i].Key == KeyValue)
3224
                    {
3225
                        RetPairvalue = CommonDefine.SecurityRankList[i];
3226
                    }
3227
                }
3228

    
3229
                return RetPairvalue;
3230
            }
3231
            catch (Exception ex)
3232
            {
3233
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3234
                return RetPairvalue;
3235
            }
3236
        }
3237
        #endregion
3238

    
3239
        #region 与えられたキー値より機密区分範囲データを取得する
3240
        /// <summary>
3241
        /// 与えられたキー値より機密区分範囲データを取得する
3242
        /// </summary>
3243
        /// <param name="KeyValue"></param>
3244
        /// <returns></returns>
3245
        public static KeyValuePair<int, string> SearchSecurityRangeList(int KeyValue)
3246
        {
3247
            KeyValuePair<int, string> RetPairvalue = new KeyValuePair<int, string>(0, string.Empty);
3248
            try
3249
            {
3250
                for (int i = 0; i < CommonDefine.SecurityRangeList.Count; i++)
3251
                {
3252
                    if (CommonDefine.SecurityRangeList[i].Key == KeyValue)
3253
                    {
3254
                        RetPairvalue = CommonDefine.SecurityRangeList[i];
3255
                    }
3256
                }
3257

    
3258
                return RetPairvalue;
3259
            }
3260
            catch (Exception ex)
3261
            {
3262
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3263
                return RetPairvalue;
3264
            }
3265
        }
3266
        #endregion
3267

    
3268
        #region 登録完了メッセージ表示
3269
        /// <summary>
3270
        /// 登録完了メッセージ表示
3271
        /// </summary>
3272
        /// <param name="strTitle"></param>
3273
        public static void EntryEndMessage(string strTitle)
3274
        {
3275
            try
3276
            {
3277
                string strMes = string.Format("{0} 登録完了しました。", strTitle);
3278

    
3279
                MessageBox.Show(strMes, "登録完了メッセージ", MessageBoxButtons.OK, MessageBoxIcon.Information);
3280
            }
3281
            catch (Exception ex)
3282
            {
3283
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3284
            }
3285
        }
3286
        public static void EntryEndMessage(string strTitle, string strTitle2)
3287
        {
3288
            try
3289
            {
3290
                string strMes = string.Format("{0} {1}完了しました。", strTitle, strTitle2);
3291
                string strGuidance = string.Format("{0}完了メッセージ", strTitle2);
3292

    
3293
                MessageBox.Show(strMes, strGuidance, MessageBoxButtons.OK, MessageBoxIcon.Information);
3294
            }
3295
            catch (Exception ex)
3296
            {
3297
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3298
            }
3299
        }
3300
        #endregion
3301

    
3302
        #region 削除完了メッセージ表示
3303
        /// <summary>
3304
        /// 削除完了メッセージ表示
3305
        /// </summary>
3306
        /// <param name="strTitle"></param>
3307
        public static void RemoveEndMessage(string strTitle)
3308
        {
3309
            try
3310
            {
3311
                string strMes = string.Format("{0} 削除完了しました。", strTitle);
3312

    
3313
                MessageBox.Show(strMes, "削除完了メッセージ", MessageBoxButtons.OK, MessageBoxIcon.Information);
3314
            }
3315
            catch (Exception ex)
3316
            {
3317
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3318
            }
3319
        }
3320
        #endregion
3321

    
3322
        #region 経過給与を計算する
3323
        /// <summary>
3324
        /// 経過給与を計算する
3325
        /// </summary>
3326
        /// <param name="dtStart"></param>
3327
        /// <param name="PersonCode"></param>
3328
        /// <returns></returns>
3329
        public static int CalcElapsedSalary(IOMPersonInCharge SalDB, DateTime dtStart, DateTime dtLast, int PersonCode, bool bConnect = true)
3330
        {
3331
            try
3332
            {
3333
                int RetSalary = 0;
3334

    
3335
                StringBuilder strSQL = new StringBuilder();
3336
                strSQL.Append("SELECT SUM(SAL.SALARY) FROM");
3337
                strSQL.Append(" (SELECT AX.hiduke,");
3338
                //strSQL.AppendFormat(" ROUND((AX.salary * {0}) / DATE_FORMAT(LAST_DAY(AX.hiduke), '%d')) AS SALARY,", CommonDefine.s_SalaryCorrection);
3339
                strSQL.AppendFormat(" ROUND((AX.salary * {0}) / 30) AS SALARY,", CommonDefine.s_SalaryCorrection);
3340
                strSQL.Append(" MAX(AX.StartD) FROM");
3341
                strSQL.Append(" (SELECT A.d hiduke, B.MonthlySalary salary, B.STARTDATE StartD FROM");
3342

    
3343
                strSQL.Append(" (SELECT A1.years, A2.month, A3.days, DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) AS d");
3344
                strSQL.Append(" FROM yearmaster AS A1, monthmaster AS A2, daymaster AS A3");
3345

    
3346
                strSQL.Append(" WHERE");
3347
                if (dtStart.Year == dtLast.Year)
3348
                {
3349
                    strSQL.AppendFormat(" (A1.years = {0} AND A2.month IN(", dtStart.Year.ToString("0000"));
3350
                    for (int i = dtStart.Month; i <= dtLast.Month; i++)
3351
                    {
3352
                        if (i != dtStart.Month) strSQL.Append(", ");
3353
                        strSQL.AppendFormat("{0} ", i);
3354
                    }
3355
                    strSQL.Append("))");
3356
                }
3357
                else
3358
                {
3359
                    strSQL.Append(" (");
3360

    
3361
                    for (int iYear = dtStart.Year; iYear <= dtLast.Year; iYear++)
3362
                    {
3363
                        // 先頭以外はORを追加する
3364
                        if (iYear != dtStart.Year) strSQL.AppendFormat(" OR");
3365

    
3366
                        strSQL.AppendFormat(" (A1.years = {0}", iYear.ToString("0000"));
3367
                        strSQL.Append(" AND A2.month IN (");
3368

    
3369
                        if (iYear == dtStart.Year)
3370
                        {   // 先頭年
3371
                            for (int i = dtStart.Month; i <= 12; i++)
3372
                            {
3373
                                if (i != dtStart.Month) strSQL.Append(", ");
3374
                                strSQL.AppendFormat("{0} ", i);
3375
                            }
3376
                        }
3377
                        else if (iYear == dtLast.Year)
3378
                        {   // 最終年
3379
                            for (int i = 1; i <= dtLast.Month; i++)
3380
                            {
3381
                                if (i != 1) strSQL.Append(", ");
3382
                                strSQL.AppendFormat("{0} ", i);
3383
                            }
3384
                        }
3385
                        else
3386
                        {   // 以外の年
3387
                            for (int i = 1; i <= 12; i++)
3388
                            {
3389
                                if (i != 1) strSQL.Append(", ");
3390
                                strSQL.AppendFormat("{0} ", i);
3391
                            }
3392
                        }
3393
                        strSQL.Append("))");
3394
                    }
3395
                    strSQL.Append(")");
3396
                }
3397

    
3398
                strSQL.Append(" AND DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) IS NOT NULL");
3399
                strSQL.AppendFormat(" AND (DATE('{0}') <= DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days))", dtStart.ToShortDateString());
3400
                strSQL.AppendFormat(" AND DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) <= DATE('{0}'))", dtLast.ToShortDateString());
3401
                strSQL.Append(" ORDER BY d) A");
3402
                strSQL.Append(", PERSONSALARYMASTER AS B");
3403
                strSQL.AppendFormat(" WHERE B.PERSONCODE = {0}", PersonCode);
3404
                strSQL.Append("       AND B.STARTDATE <= A.d");
3405
                strSQL.Append(" ORDER BY A.d, B.STARTDATE DESC) AS AX");
3406
                strSQL.Append(" GROUP BY AX.hiduke");
3407
                strSQL.Append(" ORDER BY AX.hiduke");
3408
                strSQL.Append(" ) AS SAL");
3409

    
3410
                ArrayList ArData = new ArrayList();
3411
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData, bConnect)) return 0;
3412

    
3413
                foreach (object[] objRec in ArData)
3414
                {
3415
                    RetSalary += CommonMotions.cnvInt(objRec[0]);
3416
                }
3417

    
3418
                return RetSalary;
3419
            }
3420
            catch (Exception ex)
3421
            {
3422
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3423
                return 0;
3424
            }
3425
        }
3426
        #endregion
3427

    
3428
        #region 期間より零れた経過給与を取得する
3429
        /// <summary>
3430
        /// 期間より零れた経過給与を取得する
3431
        /// </summary>
3432
        /// <returns></returns>
3433
        public static void CalcSpilledSalary(IOMPersonInCharge SalDB
3434
                                            , int TargetYear, DateTime dtStart, DateTime dtLast
3435
                                            , int PersonCode
3436
                                            , ref int NextDiffDay
3437
                                            , ref int PrevDiffDay)
3438
        {
3439
            try
3440
            {
3441

    
3442
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(TargetYear, true);
3443
                DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(TargetYear, false);
3444

    
3445
                StringBuilder strSQL = new StringBuilder();
3446
                strSQL.Append("Select");
3447
                strSQL.Append(" Base.ConstructionCode");
3448
                strSQL.Append(", Ledger.ConstructionStart");
3449
                strSQL.Append(", Ledger.ConstructionEnd");
3450
                strSQL.Append(", LDetail.GroupCount");
3451
                strSQL.Append(", LDetail.SalaryFlg");
3452
                strSQL.Append(", LDetail.SalaryDays");
3453
                strSQL.Append(" From");
3454
                strSQL.Append(" constructionbaseinfo As Base");
3455
                strSQL.Append(" Inner Join constructionledger As Ledger");
3456
                strSQL.Append("       On Ledger.ConstructionCode = Base.ConstructionCode");
3457
                strSQL.AppendFormat("  And DATE('{0}') <= DATE(Ledger.ConstructionEnd)", dtDefaultStart.ToShortDateString());
3458
                strSQL.Append(" Inner Join constructionledgerdetail As LDetail");
3459
                strSQL.Append("       On LDetail.ConstructionCode = Base.ConstructionCode");
3460
                strSQL.AppendFormat(" And LDetail.GroupCount = {0}", (int)ConstructionLedgerDetail.GroupCountDef.Payroll);
3461
                strSQL.AppendFormat(" And LDetail.CompanyCode = {0}", PersonCode);
3462
                strSQL.AppendFormat(" And LDetail.SalaryFlg = {0}", (int)CommonDefine.SalaryDevision.DaysInput);
3463
                strSQL.Append(" Where");
3464

    
3465
                if (CommonMotions.BasePeriodYear())
3466
                    strSQL.AppendFormat(" Base.ConstructionPeriod = {0}", TargetYear);
3467
                else
3468
                    strSQL.AppendFormat(" Base.ConstructionYear = {0}", TargetYear);
3469

    
3470
                strSQL.AppendFormat(" And Base.ConstructionPersonCode = {0}", PersonCode);
3471
                strSQL.Append(" And (");
3472
                strSQL.AppendFormat("DATE('{0}') <= DATE(Ledger.ConstructionStart)", dtLast.ToShortDateString());
3473
                strSQL.AppendFormat(" And DATE(Ledger.ConstructionEnd) <= DATE('{0}')", dtDefaultEnd.ToShortDateString());
3474
                strSQL.Append(")");
3475

    
3476
                ArrayList ArData = new ArrayList();
3477
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return;
3478

    
3479
                // 半端分の日数を取得する
3480
                NextDiffDay = ArData.Cast<object[]>().Sum(x => CommonMotions.cnvInt(x[5]));
3481

    
3482
                // 先期の半端分の日数を取得する
3483
                PrevDiffDay = CalcSpilledPreviusDay(SalDB, TargetYear, dtStart, PersonCode);
3484

    
3485
            }
3486
            catch (Exception ex)
3487
            {
3488
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3489
            }
3490
        }
3491
        #endregion
3492

    
3493
        #region 先期の終了後零れた日数を取得する
3494
        /// <summary>
3495
        /// 先期の終了後零れた日数を取得する
3496
        /// </summary>
3497
        /// <returns></returns>
3498
        private static int CalcSpilledPreviusDay(IOMPersonInCharge SalDB
3499
                                            , int TargetYear, DateTime dtStart, int PersonCode)
3500
        {
3501
            try
3502
            {
3503
                int RetDay = 0;
3504

    
3505
                // 先期の期末を取得する
3506
                int PrevTargetYear = (TargetYear - 1);
3507
                if (PrevTargetYear < 1) return 0;
3508
                DateTime dtPrevEnd = CommonMotions.GetOpeningEndDate((TargetYear - 1), false);
3509

    
3510
                // 今期の最初が先期の最後より大きい場合は処理しない
3511
                if (dtPrevEnd < dtStart) return 0;
3512

    
3513
                StringBuilder strSQL = new StringBuilder();
3514
                strSQL.Append("Select");
3515
                strSQL.Append(" Base.ConstructionCode");
3516
                strSQL.Append(", Ledger.ConstructionStart");
3517
                strSQL.Append(", Ledger.ConstructionEnd");
3518
                strSQL.Append(", LDetail.GroupCount");
3519
                strSQL.Append(", LDetail.SalaryFlg");
3520
                strSQL.Append(", LDetail.SalaryDays");
3521
                strSQL.Append(" From");
3522
                strSQL.Append(" constructionbaseinfo As Base");
3523
                strSQL.Append(" Inner Join constructionledger As Ledger");
3524
                strSQL.Append("       On Ledger.ConstructionCode = Base.ConstructionCode");
3525
                strSQL.Append(" Inner Join constructionledgerdetail As LDetail");
3526
                strSQL.Append("       On LDetail.ConstructionCode = Base.ConstructionCode");
3527
                strSQL.AppendFormat(" And LDetail.GroupCount = {0}", (int)ConstructionLedgerDetail.GroupCountDef.Payroll);
3528
                strSQL.AppendFormat(" And LDetail.CompanyCode = {0}", PersonCode);
3529
                strSQL.AppendFormat(" And LDetail.SalaryFlg = {0}", (int)CommonDefine.SalaryDevision.DaysInput);
3530
                strSQL.Append(" Where");
3531

    
3532
                if (CommonMotions.BasePeriodYear())
3533
                    strSQL.AppendFormat(" Base.ConstructionPeriod = {0}", PrevTargetYear);
3534
                else
3535
                    strSQL.AppendFormat(" Base.ConstructionYear = {0}", PrevTargetYear);
3536

    
3537
                strSQL.AppendFormat(" And Base.ConstructionPersonCode = {0}", PersonCode);
3538
                strSQL.Append(" And(");
3539
                strSQL.AppendFormat("DATE('{0}') <= DATE(Ledger.ConstructionStart)", (dtStart.AddDays(-1)).ToShortDateString());
3540
                strSQL.AppendFormat(" And DATE(Ledger.ConstructionEnd) <= DATE('{0}')", dtPrevEnd.ToShortDateString());
3541
                strSQL.Append(")");
3542

    
3543
                ArrayList ArData = new ArrayList();
3544
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return 0;
3545

    
3546
                // 半端分の日数を取得する
3547
                RetDay = ArData.Cast<object[]>().Sum(x => CommonMotions.cnvInt(x[5]));
3548

    
3549
                return RetDay;
3550
            }
3551
            catch (Exception ex)
3552
            {
3553
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3554
                return 0;
3555
            }
3556
        }
3557
        #endregion
3558

    
3559
        #region 経過給与を一括計算する
3560
        /// <summary>
3561
        /// 経過給与を一括計算する
3562
        /// </summary>
3563
        /// <param name="dtStart"></param>
3564
        /// <param name="PersonCode"></param>
3565
        /// <returns></returns>
3566
        public static void CalcElapsedSalaryAll(IOMPersonInCharge SalDB, int TargetYear, ArrayList TargetList, ref List<KeyValuePair<int, long>> SalDataList)
3567
        {
3568
            try
3569
            {
3570
                if (TargetList.Count < 1) return;
3571
                StringBuilder strSQL = new StringBuilder();
3572

    
3573
                // 非受注コード
3574
                int nNotOrderCode = CommonDefine.ProjectsStatus.First(x => x.Value.Equals("非 受 注")).Key;
3575

    
3576
                bool bFirst = true;
3577
                foreach (object[] ObjRec in TargetList)
3578
                {
3579
                    int DepartmentCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.DepartmentCode]);
3580
                    int PersonCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.PersonCode]);
3581
                    int nKeyCode = (DepartmentCode * 100000000) + PersonCode;
3582
                    DateTime dtStart = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.StartDate]);
3583
                    DateTime dtLast = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.CompDate]);
3584

    
3585
                    if (!bFirst) strSQL.Append(" UNION ");
3586

    
3587
                    strSQL.AppendFormat("SELECT {0} As LinkKey, SUM(SAL{0}.SALARY) FROM", nKeyCode);
3588

    
3589
                    strSQL.Append(" (SELECT AX.hiduke");
3590
                    strSQL.AppendFormat("   , ROUND((AX.salary * {0}) / 30) AS SALARY", CommonDefine.s_SalaryCorrection);
3591
                    strSQL.Append("         , MAX(AX.StartD)");
3592
                    strSQL.Append("  From (SELECT A.d hiduke, B.MonthlySalary salary, B.STARTDATE StartD FROM");
3593

    
3594
                    strSQL.Append("              (SELECT A1.years");
3595
                    strSQL.Append("                    , A2.month");
3596
                    strSQL.Append("                    , A3.days");
3597
                    strSQL.Append("                    , DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) AS d");
3598
                    strSQL.Append("               FROM yearmaster AS A1, monthmaster AS A2, daymaster AS A3");
3599

    
3600
                    strSQL.Append("               WHERE");
3601
                    if (dtStart.Year == dtLast.Year)
3602
                    {
3603
                        strSQL.AppendFormat(" (A1.years = {0} AND A2.month IN (", dtStart.Year.ToString("0000"));
3604
                        for (int i = dtStart.Month; i <= dtLast.Month; i++)
3605
                        {
3606
                            if (i != dtStart.Month) strSQL.Append(", ");
3607
                            strSQL.AppendFormat("{0} ", i);
3608
                        }
3609
                        strSQL.Append("))");
3610
                    }
3611
                    else
3612
                    {
3613
                        strSQL.Append(" (");
3614

    
3615
                        for (int iYear = dtStart.Year; iYear <= dtLast.Year; iYear++)
3616
                        {
3617
                            // 先頭以外はORを追加する
3618
                            if (iYear != dtStart.Year) strSQL.AppendFormat(" OR");
3619

    
3620
                            strSQL.AppendFormat(" (A1.years = {0}", iYear.ToString("0000"));
3621
                            strSQL.Append(" AND A2.month IN (");
3622

    
3623
                            if (iYear == dtStart.Year)
3624
                            {   // 先頭年
3625
                                for (int i = dtStart.Month; i <= 12; i++)
3626
                                {
3627
                                    if (i != dtStart.Month) strSQL.Append(", ");
3628
                                    strSQL.AppendFormat("{0} ", i);
3629
                                }
3630
                            }
3631
                            else if (iYear == dtLast.Year)
3632
                            {   // 最終年
3633
                                for (int i = 1; i <= dtLast.Month; i++)
3634
                                {
3635
                                    if (i != 1) strSQL.Append(", ");
3636
                                    strSQL.AppendFormat("{0} ", i);
3637
                                }
3638
                            }
3639
                            else
3640
                            {   // 以外の年
3641
                                for (int i = 1; i <= 12; i++)
3642
                                {
3643
                                    if (i != 1) strSQL.Append(", ");
3644
                                    strSQL.AppendFormat("{0} ", i);
3645
                                }
3646
                            }
3647
                            strSQL.Append("))");
3648
                        }
3649
                        strSQL.Append(")");
3650
                    }
3651

    
3652
                    strSQL.Append("              AND DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) IS NOT NULL");
3653
                    strSQL.AppendFormat("        AND (DATE('{0}') <= DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days))", dtStart.ToShortDateString());
3654
                    strSQL.AppendFormat("        AND DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) <= DATE('{0}'))", dtLast.ToShortDateString());
3655
                    strSQL.Append("              ORDER BY d) A");
3656

    
3657
                    strSQL.Append(" , PERSONSALARYMASTER AS B");
3658
                    strSQL.Append("   Inner Join personinchargemaster As C");
3659
                    strSQL.Append("          On C.PersonCode = B.PersonCode");
3660
                    strSQL.AppendFormat("    And C.LedgerFlg = {0}", (int)PersonInChargeMaster.LedgerDivNoDef.CalcTarget);
3661

    
3662
                    strSQL.AppendFormat(" WHERE B.PERSONCODE = {0}", PersonCode);
3663
                    //strSQL.Append("       AND B.STARTDATE <= A.d");
3664
                    strSQL.Append("       AND B.STARTDATE = ");
3665
                    strSQL.Append("                          (Select BB.STARTDATE From PERSONSALARYMASTER AS BB");
3666
                    strSQL.AppendFormat("                                        Where BB.PERSONCODE = {0}", PersonCode);
3667
                    strSQL.Append("                                              AND BB.STARTDATE <= A.d");
3668
                    strSQL.Append("                                              Order By BB.STARTDATE DESC");
3669
                    strSQL.Append("                                              Limit 1)");
3670

    
3671
                    strSQL.Append(" ORDER BY A.d, B.STARTDATE DESC) AS AX");
3672
                    strSQL.Append(" GROUP BY AX.hiduke");
3673
                    strSQL.Append(" ORDER BY AX.hiduke");
3674
                    strSQL.AppendFormat(" ) AS SAL{0}", nKeyCode);
3675

    
3676
                    bFirst = false;
3677
                }
3678

    
3679
                ArrayList ArData = new ArrayList();
3680
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return;
3681

    
3682
                foreach (object[] objRec in ArData)
3683
                {
3684
                    SalDataList.Add(new KeyValuePair<int, long>(CommonMotions.cnvInt(objRec[0]), CommonMotions.cnvLong(objRec[1])));
3685
                }
3686

    
3687
            }
3688
            catch (Exception ex)
3689
            {
3690
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3691
            }
3692
        }
3693
        #endregion
3694

    
3695
        #region 期間より零れた経過給与を取得しデータテーブルの開始終了日を変更する
3696
        /// <summary>
3697
        /// 期間より零れた経過給与を取得しデータテーブルの開始終了日を変更する
3698
        /// </summary>
3699
        /// <returns></returns>
3700
        public static void CalcSpilledSalaryAll(IOMPersonInCharge SalDB
3701
                                            , int TargetYear
3702
                                            , ref ArrayList TargetList)
3703
        {
3704
            try
3705
            {
3706
                if (TargetList.Count < 1) return;
3707

    
3708
                // デフォルト開始・終了を取得する
3709
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(TargetYear, true);
3710
                DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(TargetYear, false);
3711
                DateTime dtPrevEnd = CommonMotions.GetOpeningEndDate((TargetYear - 1), false);
3712

    
3713
                // 先期の期末を取得する
3714
                int PrevTargetYear = (TargetYear - 1);
3715
                if (PrevTargetYear < 1) return;
3716

    
3717
                List<KeyValuePair<int, int>> wrkManCode = new List<KeyValuePair<int, int>>();
3718
                List<KeyValuePair<DateTime, DateTime>> wrkStEdDate = new List<KeyValuePair<DateTime, DateTime>>();
3719
                bool bFirst = true;
3720
                StringBuilder strSQL = new StringBuilder();
3721
                foreach (object[] ObjRec in TargetList)
3722
                {
3723
                    // 開始・終了日が無い場合はデフォルトの期首・期末を使用する
3724
                    DateTime stDate = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.StartDate]);
3725
                    DateTime edDate = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.CompDate]);
3726
                    CalcStartCompDate(TargetYear,
3727
                                        dtDefaultStart, dtDefaultEnd,
3728
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.HireStartDays]),
3729
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.HireCompDays]),
3730
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.NextStartDate]),
3731
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.NextCompDate]),
3732
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.DepHistoryStartDate]),
3733
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.DepHistoryCompDate]),
3734
                                        ref stDate, ref edDate);
3735

    
3736
                    int nDepCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.DepartmentCode]);
3737
                    int nPersonCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.PersonCode]);
3738

    
3739
                    wrkManCode.Add(new KeyValuePair<int, int>(nDepCode, nPersonCode));
3740
                    wrkStEdDate.Add(new KeyValuePair<DateTime, DateTime>(stDate, edDate));
3741

    
3742
                    // 今期の最初が先期の最後より大きい場合は処理しない
3743
                    //if (dtPrevEnd < stDate) continue;
3744

    
3745
                    if (!bFirst) strSQL.Append(" Union ");
3746

    
3747
                    strSQL.Append("Select");
3748
                    if (CommonMotions.BasePeriodYear())
3749
                        strSQL.Append(" Base.ConstructionPeriod");
3750
                    else
3751
                        strSQL.Append(" Base.ConstructionYear");
3752

    
3753
                    strSQL.Append(", Base.ConstructionCode");
3754
                    strSQL.Append(", LDetail.CompanyCode");
3755
                    strSQL.Append(", Ledger.ConstructionStart");
3756
                    strSQL.Append(", Ledger.ConstructionEnd");
3757
                    strSQL.Append(", LDetail.GroupCount");
3758
                    strSQL.Append(", LDetail.SalaryFlg");
3759
                    strSQL.Append(", LDetail.SalaryDays");
3760
                    strSQL.Append(", LDetail.ComponentCode");
3761
                    strSQL.Append(" From");
3762
                    strSQL.Append(" constructionbaseinfo As Base");
3763
                    strSQL.Append(" Inner Join constructionledger As Ledger");
3764
                    strSQL.Append("       On Ledger.ConstructionCode = Base.ConstructionCode");
3765
                    strSQL.AppendFormat("  And DATE('{0}') <= DATE(Ledger.ConstructionEnd)", dtDefaultStart.ToShortDateString());
3766
                    strSQL.Append(" Inner Join constructionledgerdetail As LDetail");
3767
                    strSQL.Append("       On LDetail.ConstructionCode = Base.ConstructionCode");
3768
                    strSQL.AppendFormat("  And LDetail.GroupCount = {0}", (int)ConstructionLedgerDetail.GroupCountDef.Payroll);
3769
                    strSQL.AppendFormat("  And LDetail.ComponentCode = {0}", nDepCode);
3770
                    strSQL.AppendFormat("  And LDetail.CompanyCode = {0}", nPersonCode);
3771
                    strSQL.AppendFormat("  And LDetail.SalaryFlg = {0}", (int)CommonDefine.SalaryDevision.DaysInput);
3772
                    strSQL.Append(" Where");
3773

    
3774
                    if (CommonMotions.BasePeriodYear())
3775
                        strSQL.AppendFormat(" Base.ConstructionPeriod = {0}", TargetYear);
3776
                    else
3777
                        strSQL.AppendFormat(" Base.ConstructionYear = {0}", TargetYear);
3778

    
3779
                    strSQL.AppendFormat(" And Base.ConstrDepCode = {0}", nDepCode);
3780
                    strSQL.AppendFormat(" And Base.ConstructionPersonCode = {0}", nPersonCode);
3781
                    strSQL.Append(" And(");
3782
                    strSQL.AppendFormat("DATE('{0}') <= DATE(Ledger.ConstructionStart)", edDate.ToShortDateString());
3783
                    strSQL.AppendFormat(" And DATE(Ledger.ConstructionEnd) <= DATE('{0}')", dtDefaultEnd.ToShortDateString());
3784
                    strSQL.Append(")");
3785
                    strSQL.Append(" Union Select");
3786

    
3787
                    if (CommonMotions.BasePeriodYear())
3788
                        strSQL.Append(" Base.ConstructionPeriod");
3789
                    else
3790
                        strSQL.Append(" Base.ConstructionYear");
3791

    
3792
                    strSQL.Append(", Base.ConstructionCode");
3793
                    strSQL.Append(", LDetail.CompanyCode");
3794
                    strSQL.Append(", Ledger.ConstructionStart");
3795
                    strSQL.Append(", Ledger.ConstructionEnd");
3796
                    strSQL.Append(", LDetail.GroupCount");
3797
                    strSQL.Append(", LDetail.SalaryFlg");
3798
                    strSQL.Append(", LDetail.SalaryDays");
3799
                    strSQL.Append(", LDetail.ComponentCode");
3800
                    strSQL.Append(" From");
3801
                    strSQL.Append(" constructionbaseinfo As Base");
3802
                    strSQL.Append(" Inner Join constructionledger As Ledger");
3803
                    strSQL.Append("       On Ledger.ConstructionCode = Base.ConstructionCode");
3804
                    strSQL.Append(" Inner Join constructionledgerdetail As LDetail");
3805
                    strSQL.Append("       On LDetail.ConstructionCode = Base.ConstructionCode");
3806
                    strSQL.AppendFormat("  And LDetail.GroupCount = {0}", (int)ConstructionLedgerDetail.GroupCountDef.Payroll);
3807
                    strSQL.AppendFormat("  And LDetail.ComponentCode = {0}", nDepCode);
3808
                    strSQL.AppendFormat("  And LDetail.CompanyCode = {0}", nPersonCode);
3809
                    strSQL.AppendFormat("  And LDetail.SalaryFlg = {0}", (int)CommonDefine.SalaryDevision.DaysInput);
3810
                    strSQL.Append(" Where");
3811

    
3812
                    if (CommonMotions.BasePeriodYear())
3813
                        strSQL.AppendFormat(" Base.ConstructionPeriod = {0}", PrevTargetYear);
3814
                    else
3815
                        strSQL.AppendFormat(" Base.ConstructionYear = {0}", PrevTargetYear);
3816

    
3817
                    strSQL.AppendFormat(" And Base.ConstrDepCode = {0}", nDepCode);
3818
                    strSQL.AppendFormat(" And Base.ConstructionPersonCode = {0}", nPersonCode);
3819
                    strSQL.Append(" And(");
3820
                    strSQL.AppendFormat("DATE('{0}') <= DATE(Ledger.ConstructionStart)", (stDate.AddDays(-1)).ToShortDateString());
3821
                    strSQL.AppendFormat(" And DATE(Ledger.ConstructionEnd) <= DATE('{0}')", dtPrevEnd.ToShortDateString());
3822
                    strSQL.Append(")");
3823

    
3824
                    bFirst = false;
3825
                }
3826
                // データ取得
3827
                ArrayList ArData = new ArrayList();
3828
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return;
3829

    
3830
                foreach (object[] ObjRec in TargetList)
3831
                {
3832
                    int nDepCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.DepartmentCode]);
3833
                    int nPersonCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.PersonCode]);
3834

    
3835
                    // 半端分の日数を取得する
3836
                    int NextDiffDay = ArData.Cast<object[]>().Where(x => CommonMotions.cnvInt(x[0]) == TargetYear
3837
                                                                    && CommonMotions.cnvInt(x[8]) == nDepCode
3838
                                                                    && CommonMotions.cnvInt(x[2]) == nPersonCode)
3839
                                                            .Sum(y => CommonMotions.cnvInt(y[7]));
3840

    
3841
                    // 先期の半端分の日数を取得する
3842
                    int PrevDiffDay = ArData.Cast<object[]>().Where(x => CommonMotions.cnvInt(x[0]) == PrevTargetYear
3843
                                                                    && CommonMotions.cnvInt(x[8]) == nDepCode
3844
                                                                    && CommonMotions.cnvInt(x[2]) == nPersonCode)
3845
                                                            .Sum(y => CommonMotions.cnvInt(y[7]));
3846
                    // 同じデータを探す
3847
                    int DateCnt = 0;
3848
                    foreach (KeyValuePair<int, int> CurRec in wrkManCode)
3849
                    {
3850
                        if (CurRec.Key == nDepCode && CurRec.Value == nPersonCode) break;
3851
                        DateCnt++;
3852
                    }
3853
                    KeyValuePair<DateTime, DateTime> CurStEd = wrkStEdDate[DateCnt];
3854

    
3855
                    DateTime dtDepMove = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.DepHistoryStartDate]);
3856

    
3857
                    // 今期終了日変更
3858
                    DateTime wrkDate = CurStEd.Value.AddDays(NextDiffDay);
3859
                    if (dtDefaultEnd.Date < wrkDate.Date) wrkDate = dtDefaultEnd;
3860
                    ObjRec[(int)CommonLedgerData.GetPersonTerm.CompDate] = wrkDate;
3861

    
3862
                    if (dtDepMove.Date == CurStEd.Key.Date) PrevDiffDay = 0;    // 部署移動日がセットされている場合は日付を変えない
3863
                    // 今期開始日変更
3864
                    wrkDate = CurStEd.Key.AddDays(PrevDiffDay);
3865
                    if (dtDefaultEnd.Date < wrkDate.Date) wrkDate = dtDefaultEnd;
3866
                    ObjRec[(int)CommonLedgerData.GetPersonTerm.StartDate] = wrkDate;
3867
                }
3868

    
3869
            }
3870
            catch (Exception ex)
3871
            {
3872
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3873
            }
3874
        }
3875
        #endregion
3876

    
3877
        #region 計算開始・終了日のチェック入れ替え
3878
        /// <summary>
3879
        /// 計算開始・終了日のチェック入れ替え
3880
        /// </summary>
3881
        public static void CalcStartCompDate(int BusinessPeriod,
3882
                                        DateTime dtDefaultStart, DateTime dtDefaultEnd,
3883
                                        DateTime HireStartDate, DateTime HireCompDate,
3884
                                        DateTime NextStartDate, DateTime NextCompDate,
3885
                                        DateTime DepHisStDate, DateTime DepHisCompDate,
3886
                                        ref DateTime StartDate, ref DateTime CompDate)
3887
        {
3888
            try
3889
            {
3890
                // ----- 計算開始日セット
3891
                if (StartDate.Date == DateTime.MinValue.Date)
3892
                {
3893
                    // 最小値ならば今期開始をセット
3894
                    StartDate = dtDefaultStart;
3895
                }
3896
                //else if (dtDefaultStart.Date <= HireStartDate.Date && HireStartDate.Date <= dtDefaultEnd.Date)
3897
                //{
3898
                //    // 入社日が期内ならば開始を入社日にする
3899
                //    StartDate = HireStartDate;
3900
                //}
3901
                else if (dtDefaultStart.Date < StartDate.Date)
3902
                {
3903
                    // 今期工事の契約工期が今期の開始より小さい場合は今期開始をセット
3904
                    StartDate = dtDefaultStart;
3905
                }
3906
                // 入社日が期内ならば開始を入社日にする
3907
                if (dtDefaultStart.Date <= HireStartDate && HireStartDate.Date <= dtDefaultEnd.Date)
3908
                {
3909
                    StartDate = HireStartDate;
3910
                }
3911
                // 部署移動開始日が今期ならばセットする
3912
                if (dtDefaultStart.Date <= DepHisStDate.Date && DepHisStDate.Date <= dtDefaultEnd.Date)
3913
                {
3914
                    if (StartDate.Date < DepHisStDate.Date) StartDate = DepHisStDate;
3915
                }
3916

    
3917
                // ----- 計算終了日セット
3918
                // Defaultは期末
3919
                CompDate = dtDefaultEnd;
3920

    
3921
                // 退社日が期内ならば終了を退社日にする
3922
                if (dtDefaultStart.Date < HireCompDate.Date && HireCompDate.Date < dtDefaultEnd.Date)
3923
                {
3924
                    CompDate = HireCompDate;
3925
                }
3926
                else if (DepHisCompDate.Date == DateTime.MaxValue.Date)
3927
                {
3928
                    // 終了がマックスは今季終了をセットする
3929
                    CompDate = dtDefaultEnd;
3930
                }
3931
                else if (NextStartDate.Date != DateTime.MinValue.Date)
3932
                {
3933
                    // 来季の開始があって今期の場合は開始日-1に置き換える
3934
                    if (dtDefaultStart.Date < NextStartDate.Date && NextStartDate.Date < dtDefaultEnd.Date)
3935
                    {
3936
                        CompDate = NextStartDate.AddDays(-1);
3937
                    }
3938
                }
3939
                // 部署移動終了日が今期ならばセットする
3940
                if (dtDefaultStart.Date <= DepHisCompDate.Date && DepHisCompDate.Date <= dtDefaultEnd.Date)
3941
                {
3942
                    if (DepHisCompDate.Date < CompDate.Date) CompDate = DepHisCompDate;
3943
                }
3944
            }
3945
            catch (Exception ex)
3946
            {
3947
                logger.ErrorFormat("システムエラー:{0}", ex.Message);
3948
            }
3949
        }
3950
        #endregion
3951

    
3952
        #region グリッド行退避エリア初期化処理
3953
        /// <summary>
3954
        /// グリッド行退避エリア初期化処理
3955
        /// </summary>
3956
        public static void InitSavrGridRow(ref GridCellStyleMember[] BackUpStyle)
3957
        {
3958
            try
3959
            {
3960
                for (int i = 0; i < BackUpStyle.Length; i++)
3961
                {
3962
                    BackUpStyle[i] = new GridCellStyleMember();
3963
                }
3964
            }
3965
            catch (Exception ex)
3966
            {
3967
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3968
            }
3969
        }
3970
        #endregion
3971

    
3972
        #region 選択行の色を変更する
3973
        /// <summary>
3974
        /// 選択行の色を変更する
3975
        /// </summary>
3976
        public static void ChangeGridRow(DataGridViewEX dgv
3977
                                        , DataGridViewRow CurRow
3978
                                        , ref GridCellStyleMember[] BackUpStyle
3979
                                        , bool bSelect = true)
3980
        {
3981
            try
3982
            {
3983
                // カレント行バックアップ&対象色セット
3984
                for (int i = 0; i < dgv.ColumnCount; i++)
3985
                {
3986
                    if (bSelect)
3987
                    {
3988
                        BackUpStyle[i].DrowBackColor = CurRow.Cells[i].Style.BackColor;
3989
                        BackUpStyle[i].DrowFont = CurRow.Cells[i].Style.Font;
3990
                        BackUpStyle[i].DrowForeColor = CurRow.Cells[i].Style.ForeColor;
3991
                        CurRow.Cells[i].Style.BackColor = Color.Red;
3992
                        CurRow.Cells[i].Style.ForeColor = Color.White;
3993
                    }
3994
                    else
3995
                    {
3996
                        CurRow.Cells[i].Style.BackColor = BackUpStyle[i].DrowBackColor;
3997
                        CurRow.Cells[i].Style.Font = BackUpStyle[i].DrowFont;
3998
                        CurRow.Cells[i].Style.ForeColor = BackUpStyle[i].DrowForeColor;
3999
                    }
4000
                }
4001
            }
4002
            catch (Exception ex)
4003
            {
4004
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4005
            }
4006
        }
4007
        #endregion
4008

    
4009
        #region フォームのコントロールを列挙する
4010
        /// <summary>
4011
        /// フォームのコントロールを列挙する
4012
        /// </summary>
4013
        /// <returns></returns>
4014
        public static Control[] GetAllControls(Control top)
4015
        {
4016
            ArrayList buf = new ArrayList();
4017
            foreach (Control c in top.Controls)
4018
            {
4019
                buf.Add(c);
4020
                buf.AddRange(GetAllControls(c));
4021
            }
4022
            return (Control[])buf.ToArray(typeof(Control));
4023
        }
4024
        #endregion
4025

    
4026
        #region 今期以降の判定を行う
4027
        /// <summary>
4028
        /// 今期以降の判定を行う
4029
        /// </summary>
4030
        /// <returns></returns>
4031
        public static bool CheckNowSeason(int nTarget)
4032
        {
4033
            try
4034
            {
4035
                if (CommonMotions.BasePeriodYear())
4036
                {   // 営業期数
4037
                    if (nTarget < m_systemMaster.BusinessPeriod) return false;
4038
                }
4039
                else
4040
                {   // 工事年度
4041
                    if (nTarget < m_systemMaster.ConstrYear) return false;
4042
                }
4043
                return true;
4044
            }
4045
            catch (Exception ex)
4046
            {
4047
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4048
                return false;
4049
            }
4050
        }
4051
        #endregion
4052

    
4053
        #region 部署コンボボックスデータ取得SQL作成
4054
        /// <summary>
4055
        /// 部署コンボボックスデータ取得SQL作成
4056
        /// </summary>
4057
        /// <param name="strSQL"></param>
4058
        public static void CreateDepCombBoxSQL(ref StringBuilder strSQL
4059
                                                , int nTargetCount
4060
                                                , bool bCompBase = true
4061
                                                , bool bLedgerDivNo = false
4062
                                                , bool bConstrBase = true)
4063
        {
4064
            try
4065
            {
4066
                if (CommonMotions.LoginUserData.PersonCode == CommonDefine.AdminCode)
4067
                {
4068
                    strSQL.Append("SELECT");
4069
                    strSQL.Append(" A.DEPARTMENTCODE");
4070
                    strSQL.Append(", A.DEPARTMENTSTRING");
4071
                    strSQL.Append(", A.DISPLAYORDER");
4072
                    strSQL.Append(", 1");
4073
                    strSQL.Append(" From DEPARTMENTMASTER As A");
4074
                    strSQL.AppendFormat(" Where DeleteFlg = {0}", (int)CommonDefine.DataDeleteDef.Exists);
4075
                    return;
4076
                }
4077

    
4078
                // 今期のデータかどうかを判定する
4079
                bool bNowSeason = CheckNowSeason(nTargetCount);
4080

    
4081
                strSQL.Append("SELECT");
4082
                strSQL.Append(" A.DEPARTMENTCODE");
4083
                strSQL.Append(", A.DEPARTMENTSTRING");
4084
                strSQL.Append(", A.DISPLAYORDER");
4085
                strSQL.Append(", COUNT(*)");
4086
                strSQL.Append(" FROM");
4087
                strSQL.Append(" persondepartmentmaster As AA");
4088
                strSQL.Append(" INNER JOIN ChgChargeDep As AB");
4089
                strSQL.Append("       On AB.PersonCode = AA.PersonCode");
4090
                strSQL.Append(" INNER JOIN DEPARTMENTMASTER As A");
4091
                strSQL.Append("       On A.DepartmentCode = AA.DepartmentCode");
4092
                if (!bNowSeason)
4093
                {
4094
                    if (bConstrBase)
4095
                    {
4096
                        // 過去のデータは工事情報より取得する
4097
                        strSQL.Append(" INNER JOIN (");
4098
                        strSQL.Append("Select");
4099
                        strSQL.Append(" A1.SalesDepCode As DEPARTMENTCODE");
4100
                        strSQL.Append(", A1.SalesPersonCode As PERSONCODE");
4101
                        strSQL.Append(", B1.DetailString As DEPARTMENTSTRING");
4102
                        strSQL.Append(", ifnull(C1.DisplayOrder, 10) As DISPLAYORDER");
4103
                        strSQL.Append(" From Constructionbaseinfo As A1");
4104
                        strSQL.Append("  Inner Join constructionbaseinfodetail As B1");
4105
                        strSQL.Append("        On B1.ConstructionCode = A1.ConstructionCode");
4106
                        strSQL.AppendFormat("  And B1.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.SalesDepartmentName);
4107
                        strSQL.Append("  Left Join departmentmaster As C1");
4108
                        strSQL.Append("       On C1.DepartmentCode = A1.SalesDepCode");
4109

    
4110
                        if (CommonMotions.BasePeriodYear())
4111
                            strSQL.AppendFormat(" Where A1.ConstructionPeriod = {0}", nTargetCount);
4112
                        else
4113
                            strSQL.AppendFormat(" Where A1.ConstructionYear = {0}", nTargetCount);
4114

    
4115
                        strSQL.Append("       And A1.SalesDepCode != 0");
4116

    
4117
                        strSQL.Append(" Union Select");
4118
                        strSQL.Append(" A2.ConstrDepCode As DEPARTMENTCODE");
4119
                        strSQL.Append(", A2.ConstructionPersonCode As PERSONCODE");
4120
                        strSQL.Append(", B2.DetailString As DEPARTMENTSTRING");
4121
                        strSQL.Append(", ifnull(C2.DisplayOrder, 10) As DISPLAYORDER");
4122
                        strSQL.Append(" From Constructionbaseinfo As A2");
4123
                        strSQL.Append(" Inner Join constructionbaseinfodetail As B2");
4124
                        strSQL.Append("       On B2.ConstructionCode = A2.ConstructionCode");
4125
                        strSQL.AppendFormat(" And B2.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.ConstrDepartmentName);
4126
                        strSQL.Append(" Left Join departmentmaster As C2");
4127
                        strSQL.Append("      On C2.DepartmentCode = A2.ConstrDepCode");
4128

    
4129
                        if (CommonMotions.BasePeriodYear())
4130
                            strSQL.AppendFormat(" Where A2.ConstructionPeriod = {0}", nTargetCount);
4131
                        else
4132
                            strSQL.AppendFormat(" Where A2.ConstructionYear = {0}", nTargetCount);
4133

    
4134
                        strSQL.Append("       And A2.ConstrDepCode != 0");
4135

    
4136
                        strSQL.Append(" Union Select");
4137
                        strSQL.Append(" A3.ConstrSubDepCode As DEPARTMENTCODE");
4138
                        strSQL.Append(", A3.ConstrSubPersonCode As PERSONCODE");
4139
                        strSQL.Append(", B3.DetailString As DEPARTMENTSTRING");
4140
                        strSQL.Append(", ifnull(C3.DisplayOrder, 10) As DISPLAYORDER");
4141
                        strSQL.Append(" From Constructionbaseinfo As A3");
4142
                        strSQL.Append(" Inner Join constructionbaseinfodetail As B3");
4143
                        strSQL.Append("       On B3.ConstructionCode = A3.ConstructionCode");
4144
                        strSQL.AppendFormat(" And B3.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.ConstrSubDepartmentName);
4145
                        strSQL.Append(" Left Join departmentmaster As C3");
4146
                        strSQL.Append("      On C3.DepartmentCode = A3.ConstrSubDepCode");
4147

    
4148
                        if (CommonMotions.BasePeriodYear())
4149
                            strSQL.AppendFormat(" Where A3.ConstructionPeriod = {0}", nTargetCount);
4150
                        else
4151
                            strSQL.AppendFormat(" Where A3.ConstructionYear = {0}", nTargetCount);
4152

    
4153
                        strSQL.Append("       And A3.ConstrSubDepCode != 0");
4154

    
4155
                        strSQL.Append(" Union Select");
4156
                        strSQL.Append(" A4.ConstrInstrDepCode As DEPARTMENTCODE");
4157
                        strSQL.Append(", A4.ConstructionInstructor As PERSONCODE");
4158
                        strSQL.Append(", B4.DetailString As DEPARTMENTSTRING");
4159
                        strSQL.Append(", ifnull(C4.DisplayOrder, 10) As DISPLAYORDER");
4160
                        strSQL.Append(" From Constructionbaseinfo As A4");
4161
                        strSQL.Append(" Inner Join constructionbaseinfodetail As B4");
4162
                        strSQL.Append("       On B4.ConstructionCode = A4.ConstructionCode");
4163
                        strSQL.AppendFormat(" And B4.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.InstrDepartmentName);
4164
                        strSQL.Append(" Left Join departmentmaster As C4");
4165
                        strSQL.Append("      On C4.DepartmentCode = A4.ConstrInstrDepCode");
4166

    
4167
                        if (CommonMotions.BasePeriodYear())
4168
                            strSQL.AppendFormat(" Where A4.ConstructionPeriod = {0}", nTargetCount);
4169
                        else
4170
                            strSQL.AppendFormat(" Where A4.ConstructionYear = {0}", nTargetCount);
4171

    
4172
                        strSQL.Append("       And A4.ConstrInstrDepCode != 0");
4173

    
4174
                        strSQL.Append(" Union Select");
4175
                        strSQL.Append(" A5.SalesSubDepCode As DEPARTMENTCODE");
4176
                        strSQL.Append(", A5.SalesSubPersonCode As PERSONCODE");
4177
                        strSQL.Append(", B5.DetailString As DEPARTMENTSTRING");
4178
                        strSQL.Append(", ifnull(C5.DisplayOrder, 10) As DISPLAYORDER");
4179
                        strSQL.Append(" From Constructionbaseinfo As A5");
4180
                        strSQL.Append(" Inner Join constructionbaseinfodetail As B5");
4181
                        strSQL.Append("       On B5.ConstructionCode = A5.ConstructionCode");
4182
                        strSQL.AppendFormat(" And B5.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.SalesSubDepartmentName);
4183
                        strSQL.Append(" Left Join departmentmaster As C5");
4184
                        strSQL.Append("      On C5.DepartmentCode = A5.SalesSubDepCode");
4185

    
4186
                        if (CommonMotions.BasePeriodYear())
4187
                            strSQL.AppendFormat(" Where A5.ConstructionPeriod = {0}", nTargetCount);
4188
                        else
4189
                            strSQL.AppendFormat(" Where A5.ConstructionYear = {0}", nTargetCount);
4190

    
4191
                        strSQL.Append("       And A5.ConstrInstrDepCode != 0");
4192

    
4193
                        strSQL.Append(") As D On D.DEPARTMENTCODE = AA.DepartmentCode");
4194
                    }
4195
                }
4196

    
4197
                if (bNowSeason && bCompBase)
4198
                {   // 対象が今期の場合で工事情報の登録を確認する時
4199
                    strSQL.Append(" Inner Join CONSTRUCTIONBASEINFO C");
4200
                    strSQL.Append("       On C.ConstrDepCode = A.DepartmentCode");
4201
                }
4202

    
4203
                strSQL.Append(" WHERE");
4204
                strSQL.AppendFormat(" AA.PersonCode = {0}", CommonMotions.LoginUserData.PersonCode);
4205

    
4206
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(nTargetCount, true);
4207
                DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(nTargetCount, false);
4208

    
4209
                if (bNowSeason)
4210
                {
4211
                    // 対象が今期の場合
4212
                    // 開始日が今日より小さい
4213
                    strSQL.AppendFormat(" And DATE(A.StartDate) <= DATE('{0}')", DateTime.Today.ToShortDateString());
4214

    
4215
                    // システム管理者以外は部署参照マスタよりデータ取得
4216
                    if (CommonMotions.LoginUserData.PersonCode != CommonDefine.AdminCode)
4217
                    {
4218
                        // 参照部署マスタより取得する
4219
                        strSQL.Append(" And A.DEPARTMENTCODE");
4220
                        strSQL.Append(" IN (SELECT A1.DEPARTMENTCODE FROM PERSONDEPARTMENTMASTER A1");
4221
                        strSQL.AppendFormat(" WHERE A1.PERSONCODE = {0})", CommonMotions.LoginUserData.PersonCode);
4222
                    }
4223
                }
4224
                else
4225
                {
4226
                    strSQL.AppendFormat(" AND DATE('{0}') <= DATE(AB.CompDate)", dtDefaultEnd.ToShortDateString());
4227
                }
4228

    
4229
                strSQL.Append(" And");
4230

    
4231
                if (bNowSeason)
4232
                    strSQL.Append(" (");
4233

    
4234
                strSQL.Append(" Exists (SELECT * FROM constructionbaseinfo AS BX");
4235

    
4236
                if (CommonMotions.BasePeriodYear())
4237
                    strSQL.AppendFormat(" Where BX.ConstructionPeriod = {0}", nTargetCount);
4238
                else
4239
                    strSQL.AppendFormat(" Where BX.ConstructionYear = {0}", nTargetCount);
4240

    
4241
                strSQL.Append("                 AND (BX.SalesDepCode = AA.DepartmentCode");
4242
                strSQL.Append("                 Or BX.SalesSubDepCode = AA.DepartmentCode");
4243
                strSQL.Append("                 Or BX.ConstrDepCode = AA.DepartmentCode");
4244
                strSQL.Append("                 Or BX.ConstrSubDepCode = AA.DepartmentCode");
4245
                strSQL.Append("                 Or BX.ConstrInstrDepCode = AA.DepartmentCode))");
4246

    
4247
                if (bNowSeason)
4248
                {
4249
                    strSQL.Append(" Or Exists (SELECT * FROM PERSONINCHARGEMASTER AS B");
4250
                    strSQL.Append("                           WHERE B.DepartmentCode = AA.DepartmentCode");
4251
                    // 台帳計算対象のみ
4252
                    if (!bLedgerDivNo) strSQL.AppendFormat("  And B.LedgerFlg = {0}", (int)PersonInChargeMaster.LedgerDivNoDef.CalcTarget);
4253
                    // 今期は削除されていないもののみ
4254
                    strSQL.AppendFormat("                     And B.DeleteFlg = {0}))", (int)CommonDefine.DataDeleteDef.Exists);
4255
                }
4256

    
4257
                strSQL.Append(" GROUP BY A.DEPARTMENTCODE, A.DEPARTMENTSTRING, A.DISPLAYORDER");
4258
                strSQL.Append(" ORDER BY A.DISPLAYORDER ASC");
4259
            }
4260
            catch (Exception ex)
4261
            {
4262
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4263
            }
4264
        }
4265
        #endregion
4266

    
4267
        #region 担当者コンボボックスデータ取得SQL作成
4268
        /// <summary>
4269
        /// 担当者コンボボックスデータ取得SQL作成
4270
        /// </summary>
4271
        /// <param name="strSQL"></param>
4272
        /// <param name="nTargetYear"></param>
4273
        public static void CreateManCombBoxSQL(ref StringBuilder strSQL
4274
                                                , int nTargetYear
4275
                                                , int nDepCode = 0
4276
                                                , int nPersonCode = 0
4277
                                                , bool bNewDataFlg = false
4278
                                                , bool bLedgerDivNo = false
4279
                                                , bool bConstrBase = true)
4280
        {
4281
            try
4282
            {
4283
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(nTargetYear, true);
4284
                DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(nTargetYear, false);
4285

    
4286
                strSQL.Append("Select   ");
4287
                strSQL.AppendFormat(" {0}", IOMPersonInCharge.CreateFieldNameList("A."));
4288
                strSQL.Append(" From personinchargemaster As A");
4289
                strSQL.Append("      Left Join chgchargedep As B");
4290
                strSQL.Append("           On B.PersonCode = A.PersonCode");
4291

    
4292
                strSQL.Append(" WHERE");
4293
                strSQL.AppendFormat("     ((DATE(A.STARTDATE) <= DATE('{0}'))", dtDefaultEnd.ToShortDateString());
4294
                strSQL.AppendFormat("  AND (DATE('{0}') <= DATE(A.ENDDATE)", dtDefaultStart.ToShortDateString());
4295
                strSQL.AppendFormat("  OR   DATE('{0}') = DATE(A.ENDDATE)))", DateTime.MinValue.ToShortDateString());
4296

    
4297
                strSQL.AppendFormat(" AND ((DATE(B.STARTDATE) <= DATE('{0}'))", dtDefaultEnd.ToShortDateString());
4298
                strSQL.AppendFormat("  AND (DATE('{0}') <= DATE(B.CompDate)", dtDefaultStart.ToShortDateString());
4299
                strSQL.AppendFormat("  OR   DATE('{0}') = DATE(B.CompDate)))", DateTime.MinValue.ToShortDateString());
4300

    
4301
                if ((nDepCode > 0 && nPersonCode > 0) && nPersonCode != CommonDefine.AdminCode)
4302
                {
4303
                    if (CheckNowSeason(nTargetYear))
4304
                    {
4305
                        strSQL.Append(" And (A.DepartmentCode in (Select C.DepartmentCode From persondepartmentmaster As C");
4306
                        strSQL.AppendFormat(" Where C.PersonCode = {0})", nPersonCode);
4307
                        strSQL.AppendFormat(" Or A.DepartmentCode = {0})", nDepCode);
4308
                    }
4309
                    else
4310
                    {
4311
                        strSQL.Append(" And A.DepartmentCode in (Select C.DepartmentCode From persondepartmentmaster As C");
4312
                        strSQL.AppendFormat(" Where C.PersonCode = {0})", nPersonCode);
4313
                    }
4314
                }
4315

    
4316
                // 新規のデータは削除者を表示しない
4317
                if (bNewDataFlg)
4318
                {
4319
                    strSQL.AppendFormat(" And A.DELETEFLG = {0}", (int)CommonDefine.DataDeleteDef.Exists);
4320
                }
4321
                // 開始日が今日より小さい
4322
                strSQL.AppendFormat(" And DATE(A.StartDate) <= DATE('{0}')", DateTime.Today.ToShortDateString());
4323

    
4324
                if (nDepCode > 0) strSQL.AppendFormat(" AND (B.DEPARTMENTCODE = {0})", nDepCode);
4325

    
4326
                // 台帳計算対象外
4327
                if (bLedgerDivNo)
4328
                {
4329
                    strSQL.AppendFormat(" And A.LedgerFlg = {0}", (int)PersonInChargeMaster.LedgerDivNoDef.CalcTarget);
4330
                }
4331

    
4332
                // 今期のデータかどうかを判定する
4333
                string FieldName = string.Empty;
4334
                if (CommonMotions.BasePeriodYear())
4335
                    FieldName = "ConstructionPeriod";
4336
                else
4337
                    FieldName = "ConstructionYear";
4338
                if (bConstrBase)
4339
                {
4340
                    if (CheckNowSeason(nTargetYear))
4341
                    {
4342
                    }
4343
                    else
4344
                    {
4345
                        strSQL.Append(" AND B.DepartmentCode IN(SELECT InDep.DEPARTMENTCODE FROM (");
4346
                        strSQL.Append(" Select A1.SalesDepCode As DEPARTMENTCODE From Constructionbaseinfo As A1");
4347
                        strSQL.AppendFormat(" Where A1.{0} = {1}", FieldName, nTargetYear);
4348
                        strSQL.Append(" Union Select A2.ConstrDepCode As DEPARTMENTCODE From Constructionbaseinfo As A2");
4349
                        strSQL.AppendFormat(" Where A2.{0} = {1}", FieldName, nTargetYear);
4350
                        strSQL.Append(" Union Select A3.ConstrSubDepCode As DEPARTMENTCODE From Constructionbaseinfo As A3");
4351
                        strSQL.AppendFormat(" Where A3.{0} = {1}", FieldName, nTargetYear);
4352
                        strSQL.Append(" Union Select A4.ConstrInstrDepCode As DEPARTMENTCODE From Constructionbaseinfo As A4");
4353
                        strSQL.AppendFormat(" Where A4.{0} = {1}", FieldName, nTargetYear);
4354
                        strSQL.Append(" ) As InDep");
4355
                        strSQL.Append(" GROUP BY InDep.DEPARTMENTCODE) ");
4356
                    }
4357
                }
4358
                strSQL.Append(" Group By A.PersonCode");
4359
                strSQL.Append(" Order By A.DeleteFlg ASC, A.EmployeeClassFlg ASC, A.DisplayOrder ASC");
4360
            }
4361
            catch (Exception ex)
4362
            {
4363
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4364
            }
4365
        }
4366
        #endregion
4367

    
4368
        #region 担当者より指定年度の所属情報を取得するSQL作成
4369
        /// <summary>
4370
        /// 担当者より指定年度の所属情報を取得するSQL作成
4371
        /// </summary>
4372
        public static void CreateMan2DepInfoSQL(ref StringBuilder strSQL, int nTargetYear, int nPersonCode, DateTime dtPettion)
4373
        {
4374
            try
4375
            {
4376
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(nTargetYear, true);
4377
                DateTime dtDefaultEnd = DateTime.Today.Date;
4378
                if (!CheckNowSeason(nTargetYear))
4379
                    dtDefaultEnd = CommonMotions.GetOpeningEndDate(nTargetYear, false);
4380

    
4381
                strSQL.Append("Select");
4382
                strSQL.Append(" A.PersonCode");
4383
                strSQL.Append(", A.PersonName");
4384
                strSQL.Append(", B.DepartmentCode");
4385
                strSQL.Append(", B.DepartmentName");
4386
                strSQL.Append(" From personinchargemaster As A");
4387
                strSQL.Append("      Left Join chgchargedep As B");
4388
                strSQL.Append("           On B.PersonCode = A.PersonCode");
4389

    
4390
                strSQL.Append(" WHERE");
4391
                strSQL.AppendFormat(" ((DATE(A.STARTDATE) <= DATE('{0}'))", dtDefaultEnd.ToShortDateString());
4392
                strSQL.AppendFormat(" AND (DATE('{0}') <= DATE(A.ENDDATE)", dtDefaultStart.ToShortDateString());
4393
                strSQL.AppendFormat(" OR DATE('{0}') = DATE(A.ENDDATE)))", DateTime.MinValue.ToShortDateString());
4394

    
4395
                if (dtPettion.Date == DateTime.MinValue.Date) dtPettion = dtDefaultEnd;
4396
                strSQL.AppendFormat(" AND ((DATE(B.STARTDATE) <= DATE('{0}'))", dtPettion.ToShortDateString());
4397
                strSQL.AppendFormat(" AND(DATE('{0}') <= DATE(B.CompDate)", dtPettion.ToShortDateString());
4398
                strSQL.AppendFormat(" OR DATE('{0}') = DATE(B.CompDate)))", DateTime.MaxValue.ToShortDateString());
4399

    
4400
                strSQL.AppendFormat(" AND A.PersonCode = {0}", nPersonCode);
4401
                strSQL.Append(" Order By B.CompDate desc");
4402
            }
4403
            catch (Exception ex)
4404
            {
4405
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4406
            }
4407
        }
4408
        #endregion
4409

    
4410
        #region 担当者コードより指定年度の所属部署コードのみを取得するSQL作成
4411
        /// <summary>
4412
        /// 担当者コードより指定年度の所属部署コードのみを取得するSQL作成
4413
        /// </summary>
4414
        public static void CreateMan2DepSQL(ref StringBuilder strSQL, int nTargetYear, int nPersonCode)
4415
        {
4416
            try
4417
            {
4418
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(nTargetYear, true);
4419
                DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(nTargetYear, false);
4420

    
4421
                strSQL.Append("Select B.DepartmentCode From personinchargemaster As A");
4422
                strSQL.Append("                Inner Join chgchargedep As B");
4423
                strSQL.Append("                      On B.PersonCode = A.PersonCode");
4424
                strSQL.AppendFormat("     Where A.PersonCode = {0}", nPersonCode);
4425
                strSQL.AppendFormat("     AND ((DATE(B.STARTDATE) <= DATE('{0}'))", dtDefaultEnd.ToShortDateString());
4426
                strSQL.AppendFormat("     AND (DATE('{0}') <= DATE(B.CompDate)", dtDefaultStart.ToShortDateString());
4427
                strSQL.AppendFormat("     OR DATE('{0}') = DATE(B.CompDate)))", DateTime.MinValue.ToShortDateString());
4428
            }
4429
            catch (Exception ex)
4430
            {
4431
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4432
            }
4433
        }
4434
        #endregion
4435

    
4436
        #region 経費率データ読込み並び
4437
        /// <summary>
4438
        /// 経費率データ読込み並び
4439
        /// </summary>
4440
        public enum ExpensesArray
4441
        {
4442
            /// <summary>
4443
            /// 0:経費名称
4444
            /// </summary>
4445
            ExpensesName = 0,
4446
            /// <summary>
4447
            /// 1:経費率
4448
            /// </summary>
4449
            ExpensesRaito,
4450
            /// <summary>
4451
            /// 2:経費名称コード
4452
            /// </summary>
4453
            NameCode,
4454
            /// <summary>
4455
            /// 3:部署コード
4456
            /// </summary>
4457
            DepCode,
4458
            /// <summary>
4459
            /// 4:削除フラグ(部署経費マスタ)
4460
            /// </summary>
4461
            DeleteFlg,
4462
        }
4463
        #endregion
4464

    
4465
        #region 経費率リスト取得処理
4466
        /// <summary>
4467
        /// 経費率リストを取得する
4468
        /// </summary>
4469
        /// <returns></returns>
4470
        public static bool GetExpensesList(int Preiod, int DepartmentCode, ref ArrayList ExpensesList, bool bNotZero = true)
4471
        {
4472
            IOMDepartmentExpenses expDB = new IOMDepartmentExpenses();
4473
            try
4474
            {
4475
                // 部署経費率マスタ取得
4476
                StringBuilder strSQL = new StringBuilder();
4477
                if (CheckNowSeason(Preiod))
4478
                {   // 今期データ
4479
                    strSQL.Append("SELECT");
4480
                    strSQL.Append(" A.NAMESTRING");
4481
                    strSQL.Append(", IFNULL(B.EXPENSESRAITO, 0)");
4482
                    strSQL.Append(", A.NAMECODE");
4483
                    strSQL.Append(", B.DEPARTMENTCODE");
4484
                    strSQL.Append(", A.DeleteFlg");
4485
                    strSQL.Append(" FROM DIVISIONMASTER AS A");
4486

    
4487
                    strSQL.Append(" LEFT JOIN (SELECT");
4488
                    strSQL.Append("                BB.NAMECODE");
4489
                    strSQL.Append("              , BB.DEPARTMENTCODE");
4490
                    strSQL.Append("              , BB.EXPENSESRAITO");
4491
                    strSQL.Append("              , BB.EXPENSESPERIOD");
4492
                    strSQL.Append("              , BB.DisplayOrder");
4493
                    strSQL.Append("            FROM DEPARTMENTEXPENSESMASTER AS BB) AS B");
4494
                    strSQL.Append("      ON A.NAMECODE = B.NAMECODE");
4495
                    strSQL.AppendFormat(" AND B.EXPENSESPERIOD = {0}", Preiod);
4496
                    if (DepartmentCode > 0) strSQL.AppendFormat(" AND B.DEPARTMENTCODE = {0}", DepartmentCode);
4497

    
4498
                    strSQL.Append(" LEFT JOIN departmentmaster AS C");
4499
                    strSQL.Append("      On C.DepartmentCode = B.DEPARTMENTCODE");
4500

    
4501
                    strSQL.Append(" WHERE");
4502
                    strSQL.AppendFormat(" A.DIVISIONCODE = {0}", (int)DivisionMaster.DivisionMasterCodeDef.ConstructionExpenses);
4503
                    strSQL.AppendFormat(" AND A.DeleteFlg = {0}", (int)CommonDefine.DataDeleteDef.Exists);
4504
                    if(bNotZero) strSQL.Append(" And B.EXPENSESRAITO > 0.00");
4505

    
4506
                    strSQL.Append(" ORDER BY A.DISPLAYORDER, C.DISPLAYORDER");
4507
                }
4508
                else
4509
                {   // 以前のデータ
4510
                    strSQL.Append("SELECT");
4511
                    strSQL.Append(" B.NAMESTRING");
4512
                    strSQL.Append(", B.EXPENSESRAITO");
4513
                    strSQL.Append(", B.NAMECODE");
4514
                    strSQL.Append(", B.DEPARTMENTCODE");
4515
                    strSQL.Append(", B.DeleteFlg");
4516
                    strSQL.Append(" FROM DEPARTMENTEXPENSESMASTER AS B");
4517

    
4518
                    strSQL.Append(" INNER JOIN departmentmaster AS C");
4519
                    strSQL.Append("        On C.DepartmentCode = B.DEPARTMENTCODE");
4520

    
4521
                    strSQL.Append(" INNER JOIN divisionmaster AS D");
4522
                    strSQL.AppendFormat("  ON D.DIVISIONCODE = {0}", (int)DivisionMaster.DivisionMasterCodeDef.ConstructionExpenses);
4523
                    strSQL.Append("        And D.NameCode = B.NameCode");
4524

    
4525
                    strSQL.Append(" WHERE");
4526
                    strSQL.AppendFormat(" B.EXPENSESPERIOD = {0}", Preiod);
4527
                    if (DepartmentCode > 0) strSQL.AppendFormat(" AND B.DEPARTMENTCODE = {0}", DepartmentCode);
4528
                    if (bNotZero) strSQL.Append(" And B.EXPENSESRAITO > 0.00");
4529

    
4530
                    strSQL.Append(" ORDER BY D.DeleteFlg, C.DISPLAYORDER, B.DISPLAYORDER");
4531
                }
4532

    
4533
                ExpensesList.Clear();
4534
                if (!expDB.ExecuteReader(strSQL.ToString(), ref ExpensesList)) return false;
4535
                if (ExpensesList.Count == 0) return false;
4536

    
4537
                return true;
4538
            }
4539
            catch (Exception ex)
4540
            {
4541
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4542
                return false;
4543
            }
4544
            finally
4545
            {
4546
                expDB.close(); expDB = null;
4547
            }
4548
        }
4549
        #endregion
4550

    
4551
        #region ベースコントロールコレクションよりボタン取得
4552
        /// <summary>
4553
        /// ベースコントロールコレクションよりボタン取得
4554
        /// </summary>
4555
        public static Button GetButtton2Collection(Control.ControlCollection BasePnl, string ButtonName)
4556
        {
4557
            Button buttonRet = null;
4558
            try
4559
            {
4560
                foreach (Control CurCtrl in BasePnl)
4561
                {
4562
                    // 申請ボタン取得
4563
                    if (CurCtrl.Name.Equals(ButtonName))
4564
                    {
4565
                        buttonRet = (Button)CurCtrl;
4566
                        break;
4567
                    }
4568
                }
4569
                return buttonRet;
4570
            }
4571
            catch (Exception ex)
4572
            {
4573
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4574
                return buttonRet;
4575
            }
4576
        }
4577
        #endregion
4578

    
4579
        #region 申請パネルより承認数ラベル取得
4580
        /// <summary>
4581
        /// 申請パネルより承認数ラベル取得
4582
        /// </summary>
4583
        public static Label GetLabel2Collection(Control.ControlCollection BasePnl, string LabelName)
4584
        {
4585
            Label LabelRet = null;
4586
            try
4587
            {
4588
                foreach (Control CurCtrl in BasePnl)
4589
                {
4590
                    // 申請ボタン取得
4591
                    if (CurCtrl.Name.Equals(LabelName))
4592
                    {
4593
                        LabelRet = (Label)CurCtrl;
4594
                        break;
4595
                    }
4596
                }
4597
                return LabelRet;
4598
            }
4599
            catch (Exception ex)
4600
            {
4601
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4602
                return LabelRet;
4603
            }
4604
        }
4605
        #endregion
4606

    
4607
        #region 現在適応消費税を取得する
4608
        /// <summary>
4609
        /// 現在適応消費税を取得する
4610
        /// </summary>
4611
        /// <returns></returns>
4612
        public static double AdaptationConsumptionTax()
4613
        {
4614
            double dRet = CommonMotions.SystemMasterData.ConsumptionTax;
4615
            try
4616
            {
4617
                // 実装途中
4618

    
4619
                return dRet;
4620
            }
4621
            catch (Exception ex)
4622
            {
4623
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4624
                return dRet;
4625
            }
4626
        }
4627
        /// <summary>
4628
        /// 数値のYMDより期間に対応する消費税を取得する
4629
        /// </summary>
4630
        /// <returns></returns>
4631
        public static double AdaptationConsumptionTax(int nYMD)
4632
        {
4633
            double dRet = CommonMotions.SystemMasterData.ConsumptionTax;
4634
            try
4635
            {
4636
                if (nYMD < 1) return dRet;
4637

    
4638
                int nYear = cnvTruncate(nYMD / 10000);
4639
                int nMonth = cnvTruncate((nYMD - (nYear * 10000)) / 100);
4640
                int nDay = nYMD - ((nYear * 10000) + (nMonth * 100));
4641
                DateTime dateTime = new DateTime(nYear, nMonth, nDay);
4642

    
4643
                ConsumptionTax taxes = m_ConsumptionTax.Where(x => (x.StartDate.Date <= dateTime.Date)
4644
                                                                    && (dateTime.Date <= x.ComplateDate.Date))
4645
                                                        .First();
4646

    
4647
                if (taxes != null) dRet = (double)taxes.TaxRate;
4648

    
4649
                return dRet;
4650
            }
4651
            catch (Exception ex)
4652
            {
4653
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4654
                return dRet;
4655
            }
4656
        }
4657
        /// <summary>
4658
        /// 年月日より期間に対応する消費税を取得する
4659
        /// </summary>
4660
        /// <returns></returns>
4661
        public static double AdaptationConsumptionTax(DateTime dtYMD)
4662
        {
4663
            double dRet = CommonMotions.SystemMasterData.ConsumptionTax;
4664
            try
4665
            {
4666
                if (dtYMD == DateTime.MaxValue || dtYMD == DateTime.MinValue) return dRet;
4667

    
4668
                ConsumptionTax taxes = m_ConsumptionTax.Where(x => (x.StartDate.Date <= dtYMD.Date)
4669
                                                                    && (dtYMD.Date <= x.ComplateDate.Date))
4670
                                                        .First();
4671

    
4672
                if (taxes != null) dRet = (double)taxes.TaxRate;
4673

    
4674
                return dRet;
4675
            }
4676
            catch (Exception ex)
4677
            {
4678
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4679
                return dRet;
4680
            }
4681
        }
4682
        #endregion
4683

    
4684
        #region 担当者のデータにログイン者がアクセスできるかのチェック
4685
        /// <summary>
4686
        /// 担当者のデータにログイン者がアクセスできるかのチェック
4687
        /// </summary>
4688
        public static bool DataPermission(int ManNo)
4689
        {
4690
            IOMPersonInCharge ManDB = new IOMPersonInCharge();
4691
            try
4692
            {
4693
                // 自分自身はOK
4694
                if (CommonMotions.LoginUserData.PersonCode == ManNo) return true;
4695

    
4696
                // 一般者権限では自分以外のデータにアクセスできない
4697
                int Rank = CommonDefine.SecurityRankList[(int)CommonDefine.SecurityRankPos.NormalAuthority].Key;
4698
                if (Rank == CommonMotions.LoginUserSecurity.SecRank) return false;
4699

    
4700
                // 対象者の担当者データを取得する
4701
                PersonInChargeMaster ManRec = new PersonInChargeMaster();
4702
                if (!ManDB.SelectAction(ManDB.CreatePrimarykeyString(ManNo), ref ManRec)) return false;
4703

    
4704
                // 参照部署のチェック
4705
                bool bRet = false;
4706
                foreach (PersonDepartmentMaster CurRec in m_LoginUserRefDepartment)
4707
                {
4708
                    if (CurRec.DepartmentCode == ManRec.DepartmentCode)
4709
                    {
4710
                        bRet = true;
4711
                        break;
4712
                    }
4713
                }
4714

    
4715
                return bRet;
4716
            }
4717
            catch (Exception ex)
4718
            {
4719
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4720
                return false;
4721
            }
4722
            finally
4723
            {
4724
                ManDB.close(); ManDB = null;
4725
            }
4726
        }
4727
        #endregion
4728

    
4729
        #region 営業日だけのn日前の日付を取る
4730
        /// <summary>
4731
        /// 営業日だけのn日前の日付を取る
4732
        /// </summary>
4733
        public static DateTime GetPrevBusinessDate(DateTime WorktDate, int nCount, int PersonCode)
4734
        {
4735
            IOAllFreeSQL FreeDB = new IOAllFreeSQL();
4736
            try
4737
            {
4738
                StringBuilder strSQL = new StringBuilder();
4739
                strSQL.Append("SELECT t1.d");
4740
                strSQL.Append("     , DATE_FORMAT(C.HOLIDAY, '%Y/%m/%d') HOLIDAY");
4741
                strSQL.Append("     , WEEKDAY(t1.d)");
4742
                strSQL.Append(" FROM");
4743
                strSQL.Append("     (SELECT A1.years, A2.month, A3.days");
4744
                strSQL.Append("           , CAST(CONCAT(A1.years, '/', A2.month, '/', A3.days) as DATE) as d");
4745
                strSQL.Append("      FROM yearmaster as A1");
4746
                strSQL.Append("          , monthmaster as A2");
4747
                strSQL.Append("          , daymaster as A3");
4748
                strSQL.Append("      Where CAST(CONCAT(A1.years, '/', A2.month, '/', A3.days) as DATE) IS NOT NULL) as t1");
4749
                strSQL.Append("      LEFT JOIN HOLIDAYCALENDERMASTER C ON C.HOLIDAY = t1.d");
4750
                strSQL.Append(" Where");
4751
                DateTime dtTarget = new DateTime(WorktDate.Year, WorktDate.Month, 1);
4752
                strSQL.AppendFormat(" (DATE('{0}') <= DATE(t1.d)", dtTarget.ToShortDateString());
4753
                strSQL.AppendFormat("  AND DATE(t1.d) <= DATE('{0}'))", DateTime.Today.ToShortDateString());
4754
                strSQL.Append(" ORDER BY t1.d Desc");
4755

    
4756
                ArrayList arList = new ArrayList();
4757
                FreeDB.ExecuteReader(strSQL.ToString(), ref arList);
4758

    
4759
                // 担当者コードより勤務シフトの月曜日を0として読み込む
4760
                strSQL.Clear();
4761
                strSQL.Append("Select");
4762
                strSQL.Append(" B.MonValue");
4763
                strSQL.Append(", B.TueValue");
4764
                strSQL.Append(", B.WedValue");
4765
                strSQL.Append(", B.ThuValue");
4766
                strSQL.Append(", B.FriValue");
4767
                strSQL.Append(", B.SatValue");
4768
                strSQL.Append(", B.SunValue");
4769
                strSQL.Append(", A.PersonCode");
4770
                strSQL.Append(", A.PersonName");
4771
                strSQL.Append(", A.EndDate");
4772
                strSQL.Append(" From personinchargemaster As A");
4773
                strSQL.Append(" Inner Join workingtime As B");
4774
                strSQL.Append("       On B.WorkingCode = A.WorkingCode");
4775
                strSQL.Append(" Where");
4776
                strSQL.AppendFormat(" A.Personcode = {0}", PersonCode);
4777

    
4778
                ArrayList WeekList = new ArrayList();
4779
                FreeDB.ExecuteReader(strSQL.ToString(), ref WeekList);
4780

    
4781
                object[] objWeek = null;
4782
                DateTime dtEnd = DateTime.Today;
4783
                if (WeekList.Count > 0)
4784
                {
4785
                    objWeek = (object[])WeekList[0];
4786
                    // 退職日が無い場合は日付をMAXにする
4787
                    dtEnd = CommonMotions.cnvDate(objWeek[9]).Date == DateTime.MinValue.Date
4788
                                                                            ? DateTime.MaxValue.Date
4789
                                                                            : CommonMotions.cnvDate(objWeek[9]).Date;
4790
                }
4791

    
4792
                DateTime dtRet = DateTime.MinValue;
4793
                int nPrevCount = 0;
4794
                foreach (object[] objCalender in arList)
4795
                {
4796
                    // まず今日を探す
4797
                    DateTime dtwork = CommonMotions.cnvDate(objCalender[0]);
4798
                    if (DateTime.Today.Date < dtwork.Date) continue;
4799

    
4800
                    // 休日は除外する
4801
                    DateTime dtholiday = CommonMotions.cnvDate(objCalender[1]);
4802
                    if (DateTime.MinValue.Date != dtholiday.Date) continue;
4803

    
4804
                    // 担当者コードがある場合は勤務シフトの比較を行う
4805
                    if (PersonCode > 0)
4806
                    {
4807
                        int nWeekFlg = CommonMotions.cnvInt(objCalender[2]);
4808
                        int nBreakDayFlg = CommonMotions.cnvInt(objWeek[nWeekFlg]);
4809
                        // 休みの曜日は除外する
4810
                        if (nBreakDayFlg == (int)WorkingTime.DayOfTheWeekDef.BreakDay) continue;
4811

    
4812
                        //退職日以降は除外する
4813
                        if (dtEnd < dtwork.Date) continue;
4814
                    }
4815

    
4816
                    nPrevCount++;
4817
                    if (nCount <= nPrevCount)
4818
                    {
4819
                        dtRet = dtwork;
4820
                        break;
4821
                    }
4822
                }
4823

    
4824
                return dtRet;
4825
            }
4826
            catch (Exception ex)
4827
            {
4828
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4829
                return DateTime.Today;
4830
            }
4831
            finally
4832
            {
4833
                FreeDB.close(); FreeDB = null;
4834
            }
4835
        }
4836
        #endregion
4837

    
4838
        #region 文字列の指定毎位置に改行コードを入れる
4839
        /// <summary>
4840
        /// 文字列の指定毎位置に改行コードを入れる
4841
        /// </summary>
4842
        /// <param name="InpString"></param>
4843
        /// <param name="CutLength"></param>
4844
        /// <returns></returns>
4845
        public static string StringBuiltInReturn(string InpString, int CutLength)
4846
        {
4847
            try
4848
            {
4849
                List<string> textList = new List<string>();
4850
                for (int i = 0; i < InpString.Length; i += CutLength)
4851
                {
4852
                    if ((i + CutLength) < InpString.Length)
4853
                        textList.Add(InpString.Substring(i, CutLength));
4854
                    else
4855
                        textList.Add(InpString.Substring(i));
4856
                }
4857

    
4858
                return string.Join("\r\n", textList.ToArray());
4859
            }
4860
            catch (Exception ex)
4861
            {
4862
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4863
                return string.Empty;
4864
            }
4865
        }
4866
        #endregion
4867

    
4868
        #region 日付から曜日を取得してマスタの休みと比較する
4869
        /// <summary>
4870
        /// 日付から曜日を取得してマスタの休みと比較する
4871
        /// </summary>
4872
        /// <returns></returns>
4873
        public static bool MasterHolidayCheck(DateTime DispDate, WorkingTime WDataRec)
4874
        {
4875
            try
4876
            {
4877
                // 曜日取得
4878
                DayOfWeek dowWork = DispDate.DayOfWeek;
4879

    
4880
                int nBreakDayFlg = -1;
4881
                switch ((int)dowWork)
4882
                {
4883
                    case (int)DayOfWeek.Sunday:
4884
                        nBreakDayFlg = WDataRec.SunValue;
4885
                        break;
4886
                    case (int)DayOfWeek.Monday:
4887
                        nBreakDayFlg = WDataRec.MonValue;
4888
                        break;
4889
                    case (int)DayOfWeek.Tuesday:
4890
                        nBreakDayFlg = WDataRec.TueValue;
4891
                        break;
4892
                    case (int)DayOfWeek.Wednesday:
4893
                        nBreakDayFlg = WDataRec.WedValue;
4894
                        break;
4895
                    case (int)DayOfWeek.Thursday:
4896
                        nBreakDayFlg = WDataRec.ThuValue;
4897
                        break;
4898
                    case (int)DayOfWeek.Friday:
4899
                        nBreakDayFlg = WDataRec.FriValue;
4900
                        break;
4901
                    case (int)DayOfWeek.Saturday:
4902
                        nBreakDayFlg = WDataRec.SatValue;
4903
                        break;
4904
                }
4905
                // 休みかを判定する
4906
                if (nBreakDayFlg == (int)WorkingTime.DayOfTheWeekDef.Normal) return false;
4907

    
4908
                return true;
4909
            }
4910
            catch (Exception ex)
4911
            {
4912
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4913
                return false;
4914
            }
4915
        }
4916
        #endregion
4917

    
4918
        #endregion
4919

    
4920
        #region ---------- Excel向け操作メソッド
4921
        #region オブジェクト開放
4922
        /// <summary>
4923
        /// Com解放
4924
        /// </summary>
4925
        /// <param name="o"></param>
4926
        public static void ReleaseCom(ref Object objCom)
4927
        {
4928
            try
4929
            {
4930
                int i = 1;
4931
                if (objCom != null && System.Runtime.InteropServices.Marshal.IsComObject(objCom))
4932
                {
4933
                    //参照カウントが0より大きい間・・・
4934
                    do
4935
                    {
4936
                        //ランタイム呼び出し可能ラッパーの参照カウントをデクリメント
4937
                        i = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom);
4938
                    } while (i > 0);
4939
                }
4940
            }
4941
            catch (Exception ex)
4942
            {
4943
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
4944
            }
4945
            finally
4946
            {
4947
                objCom = null;
4948
            }
4949
        }
4950

    
4951
        #endregion
4952
        #endregion
4953

    
4954
        #region デバッグ用メソッド
4955
        /// <summary>
4956
        /// デバッグ用メソッド
4957
        /// </summary>
4958
        /// <param name="DebugPrint">表示文字列</param>
4959
        public static void DebugWriteLine_TimeNow(string DebugPrint)
4960
        {
4961
            string wrkPrint = DateTime.Now.ToLongTimeString() +
4962
                                ((double)DateTime.Now.Millisecond / 1000.0000).ToString("#.0000");
4963

    
4964
            Debug.WriteLine(DebugPrint + ":" + wrkPrint);
4965
        }
4966

    
4967
        public static void DebugWriteLine_DateTimeNow(string DebugPrint)
4968
        {
4969
            string wrkPrint = DateTime.Now.ToLongDateString() + " " +
4970
                                DateTime.Now.ToLongTimeString() + "." +
4971
                                DateTime.Now.Millisecond.ToString();
4972

    
4973
            Debug.WriteLine(DebugPrint + ":" + wrkPrint);
4974
        }
4975
        #endregion
4976
    }
4977
}