プロジェクト

全般

プロフィール

統計
| リビジョン:

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

履歴 | 表示 | アノテート | ダウンロード (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, 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
        #endregion
1077

    
1078
        #region ---------- データチェックメソッド
1079
        #region ディレクトリの存在チェック
1080
        /// <summary>
1081
        /// ディレクトリの存在チェック
1082
        /// </summary>
1083
        /// <param name="DirectryName">フォルダパス</param>
1084
        /// <returns></returns>
1085
        public static bool ChkDirPath(string DirectryName, bool CreateFlg = false)
1086
        {
1087
            try
1088
            {
1089
                // フォルダ (ディレクトリ) が存在しているかどうか確認する
1090
                if (!Directory.Exists(@DirectryName))
1091
                {
1092
                    // 作成フラグOffならばエラー
1093
                    if (!CreateFlg) return false;
1094

    
1095
                    // ディレクトリを作成する
1096
                    Directory.CreateDirectory(@DirectryName);
1097
                }
1098

    
1099
                return true;
1100
            }
1101
            catch (Exception ex)
1102
            {
1103
                logger.ErrorFormat(ex.Message);
1104
                return false;
1105
            }
1106
        }
1107
        #endregion
1108

    
1109
        #region オブジェクトのNullチェック
1110
        /// <summary>
1111
        /// オブジェクトのNullチェック
1112
        /// </summary>
1113
        /// <param name="sendData">オブジェクト</param>
1114
        /// <returns></returns>
1115
        public static bool chkObjectIsNull(Object sendData)
1116
        {
1117
            try
1118
            {
1119
                if (sendData == null) return true;
1120

    
1121
                return false;
1122
            }
1123
            catch (System.Exception ex)
1124
            {
1125
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1126
                return false;
1127
            }
1128
        }
1129
        #endregion
1130

    
1131
        #region 数値チェック
1132
        /// <summary>
1133
        /// 数値チェック
1134
        /// </summary>
1135
        /// <param name="data">Long文字列</param>
1136
        /// <param name="indispensable">入力必須チェック</param>
1137
        /// <returns>true:正常 false:異常</returns>
1138
        public static bool chkNumeric(object CheckData, bool indispensable = false)
1139
        {
1140
            try
1141
            {
1142
                if (chkObjectIsNull(CheckData)) return false;
1143

    
1144
                string RecvData = cnvString(CheckData);
1145
                double revData = 0;
1146
                // 必須入力チェック
1147
                if (indispensable)
1148
                {
1149
                    if (RecvData.Replace(",", "").Replace("\\", "").Trim().Length == 0) return false;
1150
                }
1151
                // Nullが入っていなくてレングスが0は数値として扱う
1152
                if (RecvData.Replace(",", "").Replace("\\", "").Trim().Length == 0) return true;
1153

    
1154
                return double.TryParse(RecvData.Replace(",", "").Replace("\\", "").Trim(), out revData);
1155
            }
1156
            catch (System.Exception ex)
1157
            {
1158
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1159
                return false;
1160
            }
1161
        }
1162
        #endregion
1163

    
1164
        #region 数値チェック(long)
1165
        /// <summary>
1166
        /// 数値チェック(long)
1167
        /// </summary>
1168
        /// <param name="data">Long文字列</param>
1169
        /// <param name="indispensable">入力必須チェック</param>
1170
        /// <returns>true:正常 false:異常</returns>
1171
        public static bool chkNumeric(object sendData, ref long retData, bool indispensable = false)
1172
        {
1173
            try
1174
            {
1175
                // 必須入力チェック
1176
                if (indispensable)
1177
                {
1178
                    if (cnvString(sendData).Replace(",", "").Replace("\\", "").Trim().Length == 0) return false;
1179
                }
1180

    
1181
                return long.TryParse(cnvString(sendData).Replace(",", "").Replace("\\", "").Trim(), out retData);
1182
            }
1183
            catch (System.Exception ex)
1184
            {
1185
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1186
                return false;
1187
            }
1188
        }
1189
        #endregion
1190

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

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

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

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

    
1245
        #region 時間チェック(TimeSpan)
1246
        /// <summary>
1247
        /// 時間チェック(TimeSpan)
1248
        /// </summary>
1249
        /// <returns>true:正常 false:異常</returns>
1250
        public static bool chkTimeSpan(object sendData, ref TimeSpan retData, bool indispensable = false)
1251
        {
1252
            try
1253
            {
1254
                // 必須入力チェック
1255
                if (indispensable)
1256
                {
1257
                    if (cnvString(sendData).Trim().Length == 0) return false;
1258
                }
1259

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

    
1270
        #region 文字列長さチェック(UTF-8)
1271
        /// <summary>
1272
        /// 文字列長さチェック(UTF-8)
1273
        /// </summary>
1274
        /// <param name="strData">対象文字列</param>
1275
        /// <param name="lngMaxLen">最大長</param>
1276
        /// <param name="indispensable">入力必須チェック</param>
1277
        /// <returns>true:正常 false:異常</returns>
1278
        public static bool chkStringLength(string strData, int lngMaxLen, bool indispensable = false)
1279
        {
1280
            bool bRet = true;
1281
            //int lngLen = 0;
1282
            try
1283
            {
1284

    
1285
                //Encoding sjis = Encoding.GetEncoding("shift-jis");
1286
                Encoding utf8 = Encoding.GetEncoding("utf-8");
1287

    
1288
                // 必須入力チェック
1289
                if (indispensable)
1290
                {
1291
                    if (strData.Length == 0) bRet = false;
1292
                }
1293
                // S-Jisチェック
1294
                //lngLen = sjis.GetByteCount(strData);
1295
                // UTF-8チェック
1296
                //lngLen = utf8.GetByteCount(strData);
1297
                //if (lngLen > lngMaxLen) bRet = false;
1298
                // C#内はUTFなので文字長だけをチェックする
1299
                if (strData.Length > lngMaxLen) bRet = false;
1300
            }
1301
            catch (System.Exception ex)
1302
            {
1303
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
1304
                bRet = false;
1305
            }
1306

    
1307
            return bRet;
1308
        }
1309
        #endregion
1310

    
1311
        #region 郵便番号チェック
1312
        /// <summary>
1313
        /// 郵便番号チェック
1314
        /// </summary>
1315
        /// <param name="strData">郵便番号文字列</param>
1316
        /// <returns>true:正常 false:異常</returns>
1317
        public static bool chkZipcode(string strdata)
1318
        {
1319
            bool bRet = false;
1320

    
1321
            Regex regex = new Regex("^[0-9]{3}[-][0-9]{4}$");
1322
            if (regex.IsMatch(strdata))
1323
            {
1324
                bRet = true;
1325
            }
1326
            return bRet;
1327
        }
1328
        #endregion
1329

    
1330
        #region 電話番号/FAX番号チェック
1331
        /// <summary>
1332
        /// 電話番号/FAX番号チェック
1333
        /// </summary>
1334
        /// <param name="data">電話番号文字列</param>
1335
        /// <returns>true:正常 false:異常</returns>
1336
        public static bool chkPhoneNumber(string strdata)
1337
        {
1338
            bool bRet = false;
1339

    
1340
            Regex regex = new Regex("^[0-9]{2,5}-[0-9]{1,4}-[0-9]{3,4}$");
1341
            if (regex.IsMatch(strdata))
1342
            {
1343
                bRet = true;
1344
            }
1345
            return bRet;
1346
        }
1347
        #endregion
1348

    
1349
        #region メールアドレスチェック
1350
        /// <summary>
1351
        /// メールアドレスチェック
1352
        /// </summary>
1353
        /// <param name="data">電話番号文字列</param>
1354
        /// <returns>true:正常 false:異常</returns>
1355
        public static bool chkMailAddress(string strdata)
1356
        {
1357
            bool bRet = false;
1358

    
1359
            Regex regex = new Regex(@"\A\P{Cc}+@\P{Cc}+\z");
1360
            if (regex.IsMatch(strdata))
1361
            {
1362
                bRet = true;
1363
            }
1364
            return bRet;
1365
        }
1366
        #endregion
1367

    
1368
        #region 日付チェック
1369
        /// <summary>
1370
        /// 日付チェック
1371
        /// </summary>
1372
        /// <param name="data">日付文字列</param>
1373
        /// <returns>true:正常 false:異常</returns>
1374
        public static bool chkDate(string strdata)
1375
        {
1376
            bool bRet = true;
1377
            try
1378
            {
1379
                DateTime dtwork = DateTime.MinValue;
1380

    
1381
                return DateTime.TryParse(strdata, out dtwork);
1382
            }
1383
            catch (System.Exception ex)
1384
            {
1385
                logger.DebugFormat("chkDate Error message:{0}", ex.Message);
1386
                bRet = false;
1387
            }
1388
            return bRet;
1389
        }
1390
        #endregion
1391

    
1392
        #region 対象が空かどうかをチェックする
1393
        /// <summary>
1394
        /// 対象が空かどうかをチェックする
1395
        /// </summary>
1396
        /// <param name="objCell"></param>
1397
        /// <param name="iColumn"></param>
1398
        /// <returns>true:空 flase:有効</returns>
1399
        public static bool chkCellBlank(object objCell)
1400
        {
1401
            try
1402
            {
1403
                if (chkObjectIsNull(objCell)) return true;
1404
                if (objCell.ToString().Length == 0) return true;
1405

    
1406
                return false;
1407
            }
1408
            catch (System.Exception ex)
1409
            {
1410
                logger.DebugFormat("chkDate Error message:{0}", ex.Message);
1411
                return true;
1412
            }
1413
        }
1414
        #endregion
1415

    
1416
        #region 指定文字が全てひらがなのチェック
1417
        /// <summary>
1418
        /// 指定文字が全てひらがなのチェック
1419
        /// </summary>
1420
        /// <param name="str"></param>
1421
        /// <returns></returns>
1422
        public static bool chkIsHiragana(string str)
1423
        {
1424
            return Regex.IsMatch(str, @"^\p{IsHiragana}*$");
1425
        }
1426
        #endregion
1427

    
1428
        #region 指定文字が全てカタカナのチェック
1429
        /// <summary>
1430
        /// 指定文字が全てカタカナのチェック
1431
        /// </summary>
1432
        /// <param name="str"></param>
1433
        /// <returns></returns>
1434
        public static bool chkIsKatakana(string str)
1435
        {
1436
            return Regex.IsMatch(str, @"^\p{IsKatakana}*$");
1437
        }
1438
        #endregion
1439

    
1440
        #region 指定文字が全て数字のチェック
1441
        /// <summary>
1442
        /// 指定文字が全て数字のチェック
1443
        /// </summary>
1444
        /// <param name="str"></param>
1445
        /// <returns></returns>
1446
        public static bool chkIsNumeric(string str)
1447
        {
1448
            return Regex.IsMatch(str, @"[^a-zA-z0-9-_]");
1449
        }
1450
        #endregion
1451

    
1452
        #region 画面フィールド入力必須チェック
1453
        /// <summary>
1454
        /// 画面フィールド入力必須チェック
1455
        /// </summary>
1456
        /// <param name="dispControl">コントロールオブジェクト</param>
1457
        /// <returns>false:エラー true:エラーなし</returns>
1458
        public static bool DispFieldIndispensable(Control dispControl)
1459
        {
1460
            bool bAns = true;
1461
            try
1462
            {
1463
                // 必須入力チェック
1464
                if (chkObjectIsNull(dispControl))
1465
                {
1466
                    bAns = false;
1467
                }
1468
                else
1469
                {
1470
                    if (dispControl.Text.ToString().Length == 0)
1471
                    {
1472
                        bAns = false;
1473
                    }
1474
                }
1475
            }
1476
            catch (Exception ex)
1477
            {
1478
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1479
                bAns = false;
1480
            }
1481
            finally
1482
            {
1483
                // 背景色変更
1484
                chgBackColor(dispControl, bAns);
1485
            }
1486
            return bAns;
1487
        }
1488
        #endregion
1489

    
1490
        #region 画面フィールド入力文字数チェック
1491
        /// <summary>
1492
        /// 画面フィールド入力文字数チェック
1493
        /// </summary>
1494
        /// <param name="dispControl">コントロールオブジェクト</param>
1495
        /// <param name="sLength">文字列長</param>
1496
        /// <param name="indispensable">true:必須入力チェック</param>
1497
        /// <returns>false:エラー true:エラーなし</returns>
1498
        public static bool DispFieldLengthCheck(Control dispControl, int sLength, bool indispensable = false)
1499
        {
1500
            bool bAns = true;
1501
            try
1502
            {
1503
                // 必須入力チェック
1504
                if (indispensable)
1505
                {
1506
                    bAns = DispFieldIndispensable(dispControl);
1507
                }
1508

    
1509
                if (dispControl.Text.ToString().Length != 0)
1510
                {
1511
                    // レングスチェック
1512
                    bAns = chkStringLength(dispControl.Text.ToString(), sLength);
1513
                }
1514
            }
1515
            catch (Exception ex)
1516
            {
1517
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1518
                bAns = false;
1519
            }
1520
            finally
1521
            {
1522
                // 背景色変更
1523
                chgBackColor(dispControl, bAns);
1524
            }
1525
            return bAns;
1526
        }
1527
        #endregion
1528

    
1529
        #region 画面フィールド入力日付チェック
1530
        /// <summary>
1531
        /// 画面フィールド入力日付チェック
1532
        /// </summary>
1533
        /// <param name="dispControl">コントロールオブジェクト</param>
1534
        /// <param name="indispensable">true:必須入力チェック</param>
1535
        /// <returns>false:エラー true:エラーなし</returns>
1536
        public static bool DispFieldDateCheck(Control dispControl, bool indispensable = false)
1537
        {
1538
            bool bAns = true;
1539
            try
1540
            {
1541
                // 必須入力チェック
1542
                if (indispensable)
1543
                {
1544
                    bAns = DispFieldIndispensable(dispControl);
1545
                }
1546

    
1547
                if (dispControl.Text.ToString().Length != 0)
1548
                {
1549
                    // 未定はエラーにしない
1550
                    if (!indispensable && dispControl.Text.Equals(CommonDefine.s_UndecidedString)) { }
1551
                    else
1552
                        // 日付チェック
1553
                        bAns = chkDate(dispControl.Text.ToString());
1554
                }
1555
            }
1556
            catch (Exception ex)
1557
            {
1558
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1559
                bAns = false;
1560
            }
1561
            finally
1562
            {
1563
                // 背景色変更
1564
                chgBackColor(dispControl, bAns);
1565
            }
1566
            return bAns;
1567
        }
1568
        #endregion
1569

    
1570
        #region 画面フィールドコンボボックスチェック
1571
        /// <summary>
1572
        /// 画面フィールド入力コンボボックスチェック
1573
        /// </summary>
1574
        /// <param name="dispControl">コントロールオブジェクト</param>
1575
        /// <param name="indispensable">true:必須入力チェック</param>
1576
        /// <returns>false:エラー true:エラーなし</returns>
1577
        public static bool DispFieldCombCheck(Control dispControl, bool indispensable = false)
1578
        {
1579
            bool bAns = true;
1580
            try
1581
            {
1582
                ComboBox comboBox = (ComboBox)dispControl;
1583
                // 必須入力チェック
1584
                if (indispensable)
1585
                {
1586
                    bAns = DispFieldIndispensable(dispControl);
1587
                    // 必須時未定はエラー
1588
                    if (dispControl.Text.Equals(CommonDefine.s_UndecidedString)) bAns = false;
1589
                }
1590

    
1591
                if (dispControl.Text.ToString().Length != 0)
1592
                {
1593
                    // 未定はエラーにしない
1594
                    if (!indispensable && dispControl.Text.Equals(CommonDefine.s_UndecidedString)) { }
1595
                    else
1596
                    {
1597
                        // 入力チェック
1598
                        if (dispControl.Text.ToString().Length == 0) bAns = false;
1599
                    }
1600
                }
1601
            }
1602
            catch (Exception ex)
1603
            {
1604
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1605
                bAns = false;
1606
            }
1607
            finally
1608
            {
1609
                // 背景色変更
1610
                chgBackColor(dispControl, bAns);
1611
            }
1612
            return bAns;
1613
        }
1614
        #endregion
1615

    
1616
        #region 画面フィールド入力郵便番号チェック
1617
        /// <summary>
1618
        /// 画面フィールド入力郵便番号チェック
1619
        /// </summary>
1620
        /// <param name="dispControl">コントロールオブジェクト</param>
1621
        /// <param name="indispensable">true:必須入力チェック</param>
1622
        /// <returns>false:エラー true:エラーなし</returns>
1623
        public static bool DispFieldZipCodeCheck(Control dispControl, bool indispensable = false)
1624
        {
1625
            bool bAns = true;
1626
            try
1627
            {
1628
                // 必須入力チェック
1629
                if (indispensable)
1630
                {
1631
                    bAns = DispFieldIndispensable(dispControl);
1632
                }
1633

    
1634
                if (dispControl.Text.ToString().Length != 0)
1635
                {
1636
                    // 郵便番号チェック
1637
                    bAns = chkZipcode(dispControl.Text.ToString());
1638
                }
1639
            }
1640
            catch (Exception ex)
1641
            {
1642
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1643
                bAns = false;
1644
            }
1645
            finally
1646
            {
1647
                // 背景色変更
1648
                chgBackColor(dispControl, bAns);
1649
            }
1650
            return bAns;
1651
        }
1652
        #endregion
1653

    
1654
        #region 画面フィールド入力Intチェック
1655
        /// <summary>
1656
        /// 画面フィールド入力Intチェック
1657
        /// </summary>
1658
        /// <param name="dispControl">コントロールオブジェクト</param>
1659
        /// <param name="indispensable">true:必須入力チェック</param>
1660
        /// <returns>false:エラー true:エラーなし</returns>
1661
        public static bool DispFieldIntCheck(Control dispControl, bool indispensable = false)
1662
        {
1663
            bool bAns = true;
1664
            try
1665
            {
1666
                // 必須入力チェック
1667
                if (indispensable)
1668
                {
1669
                    bAns = DispFieldIndispensable(dispControl);
1670
                }
1671

    
1672
                if (dispControl.Text.ToString().Length != 0)
1673
                {
1674
                    int work = 0;
1675
                    // 数値チェック
1676
                    //bAns = chkNumeric(dispControl.Text.ToString(), ref work);
1677
                    bAns = int.TryParse(dispControl.Text.ToString(), out work);
1678
                }
1679
            }
1680
            catch (Exception ex)
1681
            {
1682
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1683
                bAns = false;
1684
            }
1685
            finally
1686
            {
1687
                // 背景色変更
1688
                chgBackColor(dispControl, bAns);
1689
            }
1690
            return bAns;
1691
        }
1692
        #endregion
1693

    
1694
        #region 画面フィールド入力Doubleチェック
1695
        /// <summary>
1696
        /// 画面フィールド入力Doubleチェック
1697
        /// </summary>
1698
        /// <param name="dispControl">コントロールオブジェクト</param>
1699
        /// <param name="indispensable">true:必須入力チェック</param>
1700
        /// <returns>false:エラー true:エラーなし</returns>
1701
        public static bool DispFieldDoubleCheck(Control dispControl, bool indispensable = false)
1702
        {
1703
            bool bAns = true;
1704
            try
1705
            {
1706
                // 必須入力チェック
1707
                if (indispensable)
1708
                {
1709
                    bAns = DispFieldIndispensable(dispControl);
1710
                }
1711

    
1712
                if (dispControl.Text.ToString().Length != 0)
1713
                {
1714
                    double work = 0;
1715
                    // 数値チェック
1716
                    bAns = chkNumeric(dispControl.Text.ToString(), ref work);
1717
                }
1718
            }
1719
            catch (Exception ex)
1720
            {
1721
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1722
                bAns = false;
1723
            }
1724
            finally
1725
            {
1726
                // 背景色変更
1727
                chgBackColor(dispControl, bAns);
1728
            }
1729
            return bAns;
1730
        }
1731
        #endregion
1732

    
1733
        #region 画面フィールド入力電話番号チェック
1734
        /// <summary>
1735
        /// 画面フィールド入力電話番号チェック
1736
        /// </summary>
1737
        /// <param name="dispControl">コントロールオブジェクト</param>
1738
        /// <param name="indispensable">true:必須入力チェック</param>
1739
        /// <returns>false:エラー true:エラーなし</returns>
1740
        public static bool DispFieldPhoneNumberCheck(Control dispControl, bool indispensable = false)
1741
        {
1742
            bool bAns = true;
1743
            try
1744
            {
1745
                // 必須入力チェック
1746
                if (indispensable)
1747
                {
1748
                    bAns = DispFieldIndispensable(dispControl);
1749
                }
1750

    
1751
                if (dispControl.Text.ToString().Length != 0)
1752
                {
1753
                    // 電話番号チェック
1754
                    bAns = chkPhoneNumber(dispControl.Text.ToString());
1755
                }
1756
            }
1757
            catch (Exception ex)
1758
            {
1759
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1760
                bAns = false;
1761
            }
1762
            finally
1763
            {
1764
                // 背景色変更
1765
                chgBackColor(dispControl, bAns);
1766
            }
1767
            return bAns;
1768
        }
1769
        #endregion
1770

    
1771
        #region 画面フィールド入力メールアドレスチェック
1772
        /// <summary>
1773
        /// 画面フィールド入力メールアドレスチェック
1774
        /// </summary>
1775
        /// <param name="dispControl">コントロールオブジェクト</param>
1776
        /// <param name="indispensable">true:必須入力チェック</param>
1777
        /// <returns>false:エラー true:エラーなし</returns>
1778
        public static bool DispFieldMailAddressCheck(Control dispControl, bool indispensable = false)
1779
        {
1780
            bool bAns = true;
1781
            try
1782
            {
1783
                // 必須入力チェック
1784
                if (indispensable)
1785
                {
1786
                    bAns = DispFieldIndispensable(dispControl);
1787
                }
1788

    
1789
                if (dispControl.Text.ToString().Length != 0)
1790
                {
1791
                    // メールアドレスチェック
1792
                    bAns = chkMailAddress(dispControl.Text.ToString());
1793
                }
1794
            }
1795
            catch (Exception ex)
1796
            {
1797
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1798
                bAns = false;
1799
            }
1800
            finally
1801
            {
1802
                // 背景色変更
1803
                chgBackColor(dispControl, bAns);
1804
            }
1805
            return bAns;
1806
        }
1807
        #endregion
1808

    
1809
        #region 画面フィールド入力カタカナチェック
1810
        /// <summary>
1811
        /// 画面フィールド入力カタカナチェック
1812
        /// </summary>
1813
        public static bool DispFieldKatakanaCheck(Control dispControl, bool indispensable = false)
1814
        {
1815
            bool bAns = true;
1816
            try
1817
            {
1818
                // 必須入力チェック
1819
                if (indispensable)
1820
                {
1821
                    bAns = DispFieldIndispensable(dispControl);
1822
                }
1823

    
1824
                if (dispControl.Text.ToString().Length != 0)
1825
                {
1826
                    // カタカナチェック
1827
                    bAns = chkIsKatakana(dispControl.Text.ToString());
1828
                }
1829
            }
1830
            catch (Exception ex)
1831
            {
1832
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1833
                bAns = false;
1834
            }
1835
            finally
1836
            {
1837
                // 背景色変更
1838
                chgBackColor(dispControl, bAns);
1839
            }
1840
            return bAns;
1841
        }
1842
        #endregion
1843

    
1844
        #region 画面フィールド入力ひらながチェック
1845
        /// <summary>
1846
        /// 画面フィールド入力ひらがなチェック
1847
        /// </summary>
1848
        public static bool DispFieldHiraganaCheck(Control dispControl, bool indispensable = false)
1849
        {
1850
            bool bAns = true;
1851
            try
1852
            {
1853
                // 必須入力チェック
1854
                if (indispensable)
1855
                {
1856
                    bAns = DispFieldIndispensable(dispControl);
1857
                }
1858

    
1859
                if (dispControl.Text.ToString().Length != 0)
1860
                {
1861
                    // ひらながチェック
1862
                    bAns = chkIsHiragana(dispControl.Text.ToString());
1863
                }
1864
            }
1865
            catch (Exception ex)
1866
            {
1867
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
1868
                bAns = false;
1869
            }
1870
            finally
1871
            {
1872
                // 背景色変更
1873
                chgBackColor(dispControl, bAns);
1874
            }
1875
            return bAns;
1876
        }
1877
        #endregion
1878

    
1879
        #region 指定した日が第何週かを求める
1880
        /// <summary>
1881
        /// 指定した日が第何週かを求める
1882
        /// </summary>
1883
        /// <param name="date"></param>
1884
        /// <returns></returns>
1885
        public static int NthWeek(DateTime date)
1886
        {
1887
            int w = (int)(new DateTime(date.Year, date.Month, 1).DayOfWeek);
1888
            return (date.Day + w - 1) / 7 + 1;
1889

    
1890
        }
1891
        #endregion
1892
        #endregion
1893

    
1894
        #region ---------- 工事管理システム専用
1895

    
1896
        #region システム起動確認データ取得
1897
        /// <summary>
1898
        /// システム起動確認データ取得
1899
        /// </summary>
1900
        public static void GetSystemExecute(ref SystemExecute recordRec)
1901
        {
1902
            IOSystemExecute SysExecDB = new IOSystemExecute();
1903
            try
1904
            {
1905
                // システムのバージョンをチェックする
1906
                // キーを取得する
1907
                int PCode = CommonDefine.ExePrimaryCode.First(x => x.Value.Equals("システムバージョン")).Key;
1908

    
1909
                // バージョン読込
1910
                string strSQL = SysExecDB.CreatePrimarykeyString(PCode);
1911
                if (!SysExecDB.SelectAction(strSQL, ref recordRec))
1912
                {   // レコード無時はエラー
1913
                    logger.ErrorFormat("バージョンチェックデータ読込みエラー:{0}", CommonMotions.GetMethodName());
1914
                    return;
1915
                }
1916
            }
1917
            catch (Exception ex)
1918
            {
1919
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1920
            }
1921
            finally
1922
            {
1923
                SysExecDB.close(); SysExecDB = null;
1924
            }
1925
        }
1926
        #endregion
1927

    
1928
        #region 製品版・確認運用時Trueを返す
1929
        /// <summary>
1930
        /// 製品版・確認運用時Trueを返す
1931
        /// </summary>
1932
        /// <returns></returns>
1933
        public static bool OperationConfirmation()
1934
        {
1935
            try
1936
            {
1937
                bool bRet = false;
1938
                switch (ProductDefine.ProductType)
1939
                {
1940
                    case (int)ProductDefine.ProductTypeDef.Originals:
1941
                    case (int)ProductDefine.ProductTypeDef.ProductsModelType2_1:
1942
                    case (int)ProductDefine.ProductTypeDef.ProductsModelType2_2:
1943
                        break;
1944
                    case (int)ProductDefine.ProductTypeDef.ProductsModelType1:
1945
                        // 一人親方バージョンはtrue
1946
                        bRet = true;
1947
                        break;
1948
                    default:
1949
                        break;
1950
                }
1951
                return bRet;
1952
            }
1953
            catch (Exception ex)
1954
            {
1955
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1956
                return false;
1957
            }
1958
        }
1959
        #endregion
1960

    
1961
        #region 実行ファイル名称よりタイトル取得
1962
        /// <summary>
1963
        /// 実行ファイル名称よりタイトル取得
1964
        /// </summary>
1965
        /// <returns></returns>
1966
        public static string GetExecFileName()
1967
        {
1968
            try
1969
            {
1970
                FileVersionInfo CurVersionInfo = CommonMotions.ProductVersionInfo;
1971
                StringBuilder strTitle = new StringBuilder();
1972
                for (int i = 0; i < CurVersionInfo.ProductName.Length; i++)
1973
                {
1974
                    if (i < 1) strTitle.Append(CurVersionInfo.ProductName.Substring(i, 1));
1975
                    else strTitle.AppendFormat(" {0}", CurVersionInfo.ProductName.Substring(i, 1));
1976
                }
1977

    
1978
                return strTitle.ToString();
1979
            }
1980
            catch (Exception ex)
1981
            {
1982
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
1983
                return string.Empty;
1984
            }
1985
        }
1986
        #endregion
1987

    
1988
        #region 定義ファイル読込
1989
        /// <summary>
1990
        /// 定義ファイル読込
1991
        /// </summary>
1992
        private static void DefinitionFileInit()
1993
        {
1994
            try
1995
            {
1996
                //定義ファイル読込
1997
                System.IO.FileStream fs = new System.IO.FileStream(CommonDefine.s_DefinitionFileName, System.IO.FileMode.Open);
1998
                System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(DefinitionFileRead));
1999
                m_dfr_model = (DefinitionFileRead)serializer.Deserialize(fs);
2000
            }
2001
            catch (Exception ex)
2002
            {
2003
                logger.ErrorFormat("定義ファイル読込エラー:{0}:{1}", GetMethodName(), ex.Message);
2004
            }
2005
        }
2006

    
2007
        #endregion
2008

    
2009
        #region 管理マスタ取得
2010
        /// <summary>
2011
        /// 管理マスタ取得
2012
        /// </summary>
2013
        public static bool SetSystemMaster()
2014
        {
2015
            // 管理マスタクラス
2016
            IOMSystem ocDB = new IOMSystem();
2017
            try
2018
            {
2019
                // 管理マスタ取得
2020
                // 1レコードだけなので取り出す
2021
                StringBuilder strSQL = new StringBuilder();
2022
                strSQL.Append(" Where SystemCode = 1");
2023
                if (!ocDB.SelectAction(strSQL.ToString(), ref m_systemMaster)) return false;
2024

    
2025
                return true;
2026
            }
2027
            catch (Exception ex)
2028
            {
2029
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2030
                return false;
2031
            }
2032
            finally
2033
            {
2034
                ocDB.close(); ocDB = null;
2035
            }
2036
        }
2037
        #endregion
2038

    
2039
        #region 消費税データ取得
2040
        /// <summary>
2041
        /// 消費税データ取得
2042
        /// </summary>
2043
        public static bool SetconsumptionTax()
2044
        {
2045
            // 消費税データクラス
2046
            IOMConsumptionTax TaxDB = new IOMConsumptionTax();
2047
            try
2048
            {
2049
                // 消費税データ取得
2050
                StringBuilder strSQL = new StringBuilder();
2051
                m_ConsumptionTax.Clear();
2052
                strSQL.Append(" Order By StartDate");
2053
                if (!TaxDB.SelectAction(strSQL.ToString(), ref m_ConsumptionTax)) return false;
2054

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

    
2069
        #region メソッド名を取得する
2070
        /// <summary>
2071
        /// メソッド名を取得する
2072
        /// </summary>
2073
        /// <param name="StackCnt"></param>
2074
        /// <returns></returns>
2075
        public static string GetMethodName(int stackCnt = 1)
2076
        {
2077
            try
2078
            {
2079
                StringBuilder sb = new StringBuilder();
2080

    
2081
                // 一つ前のスタック情報
2082
                StackFrame stackFrame = new StackFrame(stackCnt);
2083

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

    
2087
                // Method取得失敗は戻る
2088
                if (method == null) return string.Empty;
2089

    
2090
                // 正しく取得できているかの判定
2091
                if (method.DeclaringType != null && !string.IsNullOrEmpty(method.DeclaringType.Name))
2092
                {
2093
                    // 型名
2094
                    sb.AppendFormat("[TYPE]{0}", method.DeclaringType.Name);
2095
                }
2096

    
2097
                if (!string.IsNullOrEmpty(method.Name))
2098
                {
2099
                    // 編集済みの場合は区切りを入れる
2100
                    if (0 < sb.Length) sb.Append('/');
2101

    
2102
                    // メソッド名
2103
                    sb.AppendFormat("[METHOD]{0}", method.Name);
2104
                }
2105
                return sb.ToString();
2106
            }
2107
            catch (Exception ex)
2108
            {
2109
                logger.ErrorFormat(ex.Message);
2110
            }
2111
            return string.Empty;
2112
        }
2113
        #endregion
2114

    
2115
        #region 期数から期の年を取得する
2116
        /// <summary>
2117
        /// 期数から期の年を取得する
2118
        /// </summary>
2119
        /// <param name="PeriodCount"></param>
2120
        /// <returns></returns>
2121
        public static int PeriodCountToYear(int PeriodCount)
2122
        {
2123
            IOMBizPeriodHistory BizHisDB = new IOMBizPeriodHistory();
2124
            try
2125
            {
2126
                // 今の年を取得する
2127
                int iYear = DateTime.Now.Year;
2128

    
2129
                StringBuilder strSQL = new StringBuilder();
2130
                BizPeriodHistory BizHisRec = new BizPeriodHistory();
2131

    
2132
                // 営業期
2133
                strSQL.Append(BizHisDB.CreatePrimarykeyString(PeriodCount, (int)BizPeriodHistory.PeriodFlagDef.BizPeriod));
2134

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

    
2138
                iYear = BizHisRec.BeginDate.Year;
2139

    
2140
                return iYear;
2141
            }
2142
            catch (Exception ex)
2143
            {
2144
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2145
                return 0;
2146
            }
2147
            finally
2148
            {
2149
                BizHisDB.close(); BizHisDB = null;
2150
            }
2151
        }
2152
        #endregion
2153

    
2154
        #region システム設定が営業期数の時にtrueを返す
2155
        /// <summary>
2156
        /// システム設定が営業期数の時にtrueを返す
2157
        /// </summary>
2158
        /// <returns></returns>
2159
        public static bool BasePeriodYear()
2160
        {
2161
            bool bret = false;
2162
            try
2163
            {
2164
                switch (CommonMotions.SystemMasterData.ConstructionNoBase)
2165
                {
2166
                    case (int)SystemMaster.ConstrNoBaseDef.BusinessPeriod:
2167
                        bret = true;
2168
                        break;
2169
                    default:
2170
                        bret = false;
2171
                        break;
2172
                }
2173

    
2174
                return bret;
2175
            }
2176
            catch (Exception ex)
2177
            {
2178
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2179
                return bret;
2180
            }
2181
        }
2182
        #endregion
2183

    
2184
        #region 年度選択ラベル初期セット
2185
        /// <summary>
2186
        /// 年度選択ラベル初期セット
2187
        /// </summary>
2188
        /// <param name="control"></param>
2189
        public static void SetSerchTitle(Label lbl1, Label lbl2, NumericUpDown updown, Label lbl3)
2190
        {
2191
            try
2192
            {
2193
                int nlabelX = lbl1.Location.X;
2194
                int nCtrlDef = updown.Location.X - lbl2.Location.X;
2195

    
2196
                // タイトル文字セット
2197
                lbl1.Text = GetYearTitle();
2198
                lbl3.Text = GetYearTitle(false);
2199

    
2200
                // タイトル表示制御
2201
                if (BasePeriodYear())
2202
                {
2203
                    lbl2.Visible = true;
2204
                }
2205
                else
2206
                {
2207
                    lbl2.Visible = false;
2208

    
2209
                    Point po = updown.Location;
2210
                    po.X -= nCtrlDef;
2211
                    updown.Location = po;
2212

    
2213
                    Point po2 = lbl3.Location;
2214
                    po2.X -= nCtrlDef;
2215
                    lbl3.Location = po2;
2216
                }
2217
            }
2218
            catch (Exception ex)
2219
            {
2220
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2221
            }
2222
        }
2223
        #endregion
2224

    
2225
        #region 管理マスタの指定により年度名称を返す
2226
        /// <summary>
2227
        /// 管理マスタの指定により年度名称を返す
2228
        /// </summary>
2229
        /// <returns></returns>
2230
        public static string GetYearTitle(bool bTitle = true)
2231
        {
2232
            string strTitle = string.Empty;
2233
            try
2234
            {
2235
                if (bTitle)
2236
                {
2237
                    if (BasePeriodYear())
2238
                    {
2239
                        strTitle = "営業期数";
2240
                    }
2241
                    else
2242
                    {
2243
                        strTitle = "工事年度";
2244
                    }
2245
                }
2246
                else
2247
                {
2248
                    if (BasePeriodYear())
2249
                    {
2250
                        strTitle = "期";
2251
                    }
2252
                    else
2253
                    {
2254
                        strTitle = "年度";
2255
                    }
2256
                }
2257

    
2258
                return strTitle;
2259
            }
2260
            catch (Exception ex)
2261
            {
2262
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2263
                return strTitle;
2264
            }
2265
        }
2266
        #endregion
2267

    
2268
        #region 工事情報より期の最大・最少を取得する
2269
        /// <summary>
2270
        /// 工事情報より期の最大・最少を取得する
2271
        /// </summary>
2272
        /// <param name="StartDate"></param>
2273
        /// <returns></returns>
2274
        public static void GetPeriodYearMinMax(ref int min, ref int max)
2275
        {
2276
            IOConstructionBaseInfo cbiDB = new IOConstructionBaseInfo();
2277
            try
2278
            {
2279
                StringBuilder strSQL = new StringBuilder();
2280
                bool bPeriod = CommonMotions.BasePeriodYear();
2281
                if (bPeriod)
2282
                {   // ----- 営業期ベースの時
2283
                    strSQL.Append("SELECT MIN(CONSTRUCTIONPERIOD), MAX(CONSTRUCTIONPERIOD) FROM CONSTRUCTIONBASEINFO");
2284
                }
2285
                else
2286
                {   // ----- 工事年度ベースの時
2287
                    strSQL.Append("SELECT MIN(ConstructionYear), MAX(ConstructionYear) FROM CONSTRUCTIONBASEINFO");
2288
                }
2289

    
2290
                ArrayList arList = new ArrayList();
2291
                if (!cbiDB.ExecuteReader(strSQL.ToString(), ref arList)) return;
2292

    
2293
                object[] wrkobj = (object[])arList[0];
2294
                min = cnvInt(wrkobj[0]);
2295
                max = cnvInt(wrkobj[1]);
2296
                if (bPeriod)
2297
                {   // ----- 営業期ベースの時
2298
                    if (min < 1)
2299
                    {
2300
                        min = 1;
2301
                        max = 1;
2302
                    }
2303
                }
2304
                else
2305
                {   // ----- 工事年度ベースの時
2306
                    if (min < 1)
2307
                    {
2308
                        min = CommonMotions.SystemMasterData.ConstrBeginDate.Year;
2309
                        max = CommonMotions.SystemMasterData.ConstrCompDate.Year;
2310
                    }
2311
                }
2312
            }
2313
            catch (Exception ex)
2314
            {
2315
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2316
            }
2317
            finally
2318
            {
2319
                cbiDB.close(); cbiDB = null;
2320
            }
2321
        }
2322
        #endregion
2323

    
2324
        #region 管理マスタの現在年を取得する
2325
        /// <summary>
2326
        /// 管理マスタの現在年を取得する
2327
        /// </summary>
2328
        /// <returns></returns>
2329
        public static int GetPeriodYear()
2330
        {
2331
            try
2332
            {
2333
                int nYearVal = DateTime.Now.Year;
2334

    
2335
                if (CommonMotions.BasePeriodYear())
2336
                {
2337
                    // ----- 営業期ベースの時
2338
                    nYearVal = CommonMotions.SystemMasterData.BusinessPeriod;
2339
                }
2340
                else
2341
                {
2342
                    // ----- 工事年度ベースの時
2343
                    nYearVal = CommonMotions.SystemMasterData.ConstrYear;
2344
                }
2345

    
2346
                return nYearVal;
2347
            }
2348
            catch (System.Exception ex)
2349
            {
2350
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2351
                return 0;
2352
            }
2353
        }
2354
        #endregion
2355

    
2356
        #region 対象日より営業期・工事年度を取得する
2357
        /// <summary>
2358
        /// 対象日より営業期・工事年度を取得する
2359
        /// </summary>
2360
        /// <param name="NowDay"></param>
2361
        /// <returns></returns>
2362
        public static int ConvDate2YearOrPeriod(DateTime NowDay)
2363
        {
2364
            IOMBizPeriodHistory BizHisDB = new IOMBizPeriodHistory();
2365
            try
2366
            {
2367
                int nRetVal = 0;
2368

    
2369
                // 範囲に入るデータを取得する
2370
                StringBuilder strSQL = new StringBuilder();
2371

    
2372
                strSQL.AppendFormat(" WHERE (DATE(BeginDate) <= DATE('{0}'))", NowDay.ToShortDateString());
2373
                strSQL.AppendFormat(" AND (DATE('{0}') <= DATE(CompleteDate))", NowDay.ToShortDateString());
2374
                strSQL.AppendFormat(" And PeriodFlag = {0}", CommonMotions.SystemMasterData.ConstructionNoBase);
2375
                strSQL.Append(" Order By PeriodFlag Asc, PeriodYear Asc");
2376

    
2377
                List<BizPeriodHistory> BizList = new List<BizPeriodHistory>();
2378
                if (!BizHisDB.SelectAction(strSQL.ToString(), ref BizList)) return 0;
2379

    
2380
                nRetVal = BizList[0].PeriodYear;
2381

    
2382
                return nRetVal;
2383
            }
2384
            catch (Exception ex)
2385
            {
2386
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2387
                return 0;
2388
            }
2389
            finally
2390
            {
2391
                BizHisDB.close(); BizHisDB = null;
2392
            }
2393
        }
2394
        #endregion
2395

    
2396
        #region ポイントに規定値を加算して戻す
2397
        /// <summary>
2398
        /// ポイントに規定値を加算して戻す
2399
        /// </summary>
2400
        /// <param name="PosPoint"></param>
2401
        public static Point SetFormPosion(Point PosPoint)
2402
        {
2403
            Point po = PosPoint;
2404
            try
2405
            {
2406
                po.X += CommonDefine.s_DefalutShiftValue;
2407
                po.Y += CommonDefine.s_DefalutShiftValue;
2408

    
2409
                return po;
2410
            }
2411
            catch (Exception ex)
2412
            {
2413
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
2414
                return po;
2415
            }
2416
        }
2417
        #endregion
2418

    
2419
        #region フィールドバックカラー変更処理
2420
        /// <summary>
2421
        /// フィールドバックカラー変更処理(あまりカッコ良くない^^;)
2422
        /// </summary>
2423
        /// <param name="objCtrl"></param>
2424
        /// <param name="chgColor"></param>
2425
        public static void chgBackColor(object objCtrl, bool bPara, bool bWarning = false)
2426
        {
2427
            try
2428
            {
2429
                // エラー色・ワーニング色
2430
                Color ErrorColor = CommonDefine.s_clrError;
2431
                if (bWarning) ErrorColor = CommonDefine.s_clrWarning;
2432

    
2433
                if (objCtrl.GetType().Equals(typeof(TextBox))
2434
                    || objCtrl.GetType().Equals(typeof(TextBoxEX)))
2435
                {
2436
                    TextBox wrk = (TextBox)objCtrl;
2437
                    if (bPara)
2438
                    {
2439
                        wrk.BackColor = CommonDefine.s_clrNormal;
2440
                    }
2441
                    else
2442
                    {
2443
                        wrk.BackColor = ErrorColor;
2444
                        wrk.Focus();
2445
                    }
2446
                }
2447
                else if (objCtrl.GetType().Equals(typeof(DataGridViewTextBoxCell)))
2448
                {
2449
                    DataGridViewTextBoxCell wrk = (DataGridViewTextBoxCell)objCtrl;
2450
                    if (bPara)
2451
                    {
2452
                        wrk.Style.BackColor = CommonDefine.s_clrNormal;
2453
                    }
2454
                    else
2455
                    {
2456
                        wrk.Style.BackColor = ErrorColor;
2457
                        wrk.Selected = true;
2458
                    }
2459
                }
2460
                else if (objCtrl.GetType().Equals(typeof(ComboBoxEX))
2461
                        || objCtrl.GetType().Equals(typeof(ComboBox)))
2462
                {
2463
                    ComboBox wrk = (ComboBox)objCtrl;
2464
                    if (bPara)
2465
                    {
2466
                        wrk.BackColor = CommonDefine.s_clrNormal;
2467
                    }
2468
                    else
2469
                    {
2470
                        wrk.BackColor = ErrorColor;
2471
                        wrk.Focus();
2472
                    }
2473
                }
2474
                else if (objCtrl.GetType().Equals(typeof(ListBox)))
2475
                {
2476
                    ListBox wrk = (ListBox)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(Label)))
2488
                {
2489
                    Label wrk = (Label)objCtrl;
2490
                    if (bPara)
2491
                    {
2492
                        wrk.BackColor = CommonDefine.s_clrNormal;
2493
                    }
2494
                    else
2495
                    {
2496
                        wrk.BackColor = ErrorColor;
2497
                    }
2498
                }
2499
                else if (objCtrl.GetType().Equals(typeof(NumericUpDown)))
2500
                {
2501
                    NumericUpDown wrk = (NumericUpDown)objCtrl;
2502
                    if (bPara)
2503
                    {
2504
                        wrk.BackColor = CommonDefine.s_clrNormal;
2505
                    }
2506
                    else
2507
                    {
2508
                        wrk.BackColor = ErrorColor;
2509
                    }
2510
                }
2511
                else if (objCtrl.GetType().Equals(typeof(DateTimePicker)))
2512
                {
2513
                    DateTimePicker wrk = (DateTimePicker)objCtrl;
2514
                    if (bPara)
2515
                    {
2516
                        wrk.BackColor = CommonDefine.s_clrNormal;
2517
                    }
2518
                    else
2519
                    {
2520
                        wrk.BackColor = ErrorColor;
2521
                    }
2522
                }
2523
            }
2524
            catch (Exception ex)
2525
            {
2526
                logger.ErrorFormat("システムエラー:{0}:{1}:{2}", GetMethodName(), GetMethodName(2), ex.Message);
2527
            }
2528
        }
2529
        #endregion
2530

    
2531
        #region 営業期数より工事年を取得する
2532
        /// <summary>
2533
        /// 営業期数より工事年を取得する
2534
        /// </summary>
2535
        /// <param name="Period"></param>
2536
        /// <returns></returns>
2537
        public static int BusinessPeriodToConstructionYears(int Period)
2538
        {
2539
            try
2540
            {
2541
                int Beginning = 0;
2542
                int diffwork = 0;
2543
                int RetYears = 0;
2544
                string strwork = string.Empty;
2545

    
2546
                // 現在期との差分を求める
2547
                diffwork = Period - CommonMotions.SystemMasterData.BusinessPeriod;
2548

    
2549
                // 期首月を取得する
2550
                Beginning = CommonMotions.SystemMasterData.BusinessBeginDate.Month;
2551

    
2552
                // 年数を求める
2553
                DateTime dateWork = DateTime.Now;
2554
                int nowMounth = DateTime.Now.Month;
2555
                // 期首月を境に年度を計算する
2556
                int iYear = 0;
2557
                if (nowMounth < Beginning)
2558
                    iYear = dateWork.AddYears(-1).Year;
2559
                else
2560
                    iYear = dateWork.Year;
2561

    
2562
                // ベース年を求める
2563
                RetYears = iYear + diffwork;
2564

    
2565
                return RetYears;
2566
            }
2567
            catch (Exception ex)
2568
            {
2569
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2570
                return 0;
2571
            }
2572
        }
2573
        #endregion
2574

    
2575
        #region 発注者名を法人格を含んだ形で連結する
2576
        /// <summary>
2577
        /// 発注者名を法人格を含んだ形で連結する
2578
        /// </summary>
2579
        /// <param name="master"></param>
2580
        /// <returns></returns>
2581
        public static string OrderersNameUnion(OrderersMaster master)
2582
        {
2583
            try
2584
            {
2585
                string strRet = string.Empty;
2586

    
2587
                if (master.CorporateStatusPoint == (int)BusinessTypeMaster.StatusNamePointDef.Forword)
2588
                    strRet = master.CorporateStatusName + " " + master.OrderersName1 + " " + master.OrderersName2;
2589
                else if (master.CorporateStatusPoint == (int)BusinessTypeMaster.StatusNamePointDef.Back)
2590
                    strRet = master.OrderersName1 + " " + master.CorporateStatusName + " " + master.OrderersName2;
2591
                else
2592
                    strRet = master.OrderersName1 + " " + master.OrderersName2;
2593

    
2594
                return strRet;
2595
            }
2596
            catch (Exception ex)
2597
            {
2598
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2599
                return string.Empty;
2600
            }
2601
        }
2602
        #endregion
2603

    
2604
        #region メッセージ送信メソッド(テキストボックス背景文字表示用)
2605
        /// <summary>
2606
        /// メッセージ送信メソッド
2607
        /// </summary>
2608
        /// <param name="hWnd"></param>
2609
        /// <param name="Msg"></param>
2610
        /// <param name="wParam"></param>
2611
        /// <param name="lParam"></param>
2612
        /// <returns></returns>
2613
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
2614
        public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);
2615
        #endregion
2616

    
2617
        #region ファイルの時間を取得する
2618
        /// <summary>
2619
        /// ファイルの時間を取得する
2620
        /// </summary>
2621
        /// <param name="FilePath">ファイルパス</param>
2622
        /// <param name="flg">取得日付フラグ</param>
2623
        /// <returns></returns>
2624
        public static DateTime GetFileTimeStamp(string FilePath, char flg)
2625
        {
2626
            try
2627
            {
2628
                DateTime dtDateTime = DateTime.MinValue;
2629

    
2630
                if (flg == 'C')
2631
                {
2632
                    // 作成日時を取得する
2633
                    dtDateTime = File.GetCreationTime(@FilePath);
2634
                }
2635
                else if (flg == 'U')
2636
                {
2637
                    // 更新日時を取得する
2638
                    dtDateTime = File.GetLastWriteTime(@FilePath);
2639
                }
2640
                else if (flg == 'A')
2641
                {
2642
                    // アクセス日時を取得する
2643
                    dtDateTime = File.GetLastAccessTime(@FilePath);
2644
                }
2645

    
2646
                return dtDateTime;
2647
            }
2648
            catch (Exception ex)
2649
            {
2650
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2651
                return DateTime.Now;
2652
            }
2653
        }
2654
        #endregion
2655

    
2656
        #region ファイルパスよりmd5のハッシュ値を返す
2657
        /// <summary>
2658
        /// ファイルパスよりmd5のハッシュ値を返す
2659
        /// </summary>
2660
        /// <param name="FilePath"></param>
2661
        /// <returns></returns>
2662
        public static string GetFileHashData(string FilePath)
2663
        {
2664
            try
2665
            {
2666
                //ファイルを開く
2667
                FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
2668

    
2669
                //MD5CryptoServiceProviderオブジェクトを作成
2670
                MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
2671

    
2672
                //ハッシュ値を計算する
2673
                byte[] bs = md5.ComputeHash(fs);
2674

    
2675
                //リソースを解放する
2676
                md5.Clear();
2677
                //ファイルを閉じる
2678
                fs.Close();
2679

    
2680
                return BitConverter.ToString(bs).ToLower().Replace("-", "");
2681

    
2682
            }
2683
            catch (Exception ex)
2684
            {
2685
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2686
                return string.Empty;
2687
            }
2688
        }
2689
        #endregion
2690

    
2691
        #region 郵便番号より住所を検索する
2692
        /// <summary>
2693
        /// 郵便番号より住所を検索する
2694
        /// </summary>
2695
        /// <param name="ZipCode">郵便番号</param>
2696
        public static void SearchZipCode2Address(string ZipCode, ref string Address1, ref string Address2)
2697
        {
2698
            Address1 = "";                //住所
2699
            Address2 = "";                //住所
2700

    
2701
            //処理時間を計測
2702
            Stopwatch sw = new Stopwatch();
2703
            //処理時間計測開始
2704
            sw.Start();
2705

    
2706
            // 郵便番号セット
2707
            string sKey = ZipCode;
2708

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

    
2714
            // 文字列の長さを取得する
2715
            int iLength = sKey.Length;
2716
            // '-'がある場合は先頭文字目の後から '-' を検索し、見つかった位置を取得する
2717
            int iFind = 0;
2718
            if ((iFind = sKey.IndexOf('-', 0)) != 0)
2719
            {
2720
                //左から3文字+"-"文字以降をtmpZip変数に代入
2721
                sKey = sKey.Substring(0, 3) + sKey.Substring(iFind + 1);
2722
            }
2723
            try
2724
            {
2725
                //StreamReaderオブジェクトの作成
2726
                StreamReader sr = new StreamReader(@CommonDefine.s_AddressFilePath, Encoding.Default);
2727

    
2728
                //1行ずつ読み込み
2729
                string dat = "";
2730
                while ((dat = sr.ReadLine()) != null)
2731
                {
2732
                    string tmpZip = "";
2733

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

    
2739
                    //入力された郵便番号と比較
2740
                    if (sKey == tmpZip)
2741
                    {
2742
                        //住所を作成
2743
                        //都道府県名+市区町村名+町域名
2744
                        Address1 = sbuf[6].Trim('"') + sbuf[7].Trim('"');
2745
                        Address2 = sbuf[8].Trim('"');
2746

    
2747
                        sw.Stop();  //処理時間計測終了
2748

    
2749
                        // 処理時間をTimeSpan構造体で書式付き表示
2750
                        TimeSpan ts = sw.Elapsed;
2751
                        // 出力例:00:00:00.9984668
2752
                        logger.DebugFormat("処理時間:{0}", ts.ToString());
2753

    
2754
                        break;          //ループを抜ける
2755
                    }
2756
                    Application.DoEvents();
2757
                }
2758
                //ファイルを閉じる
2759
                sr.Close();
2760
            }
2761
            catch (Exception ex)
2762
            {
2763
                //ファイルエラーが発生した場合
2764
                MessageBox.Show(ex.Message, "ファイルエラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
2765
                //処理を抜ける
2766
                return;
2767
            }
2768
        }
2769
        #endregion
2770

    
2771
        #region 文字列より指定文字から後ろを省いて戻す
2772
        /// <summary>
2773
        /// 文字列より指定文字から後ろを省いて戻す
2774
        /// </summary>
2775
        /// <param name="Mijiretu"></param>
2776
        /// <param name="Delimiter"></param>
2777
        /// <returns></returns>
2778
        public static string ComentSucstring(string Mijiretu, string Delimiter)
2779
        {
2780
            string strRet = Mijiretu;
2781
            try
2782
            {
2783

    
2784
                if (Mijiretu.IndexOf(Delimiter) < 0) return strRet;
2785
                int TargetCnt = Mijiretu.IndexOf(Delimiter) - 1;
2786

    
2787
                if (TargetCnt > 0)
2788
                    strRet = Mijiretu.Substring(0, TargetCnt);
2789

    
2790
                return strRet;
2791
            }
2792
            catch (Exception ex)
2793
            {
2794
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2795
                return string.Empty;
2796
            }
2797
        }
2798
        #endregion
2799

    
2800
        #region 今の時間をセパレータを除いた文字列で戻す
2801
        /// <summary>
2802
        /// 今の時間をセパレータを除いた文字列で戻す
2803
        /// </summary>
2804
        /// <returns></returns>
2805
        public static string stringNowJikan()
2806
        {
2807
            string[] wrk = DateTime.Now.ToShortDateString().Split('/');
2808

    
2809
            string[] wrk2 = DateTime.Now.ToShortTimeString().Split(':');
2810

    
2811
            return string.Format("{0}{1}{2}{3}{4}{5}"
2812
                                            , wrk[0], wrk[1], wrk[2]
2813
                                            , wrk2[0], wrk2[1], wrk2[2]);
2814
        }
2815
        #endregion
2816

    
2817
        #region 経過日数を工数で返す
2818
        /// <summary>
2819
        /// 経過日数を工数で返す
2820
        /// </summary>
2821
        /// <param name="StartDate"></param>
2822
        /// <param name="CompDate"></param>
2823
        /// <returns></returns>
2824
        public static double DiffMounthTimes(DateTime StartDate, DateTime CompDate)
2825
        {
2826
            // 差分計算
2827
            TimeSpan DiffDate = CompDate - StartDate;
2828

    
2829
            // 当日までなので+1日する
2830
            TimeSpan wrkts = new TimeSpan(1, 0, 0, 0);
2831
            DiffDate = DiffDate + wrkts;
2832

    
2833
            // 工数の最小単位で割って10分の1にする
2834
            //return (((double)DiffDate.Days) / CommonDefine.s_ManHourUnitDays) / 10;
2835
            // 日数から月数へ変換する
2836
            return ClsCalendar.cnvMonthFromDays(DiffDate.Days);
2837
        }
2838
        #endregion
2839

    
2840
        #region 文字列を指定文字で指定レングス分埋める
2841
        /// <summary>
2842
        /// 文字列を指定文字で指定レングス分埋める
2843
        /// </summary>
2844
        /// <param name="OrgString"></param>
2845
        /// <param name="SetLength"></param>
2846
        /// <param name="Before"></param>
2847
        /// <returns></returns>
2848
        public static string SetBlankString(string OrgString, string SetString, int SetLength, bool Before)
2849
        {
2850
            try
2851
            {
2852
                string strRet = string.Empty;
2853
                int stringLength = OrgString.Length;
2854

    
2855
                // 文字列を埋める
2856
                for (int i = 0; i < (SetLength - stringLength); i++) strRet += SetString;
2857

    
2858
                // 前か後か
2859
                if (Before)
2860
                {
2861
                    strRet = strRet + OrgString;
2862
                }
2863
                else
2864
                {
2865
                    strRet = OrgString + strRet;
2866
                }
2867

    
2868
                return strRet;
2869
            }
2870
            catch (Exception ex)
2871
            {
2872
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2873
                return string.Empty;
2874
            }
2875
        }
2876
        #endregion
2877

    
2878
        #region 現在年を西暦で求める
2879
        /// <summary>
2880
        /// 現在年を西暦で求める
2881
        /// </summary>
2882
        public static int GetBaseCounstructionYear(int years)
2883
        {
2884
            try
2885
            {
2886
                int Beginning = 0;
2887
                int diffwork = 0;
2888
                string strwork = string.Empty;
2889
                if (CommonMotions.BasePeriodYear())
2890
                {   // ----- 営業期ベースの時
2891

    
2892
                    // 現在期との差分を求める
2893
                    diffwork = years - SystemMasterData.BusinessPeriod;
2894

    
2895
                    // 期首月を取得する
2896
                    Beginning = SystemMasterData.BusinessBeginDate.Month;
2897
                }
2898
                else
2899
                {   // ----- 営業年度ベースの時
2900

    
2901
                    // 現在期との差分を求める
2902
                    diffwork = years - SystemMasterData.ConstrYear;
2903

    
2904
                    // 期首月を取得する
2905
                    Beginning = SystemMasterData.ConstrBeginDate.Month;
2906
                }
2907

    
2908
                // 年数を求める
2909
                DateTime dateWork = DateTime.Now;
2910
                int nowMounth = DateTime.Now.Month;
2911
                // 期首月を境に年度を計算する
2912
                int iYear = 0;
2913
                if (nowMounth < Beginning)
2914
                    iYear = dateWork.AddYears(-1).Year;
2915
                else
2916
                    iYear = dateWork.Year;
2917

    
2918
                // ベース年を求める
2919
                return (iYear + diffwork);
2920
            }
2921
            catch (System.Exception ex)
2922
            {
2923
                logger.ErrorFormat("システムエラー:{0}:{1}", GetMethodName(), ex.Message);
2924
                return 0;
2925
            }
2926
        }
2927
        #endregion
2928

    
2929
        #region 指定期・指定年度の期首日・期末日を取得する
2930
        /// <summary>
2931
        /// 指定期・指定年度の期首日・期末日を取得する
2932
        /// </summary>
2933
        /// <param name="nYear"></param>
2934
        /// <param name="bBeginDay"></param>
2935
        /// <param name="bPeriod"></param>
2936
        /// <returns></returns>
2937
        public static DateTime GetOpeningEndDate(int nYear, bool bBeginDay = true)
2938
        {
2939
            IOMBizPeriodHistory BizHisDB = new IOMBizPeriodHistory();
2940
            try
2941
            {
2942
                DateTime dtRet = DateTime.Now.Date;
2943

    
2944
                StringBuilder strSQL = new StringBuilder();
2945
                BizPeriodHistory BizHisRec = new BizPeriodHistory();
2946

    
2947
                int nFlg = (int)BizPeriodHistory.PeriodFlagDef.BizPeriod;
2948
                if (BasePeriodYear())
2949
                {   // 営業期
2950
                    nFlg = (int)BizPeriodHistory.PeriodFlagDef.BizPeriod;
2951
                }
2952
                else
2953
                {   // 工事年度
2954
                    nFlg = (int)BizPeriodHistory.PeriodFlagDef.ConstrYear;
2955
                }
2956
                strSQL.Append(BizHisDB.CreatePrimarykeyString(nYear, nFlg));
2957

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

    
2961
                if (bBeginDay)
2962
                {
2963
                    // 期首取得時
2964
                    dtRet = BizHisRec.BeginDate;
2965
                }
2966
                else
2967
                {
2968
                    // 期末取得時
2969
                    dtRet = BizHisRec.CompleteDate;
2970
                }
2971

    
2972
                return dtRet;
2973
            }
2974
            catch (System.Exception ex)
2975
            {
2976
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
2977
                return DateTime.Today;
2978
            }
2979
            finally
2980
            {
2981
                BizHisDB.close(); BizHisDB = null;
2982
            }
2983
        }
2984
        #endregion
2985

    
2986
        #region TimeSpanから年数を取得する
2987
        /// <summary>
2988
        /// TimeSpanから年数を取得する(切り上げ)
2989
        /// </summary>
2990
        /// <param name="timespan"></param>
2991
        /// <returns></returns>
2992
        public static int GetTimeSpanYears(this TimeSpan timespan)
2993
        {
2994
            return CommonMotions.cnvRoundUp((double)timespan.Days / 365.2425);
2995
        }
2996
        #endregion
2997

    
2998
        #region TimeSpanから月数を取得する
2999
        /// <summary>
3000
        /// TimeSpanから月数を取得する
3001
        /// </summary>
3002
        /// <param name="timespan"></param>
3003
        /// <returns></returns>
3004
        public static int GetTimeSpanMonths(this TimeSpan timespan)
3005
        {
3006
            return (int)((double)timespan.Days / 30.436875);
3007
        }
3008
        #endregion
3009

    
3010
        #region 工事種別より工事詳細台帳が作成OKかどうかをチェックする
3011
        /// <summary>
3012
        /// 工事種別より工事詳細台帳が作成OKかどうかをチェックする
3013
        /// </summary>
3014
        /// <param name="ConstructionType"></param>
3015
        /// <returns></returns>
3016
        public static bool CheckCreateLedgerData(int ConstructionStatusFlg, int ConstructionType)
3017
        {
3018
            try
3019
            {
3020
                bool ExcuteFlg = false;
3021
                int[] Status = new int[] { CommonDefine.ProjectsStatus.First(x => x.Value.Equals("一般補修工事")).Key,
3022
                                            CommonDefine.ProjectsStatus.First(x => x.Value.Equals("空家補修工事")).Key,
3023
                                            CommonDefine.ProjectsStatus.First(x => x.Value.Equals("Hit'sV工事")).Key,
3024
                                            };
3025
                for (int i = 0; i < Status.Length; i++)
3026
                {
3027
                    //if (ConstructionStatusFlg == Status[i] && ConstructionType == CommonDefine.s_CreateLedgerData[i])
3028
                    if (ConstructionStatusFlg == Status[i])
3029
                    {
3030
                        ExcuteFlg = true;
3031
                        break;
3032
                    }
3033
                }
3034
                return ExcuteFlg;
3035
            }
3036
            catch (Exception ex)
3037
            {
3038
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3039
                return false;
3040
            }
3041
        }
3042
        #endregion
3043

    
3044
        #region 予算書・台帳給与金額計算処理
3045
        /// <summary>
3046
        /// 予算書・台帳給与金額計算処理
3047
        /// </summary>
3048
        public static void CalcPayValueData(double MonthryCost, double OrdersPrice, int workingCount,
3049
                                            ref double ExecutionAmount, ref double AmountConfigRate,
3050
                                            bool bSalaryCorrection = true)
3051
        {
3052
            try
3053
            {
3054
                // 受注金額が0の場合は1として計算する
3055
                if (OrdersPrice == 0) OrdersPrice = 1;
3056

    
3057
                // 日当計算
3058
                double DairySalary = 0;
3059
                if (bSalaryCorrection)
3060
                    DairySalary = (MonthryCost * CommonDefine.s_SalaryCorrection) / CommonDefine.s_ManHourUnitMonth;
3061
                else
3062
                {
3063
                    DairySalary = MonthryCost / CommonDefine.s_ManHourUnitMonth;
3064

    
3065
                }
3066

    
3067
                // 給与支払総額
3068
                int iInput = CommonMotions.cnvRound(DairySalary * workingCount);
3069

    
3070
                // 実行金額に給与支払総額をセットする
3071
                ExecutionAmount = iInput;
3072

    
3073
                // 金額構成率計算
3074
                AmountConfigRate = (iInput / OrdersPrice) * 100.0;
3075

    
3076
                // 構成率が範囲外の場合は0にする
3077
                if (AmountConfigRate < -999.00 || 999.00 < AmountConfigRate) AmountConfigRate = 0;
3078
            }
3079
            catch (Exception ex)
3080
            {
3081
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3082
            }
3083
        }
3084
        #endregion
3085

    
3086
        #region 給与取得SQL作成処理
3087
        /// <summary>
3088
        /// 給与取得SQL作成処理
3089
        /// </summary>
3090
        private static string GetSalaryValue(int PersonCode, DateTime GetData)
3091
        {
3092
            try
3093
            {
3094
                // SQL作成
3095
                StringBuilder strSQL = new StringBuilder();
3096
                strSQL.Append("SELECT");
3097
                strSQL.Append(" A.MONTHLYSALARY");
3098
                strSQL.Append(", A.YEARSALARY");
3099
                strSQL.Append(", A.PERSONCODE");
3100
                strSQL.Append(", A.STARTDATE");
3101
                strSQL.Append(" FROM PERSONSALARYMASTER As A");
3102
                strSQL.Append("    , (SELECT");
3103
                strSQL.Append("             BB.PERSONCODE");
3104
                strSQL.Append("           , MAX(BB.STARTDATE) sDate");
3105
                strSQL.Append("       FROM PERSONSALARYMASTER As BB");
3106
                strSQL.AppendFormat(" WHERE BB.PERSONCODE = {0}", PersonCode);
3107
                strSQL.AppendFormat(" AND DATE(BB.StartDate) <= DATE('{0}')", GetData.ToShortDateString());
3108
                strSQL.Append(" GROUP BY BB.PERSONCODE) As B");
3109
                strSQL.Append(" WHERE A.PERSONCODE = B.PERSONCODE");
3110
                strSQL.Append(" AND A.STARTDATE = B.sDate");
3111

    
3112
                return strSQL.ToString();
3113
            }
3114
            catch (Exception ex)
3115
            {
3116
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3117
                return string.Empty;
3118
            }
3119
        }
3120
        #endregion
3121

    
3122
        #region 担当者給与金額取得処理(単独処理)
3123
        /// <summary>
3124
        /// 担当者給与金額取得処理(単独処理)
3125
        /// </summary>
3126
        public static bool GetSalaryValue(int PersonCode, ref double MonthryCost, ref double YearsCost, DateTime GetData)
3127
        {
3128
            IOMPersonInCharge PersonDB = new IOMPersonInCharge();
3129
            try
3130
            {
3131
                // 初期値セット
3132
                MonthryCost = 0;
3133
                YearsCost = 0;
3134

    
3135
                // データ取得
3136
                string strSQL = GetSalaryValue(PersonCode, GetData);
3137
                ArrayList arList = new ArrayList();
3138
                if (!PersonDB.ExecuteReader(strSQL, ref arList)) return false;
3139
                if (arList.Count < 1) return false;
3140
                object[] objGetData = (object[])arList[0];
3141

    
3142
                // 取得値セット
3143
                MonthryCost = CommonMotions.cnvDouble(objGetData[0]);
3144
                YearsCost = CommonMotions.cnvDouble(objGetData[1]);
3145

    
3146
                return true;
3147
            }
3148
            catch (Exception ex)
3149
            {
3150
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3151
                return false;
3152
            }
3153
            finally
3154
            {
3155
                PersonDB.close(); PersonDB = null;
3156
            }
3157
        }
3158
        #endregion
3159

    
3160
        #region 担当者給与金額取得処理(セッションコネクト別)
3161
        /// <summary>
3162
        /// 担当者給与金額取得処理(セッションコネクト別)
3163
        /// </summary>
3164
        public static bool GetSalaryValue(IOMPersonInCharge PersonDB, int PersonCode,
3165
                                            ref double MonthryCost, ref double YearsCost, DateTime GetData)
3166
        {
3167
            try
3168
            {
3169
                // 初期値セット
3170
                MonthryCost = 0;
3171
                YearsCost = 0;
3172

    
3173
                // データ取得
3174
                string strSQL = GetSalaryValue(PersonCode, GetData);
3175
                ArrayList arList = new ArrayList();
3176
                if (!PersonDB.ExecuteReader(strSQL, ref arList, false)) return false;
3177
                object[] objGetData = (object[])arList[0];
3178

    
3179
                // 取得値セット
3180
                MonthryCost = CommonMotions.cnvDouble(objGetData[0]);
3181
                YearsCost = CommonMotions.cnvDouble(objGetData[1]);
3182

    
3183
                return true;
3184
            }
3185
            catch (Exception ex)
3186
            {
3187
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3188
                return false;
3189
            }
3190
        }
3191
        #endregion
3192

    
3193
        #region 与えられたキー値より機密管理区分データを取得する
3194
        /// <summary>
3195
        /// 与えられたキー値より機密管理区分データを取得する
3196
        /// </summary>
3197
        /// <param name="KeyValue"></param>
3198
        /// <returns></returns>
3199
        public static KeyValuePair<int, string> SearchSecurityRankList(int KeyValue)
3200
        {
3201
            KeyValuePair<int, string> RetPairvalue = new KeyValuePair<int, string>(0, string.Empty);
3202
            try
3203
            {
3204
                for (int i = 0; i < CommonDefine.SecurityRankList.Count; i++)
3205
                {
3206
                    if (CommonDefine.SecurityRankList[i].Key == KeyValue)
3207
                    {
3208
                        RetPairvalue = CommonDefine.SecurityRankList[i];
3209
                    }
3210
                }
3211

    
3212
                return RetPairvalue;
3213
            }
3214
            catch (Exception ex)
3215
            {
3216
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3217
                return RetPairvalue;
3218
            }
3219
        }
3220
        #endregion
3221

    
3222
        #region 与えられたキー値より機密区分範囲データを取得する
3223
        /// <summary>
3224
        /// 与えられたキー値より機密区分範囲データを取得する
3225
        /// </summary>
3226
        /// <param name="KeyValue"></param>
3227
        /// <returns></returns>
3228
        public static KeyValuePair<int, string> SearchSecurityRangeList(int KeyValue)
3229
        {
3230
            KeyValuePair<int, string> RetPairvalue = new KeyValuePair<int, string>(0, string.Empty);
3231
            try
3232
            {
3233
                for (int i = 0; i < CommonDefine.SecurityRangeList.Count; i++)
3234
                {
3235
                    if (CommonDefine.SecurityRangeList[i].Key == KeyValue)
3236
                    {
3237
                        RetPairvalue = CommonDefine.SecurityRangeList[i];
3238
                    }
3239
                }
3240

    
3241
                return RetPairvalue;
3242
            }
3243
            catch (Exception ex)
3244
            {
3245
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3246
                return RetPairvalue;
3247
            }
3248
        }
3249
        #endregion
3250

    
3251
        #region 登録完了メッセージ表示
3252
        /// <summary>
3253
        /// 登録完了メッセージ表示
3254
        /// </summary>
3255
        /// <param name="strTitle"></param>
3256
        public static void EntryEndMessage(string strTitle)
3257
        {
3258
            try
3259
            {
3260
                string strMes = string.Format("{0} 登録完了しました。", strTitle);
3261

    
3262
                MessageBox.Show(strMes, "登録完了メッセージ", MessageBoxButtons.OK, MessageBoxIcon.Information);
3263
            }
3264
            catch (Exception ex)
3265
            {
3266
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3267
            }
3268
        }
3269
        public static void EntryEndMessage(string strTitle, string strTitle2)
3270
        {
3271
            try
3272
            {
3273
                string strMes = string.Format("{0} {1}完了しました。", strTitle, strTitle2);
3274
                string strGuidance = string.Format("{0}完了メッセージ", strTitle2);
3275

    
3276
                MessageBox.Show(strMes, strGuidance, MessageBoxButtons.OK, MessageBoxIcon.Information);
3277
            }
3278
            catch (Exception ex)
3279
            {
3280
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3281
            }
3282
        }
3283
        #endregion
3284

    
3285
        #region 削除完了メッセージ表示
3286
        /// <summary>
3287
        /// 削除完了メッセージ表示
3288
        /// </summary>
3289
        /// <param name="strTitle"></param>
3290
        public static void RemoveEndMessage(string strTitle)
3291
        {
3292
            try
3293
            {
3294
                string strMes = string.Format("{0} 削除完了しました。", strTitle);
3295

    
3296
                MessageBox.Show(strMes, "削除完了メッセージ", MessageBoxButtons.OK, MessageBoxIcon.Information);
3297
            }
3298
            catch (Exception ex)
3299
            {
3300
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3301
            }
3302
        }
3303
        #endregion
3304

    
3305
        #region 経過給与を計算する
3306
        /// <summary>
3307
        /// 経過給与を計算する
3308
        /// </summary>
3309
        /// <param name="dtStart"></param>
3310
        /// <param name="PersonCode"></param>
3311
        /// <returns></returns>
3312
        public static int CalcElapsedSalary(IOMPersonInCharge SalDB, DateTime dtStart, DateTime dtLast, int PersonCode, bool bConnect = true)
3313
        {
3314
            try
3315
            {
3316
                int RetSalary = 0;
3317

    
3318
                StringBuilder strSQL = new StringBuilder();
3319
                strSQL.Append("SELECT SUM(SAL.SALARY) FROM");
3320
                strSQL.Append(" (SELECT AX.hiduke,");
3321
                //strSQL.AppendFormat(" ROUND((AX.salary * {0}) / DATE_FORMAT(LAST_DAY(AX.hiduke), '%d')) AS SALARY,", CommonDefine.s_SalaryCorrection);
3322
                strSQL.AppendFormat(" ROUND((AX.salary * {0}) / 30) AS SALARY,", CommonDefine.s_SalaryCorrection);
3323
                strSQL.Append(" MAX(AX.StartD) FROM");
3324
                strSQL.Append(" (SELECT A.d hiduke, B.MonthlySalary salary, B.STARTDATE StartD FROM");
3325

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

    
3329
                strSQL.Append(" WHERE");
3330
                if (dtStart.Year == dtLast.Year)
3331
                {
3332
                    strSQL.AppendFormat(" (A1.years = {0} AND A2.month IN(", dtStart.Year.ToString("0000"));
3333
                    for (int i = dtStart.Month; i <= dtLast.Month; i++)
3334
                    {
3335
                        if (i != dtStart.Month) strSQL.Append(", ");
3336
                        strSQL.AppendFormat("{0} ", i);
3337
                    }
3338
                    strSQL.Append("))");
3339
                }
3340
                else
3341
                {
3342
                    strSQL.Append(" (");
3343

    
3344
                    for (int iYear = dtStart.Year; iYear <= dtLast.Year; iYear++)
3345
                    {
3346
                        // 先頭以外はORを追加する
3347
                        if (iYear != dtStart.Year) strSQL.AppendFormat(" OR");
3348

    
3349
                        strSQL.AppendFormat(" (A1.years = {0}", iYear.ToString("0000"));
3350
                        strSQL.Append(" AND A2.month IN (");
3351

    
3352
                        if (iYear == dtStart.Year)
3353
                        {   // 先頭年
3354
                            for (int i = dtStart.Month; i <= 12; i++)
3355
                            {
3356
                                if (i != dtStart.Month) strSQL.Append(", ");
3357
                                strSQL.AppendFormat("{0} ", i);
3358
                            }
3359
                        }
3360
                        else if (iYear == dtLast.Year)
3361
                        {   // 最終年
3362
                            for (int i = 1; i <= dtLast.Month; i++)
3363
                            {
3364
                                if (i != 1) strSQL.Append(", ");
3365
                                strSQL.AppendFormat("{0} ", i);
3366
                            }
3367
                        }
3368
                        else
3369
                        {   // 以外の年
3370
                            for (int i = 1; i <= 12; i++)
3371
                            {
3372
                                if (i != 1) strSQL.Append(", ");
3373
                                strSQL.AppendFormat("{0} ", i);
3374
                            }
3375
                        }
3376
                        strSQL.Append("))");
3377
                    }
3378
                    strSQL.Append(")");
3379
                }
3380

    
3381
                strSQL.Append(" AND DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) IS NOT NULL");
3382
                strSQL.AppendFormat(" AND (DATE('{0}') <= DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days))", dtStart.ToShortDateString());
3383
                strSQL.AppendFormat(" AND DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) <= DATE('{0}'))", dtLast.ToShortDateString());
3384
                strSQL.Append(" ORDER BY d) A");
3385
                strSQL.Append(", PERSONSALARYMASTER AS B");
3386
                strSQL.AppendFormat(" WHERE B.PERSONCODE = {0}", PersonCode);
3387
                strSQL.Append("       AND B.STARTDATE <= A.d");
3388
                strSQL.Append(" ORDER BY A.d, B.STARTDATE DESC) AS AX");
3389
                strSQL.Append(" GROUP BY AX.hiduke");
3390
                strSQL.Append(" ORDER BY AX.hiduke");
3391
                strSQL.Append(" ) AS SAL");
3392

    
3393
                ArrayList ArData = new ArrayList();
3394
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData, bConnect)) return 0;
3395

    
3396
                foreach (object[] objRec in ArData)
3397
                {
3398
                    RetSalary += CommonMotions.cnvInt(objRec[0]);
3399
                }
3400

    
3401
                return RetSalary;
3402
            }
3403
            catch (Exception ex)
3404
            {
3405
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3406
                return 0;
3407
            }
3408
        }
3409
        #endregion
3410

    
3411
        #region 期間より零れた経過給与を取得する
3412
        /// <summary>
3413
        /// 期間より零れた経過給与を取得する
3414
        /// </summary>
3415
        /// <returns></returns>
3416
        public static void CalcSpilledSalary(IOMPersonInCharge SalDB
3417
                                            , int TargetYear, DateTime dtStart, DateTime dtLast
3418
                                            , int PersonCode
3419
                                            , ref int NextDiffDay
3420
                                            , ref int PrevDiffDay)
3421
        {
3422
            try
3423
            {
3424

    
3425
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(TargetYear, true);
3426
                DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(TargetYear, false);
3427

    
3428
                StringBuilder strSQL = new StringBuilder();
3429
                strSQL.Append("Select");
3430
                strSQL.Append(" Base.ConstructionCode");
3431
                strSQL.Append(", Ledger.ConstructionStart");
3432
                strSQL.Append(", Ledger.ConstructionEnd");
3433
                strSQL.Append(", LDetail.GroupCount");
3434
                strSQL.Append(", LDetail.SalaryFlg");
3435
                strSQL.Append(", LDetail.SalaryDays");
3436
                strSQL.Append(" From");
3437
                strSQL.Append(" constructionbaseinfo As Base");
3438
                strSQL.Append(" Inner Join constructionledger As Ledger");
3439
                strSQL.Append("       On Ledger.ConstructionCode = Base.ConstructionCode");
3440
                strSQL.AppendFormat("  And DATE('{0}') <= DATE(Ledger.ConstructionEnd)", dtDefaultStart.ToShortDateString());
3441
                strSQL.Append(" Inner Join constructionledgerdetail As LDetail");
3442
                strSQL.Append("       On LDetail.ConstructionCode = Base.ConstructionCode");
3443
                strSQL.AppendFormat(" And LDetail.GroupCount = {0}", (int)ConstructionLedgerDetail.GroupCountDef.Payroll);
3444
                strSQL.AppendFormat(" And LDetail.CompanyCode = {0}", PersonCode);
3445
                strSQL.AppendFormat(" And LDetail.SalaryFlg = {0}", (int)CommonDefine.SalaryDevision.DaysInput);
3446
                strSQL.Append(" Where");
3447

    
3448
                if (CommonMotions.BasePeriodYear())
3449
                    strSQL.AppendFormat(" Base.ConstructionPeriod = {0}", TargetYear);
3450
                else
3451
                    strSQL.AppendFormat(" Base.ConstructionYear = {0}", TargetYear);
3452

    
3453
                strSQL.AppendFormat(" And Base.ConstructionPersonCode = {0}", PersonCode);
3454
                strSQL.Append(" And (");
3455
                strSQL.AppendFormat("DATE('{0}') <= DATE(Ledger.ConstructionStart)", dtLast.ToShortDateString());
3456
                strSQL.AppendFormat(" And DATE(Ledger.ConstructionEnd) <= DATE('{0}')", dtDefaultEnd.ToShortDateString());
3457
                strSQL.Append(")");
3458

    
3459
                ArrayList ArData = new ArrayList();
3460
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return;
3461

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

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

    
3468
            }
3469
            catch (Exception ex)
3470
            {
3471
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3472
            }
3473
        }
3474
        #endregion
3475

    
3476
        #region 先期の終了後零れた日数を取得する
3477
        /// <summary>
3478
        /// 先期の終了後零れた日数を取得する
3479
        /// </summary>
3480
        /// <returns></returns>
3481
        private static int CalcSpilledPreviusDay(IOMPersonInCharge SalDB
3482
                                            , int TargetYear, DateTime dtStart, int PersonCode)
3483
        {
3484
            try
3485
            {
3486
                int RetDay = 0;
3487

    
3488
                // 先期の期末を取得する
3489
                int PrevTargetYear = (TargetYear - 1);
3490
                if (PrevTargetYear < 1) return 0;
3491
                DateTime dtPrevEnd = CommonMotions.GetOpeningEndDate((TargetYear - 1), false);
3492

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

    
3496
                StringBuilder strSQL = new StringBuilder();
3497
                strSQL.Append("Select");
3498
                strSQL.Append(" Base.ConstructionCode");
3499
                strSQL.Append(", Ledger.ConstructionStart");
3500
                strSQL.Append(", Ledger.ConstructionEnd");
3501
                strSQL.Append(", LDetail.GroupCount");
3502
                strSQL.Append(", LDetail.SalaryFlg");
3503
                strSQL.Append(", LDetail.SalaryDays");
3504
                strSQL.Append(" From");
3505
                strSQL.Append(" constructionbaseinfo As Base");
3506
                strSQL.Append(" Inner Join constructionledger As Ledger");
3507
                strSQL.Append("       On Ledger.ConstructionCode = Base.ConstructionCode");
3508
                strSQL.Append(" Inner Join constructionledgerdetail As LDetail");
3509
                strSQL.Append("       On LDetail.ConstructionCode = Base.ConstructionCode");
3510
                strSQL.AppendFormat(" And LDetail.GroupCount = {0}", (int)ConstructionLedgerDetail.GroupCountDef.Payroll);
3511
                strSQL.AppendFormat(" And LDetail.CompanyCode = {0}", PersonCode);
3512
                strSQL.AppendFormat(" And LDetail.SalaryFlg = {0}", (int)CommonDefine.SalaryDevision.DaysInput);
3513
                strSQL.Append(" Where");
3514

    
3515
                if (CommonMotions.BasePeriodYear())
3516
                    strSQL.AppendFormat(" Base.ConstructionPeriod = {0}", PrevTargetYear);
3517
                else
3518
                    strSQL.AppendFormat(" Base.ConstructionYear = {0}", PrevTargetYear);
3519

    
3520
                strSQL.AppendFormat(" And Base.ConstructionPersonCode = {0}", PersonCode);
3521
                strSQL.Append(" And(");
3522
                strSQL.AppendFormat("DATE('{0}') <= DATE(Ledger.ConstructionStart)", (dtStart.AddDays(-1)).ToShortDateString());
3523
                strSQL.AppendFormat(" And DATE(Ledger.ConstructionEnd) <= DATE('{0}')", dtPrevEnd.ToShortDateString());
3524
                strSQL.Append(")");
3525

    
3526
                ArrayList ArData = new ArrayList();
3527
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return 0;
3528

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

    
3532
                return RetDay;
3533
            }
3534
            catch (Exception ex)
3535
            {
3536
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3537
                return 0;
3538
            }
3539
        }
3540
        #endregion
3541

    
3542
        #region 経過給与を一括計算する
3543
        /// <summary>
3544
        /// 経過給与を一括計算する
3545
        /// </summary>
3546
        /// <param name="dtStart"></param>
3547
        /// <param name="PersonCode"></param>
3548
        /// <returns></returns>
3549
        public static void CalcElapsedSalaryAll(IOMPersonInCharge SalDB, int TargetYear, ArrayList TargetList, ref List<KeyValuePair<int, long>> SalDataList)
3550
        {
3551
            try
3552
            {
3553
                if (TargetList.Count < 1) return;
3554
                StringBuilder strSQL = new StringBuilder();
3555

    
3556
                // 非受注コード
3557
                int nNotOrderCode = CommonDefine.ProjectsStatus.First(x => x.Value.Equals("非 受 注")).Key;
3558

    
3559
                bool bFirst = true;
3560
                foreach (object[] ObjRec in TargetList)
3561
                {
3562
                    int DepartmentCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.DepartmentCode]);
3563
                    int PersonCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.PersonCode]);
3564
                    int nKeyCode = (DepartmentCode * 100000000) + PersonCode;
3565
                    DateTime dtStart = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.StartDate]);
3566
                    DateTime dtLast = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.CompDate]);
3567

    
3568
                    if (!bFirst) strSQL.Append(" UNION ");
3569

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

    
3572
                    strSQL.Append(" (SELECT AX.hiduke");
3573
                    strSQL.AppendFormat("   , ROUND((AX.salary * {0}) / 30) AS SALARY", CommonDefine.s_SalaryCorrection);
3574
                    strSQL.Append("         , MAX(AX.StartD)");
3575
                    strSQL.Append("  From (SELECT A.d hiduke, B.MonthlySalary salary, B.STARTDATE StartD FROM");
3576

    
3577
                    strSQL.Append("              (SELECT A1.years");
3578
                    strSQL.Append("                    , A2.month");
3579
                    strSQL.Append("                    , A3.days");
3580
                    strSQL.Append("                    , DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) AS d");
3581
                    strSQL.Append("               FROM yearmaster AS A1, monthmaster AS A2, daymaster AS A3");
3582

    
3583
                    strSQL.Append("               WHERE");
3584
                    if (dtStart.Year == dtLast.Year)
3585
                    {
3586
                        strSQL.AppendFormat(" (A1.years = {0} AND A2.month IN (", dtStart.Year.ToString("0000"));
3587
                        for (int i = dtStart.Month; i <= dtLast.Month; i++)
3588
                        {
3589
                            if (i != dtStart.Month) strSQL.Append(", ");
3590
                            strSQL.AppendFormat("{0} ", i);
3591
                        }
3592
                        strSQL.Append("))");
3593
                    }
3594
                    else
3595
                    {
3596
                        strSQL.Append(" (");
3597

    
3598
                        for (int iYear = dtStart.Year; iYear <= dtLast.Year; iYear++)
3599
                        {
3600
                            // 先頭以外はORを追加する
3601
                            if (iYear != dtStart.Year) strSQL.AppendFormat(" OR");
3602

    
3603
                            strSQL.AppendFormat(" (A1.years = {0}", iYear.ToString("0000"));
3604
                            strSQL.Append(" AND A2.month IN (");
3605

    
3606
                            if (iYear == dtStart.Year)
3607
                            {   // 先頭年
3608
                                for (int i = dtStart.Month; i <= 12; i++)
3609
                                {
3610
                                    if (i != dtStart.Month) strSQL.Append(", ");
3611
                                    strSQL.AppendFormat("{0} ", i);
3612
                                }
3613
                            }
3614
                            else if (iYear == dtLast.Year)
3615
                            {   // 最終年
3616
                                for (int i = 1; i <= dtLast.Month; i++)
3617
                                {
3618
                                    if (i != 1) strSQL.Append(", ");
3619
                                    strSQL.AppendFormat("{0} ", i);
3620
                                }
3621
                            }
3622
                            else
3623
                            {   // 以外の年
3624
                                for (int i = 1; i <= 12; i++)
3625
                                {
3626
                                    if (i != 1) strSQL.Append(", ");
3627
                                    strSQL.AppendFormat("{0} ", i);
3628
                                }
3629
                            }
3630
                            strSQL.Append("))");
3631
                        }
3632
                        strSQL.Append(")");
3633
                    }
3634

    
3635
                    strSQL.Append("              AND DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) IS NOT NULL");
3636
                    strSQL.AppendFormat("        AND (DATE('{0}') <= DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days))", dtStart.ToShortDateString());
3637
                    strSQL.AppendFormat("        AND DATE(CONCAT(A1.years, '/', A2.month, '/', A3.days)) <= DATE('{0}'))", dtLast.ToShortDateString());
3638
                    strSQL.Append("              ORDER BY d) A");
3639

    
3640
                    strSQL.Append(" , PERSONSALARYMASTER AS B");
3641
                    strSQL.Append("   Inner Join personinchargemaster As C");
3642
                    strSQL.Append("          On C.PersonCode = B.PersonCode");
3643
                    strSQL.AppendFormat("    And C.LedgerFlg = {0}", (int)PersonInChargeMaster.LedgerDivNoDef.CalcTarget);
3644

    
3645
                    strSQL.AppendFormat(" WHERE B.PERSONCODE = {0}", PersonCode);
3646
                    //strSQL.Append("       AND B.STARTDATE <= A.d");
3647
                    strSQL.Append("       AND B.STARTDATE = ");
3648
                    strSQL.Append("                          (Select BB.STARTDATE From PERSONSALARYMASTER AS BB");
3649
                    strSQL.AppendFormat("                                        Where BB.PERSONCODE = {0}", PersonCode);
3650
                    strSQL.Append("                                              AND BB.STARTDATE <= A.d");
3651
                    strSQL.Append("                                              Order By BB.STARTDATE DESC");
3652
                    strSQL.Append("                                              Limit 1)");
3653

    
3654
                    strSQL.Append(" ORDER BY A.d, B.STARTDATE DESC) AS AX");
3655
                    strSQL.Append(" GROUP BY AX.hiduke");
3656
                    strSQL.Append(" ORDER BY AX.hiduke");
3657
                    strSQL.AppendFormat(" ) AS SAL{0}", nKeyCode);
3658

    
3659
                    bFirst = false;
3660
                }
3661

    
3662
                ArrayList ArData = new ArrayList();
3663
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return;
3664

    
3665
                foreach (object[] objRec in ArData)
3666
                {
3667
                    SalDataList.Add(new KeyValuePair<int, long>(CommonMotions.cnvInt(objRec[0]), CommonMotions.cnvLong(objRec[1])));
3668
                }
3669

    
3670
            }
3671
            catch (Exception ex)
3672
            {
3673
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3674
            }
3675
        }
3676
        #endregion
3677

    
3678
        #region 期間より零れた経過給与を取得しデータテーブルの開始終了日を変更する
3679
        /// <summary>
3680
        /// 期間より零れた経過給与を取得しデータテーブルの開始終了日を変更する
3681
        /// </summary>
3682
        /// <returns></returns>
3683
        public static void CalcSpilledSalaryAll(IOMPersonInCharge SalDB
3684
                                            , int TargetYear
3685
                                            , ref ArrayList TargetList)
3686
        {
3687
            try
3688
            {
3689
                if (TargetList.Count < 1) return;
3690

    
3691
                // デフォルト開始・終了を取得する
3692
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(TargetYear, true);
3693
                DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(TargetYear, false);
3694
                DateTime dtPrevEnd = CommonMotions.GetOpeningEndDate((TargetYear - 1), false);
3695

    
3696
                // 先期の期末を取得する
3697
                int PrevTargetYear = (TargetYear - 1);
3698
                if (PrevTargetYear < 1) return;
3699

    
3700
                List<KeyValuePair<int, int>> wrkManCode = new List<KeyValuePair<int, int>>();
3701
                List<KeyValuePair<DateTime, DateTime>> wrkStEdDate = new List<KeyValuePair<DateTime, DateTime>>();
3702
                bool bFirst = true;
3703
                StringBuilder strSQL = new StringBuilder();
3704
                foreach (object[] ObjRec in TargetList)
3705
                {
3706
                    // 開始・終了日が無い場合はデフォルトの期首・期末を使用する
3707
                    DateTime stDate = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.StartDate]);
3708
                    DateTime edDate = CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.CompDate]);
3709
                    CalcStartCompDate(TargetYear,
3710
                                        dtDefaultStart, dtDefaultEnd,
3711
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.HireStartDays]),
3712
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.HireCompDays]),
3713
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.NextStartDate]),
3714
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.NextCompDate]),
3715
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.DepHistoryStartDate]),
3716
                                        CommonMotions.cnvDate(ObjRec[(int)CommonLedgerData.GetPersonTerm.DepHistoryCompDate]),
3717
                                        ref stDate, ref edDate);
3718

    
3719
                    int nDepCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.DepartmentCode]);
3720
                    int nPersonCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.PersonCode]);
3721

    
3722
                    wrkManCode.Add(new KeyValuePair<int, int>(nDepCode, nPersonCode));
3723
                    wrkStEdDate.Add(new KeyValuePair<DateTime, DateTime>(stDate, edDate));
3724

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

    
3728
                    if (!bFirst) strSQL.Append(" Union ");
3729

    
3730
                    strSQL.Append("Select");
3731
                    if (CommonMotions.BasePeriodYear())
3732
                        strSQL.Append(" Base.ConstructionPeriod");
3733
                    else
3734
                        strSQL.Append(" Base.ConstructionYear");
3735

    
3736
                    strSQL.Append(", Base.ConstructionCode");
3737
                    strSQL.Append(", LDetail.CompanyCode");
3738
                    strSQL.Append(", Ledger.ConstructionStart");
3739
                    strSQL.Append(", Ledger.ConstructionEnd");
3740
                    strSQL.Append(", LDetail.GroupCount");
3741
                    strSQL.Append(", LDetail.SalaryFlg");
3742
                    strSQL.Append(", LDetail.SalaryDays");
3743
                    strSQL.Append(", LDetail.ComponentCode");
3744
                    strSQL.Append(" From");
3745
                    strSQL.Append(" constructionbaseinfo As Base");
3746
                    strSQL.Append(" Inner Join constructionledger As Ledger");
3747
                    strSQL.Append("       On Ledger.ConstructionCode = Base.ConstructionCode");
3748
                    strSQL.AppendFormat("  And DATE('{0}') <= DATE(Ledger.ConstructionEnd)", dtDefaultStart.ToShortDateString());
3749
                    strSQL.Append(" Inner Join constructionledgerdetail As LDetail");
3750
                    strSQL.Append("       On LDetail.ConstructionCode = Base.ConstructionCode");
3751
                    strSQL.AppendFormat("  And LDetail.GroupCount = {0}", (int)ConstructionLedgerDetail.GroupCountDef.Payroll);
3752
                    strSQL.AppendFormat("  And LDetail.ComponentCode = {0}", nDepCode);
3753
                    strSQL.AppendFormat("  And LDetail.CompanyCode = {0}", nPersonCode);
3754
                    strSQL.AppendFormat("  And LDetail.SalaryFlg = {0}", (int)CommonDefine.SalaryDevision.DaysInput);
3755
                    strSQL.Append(" Where");
3756

    
3757
                    if (CommonMotions.BasePeriodYear())
3758
                        strSQL.AppendFormat(" Base.ConstructionPeriod = {0}", TargetYear);
3759
                    else
3760
                        strSQL.AppendFormat(" Base.ConstructionYear = {0}", TargetYear);
3761

    
3762
                    strSQL.AppendFormat(" And Base.ConstrDepCode = {0}", nDepCode);
3763
                    strSQL.AppendFormat(" And Base.ConstructionPersonCode = {0}", nPersonCode);
3764
                    strSQL.Append(" And(");
3765
                    strSQL.AppendFormat("DATE('{0}') <= DATE(Ledger.ConstructionStart)", edDate.ToShortDateString());
3766
                    strSQL.AppendFormat(" And DATE(Ledger.ConstructionEnd) <= DATE('{0}')", dtDefaultEnd.ToShortDateString());
3767
                    strSQL.Append(")");
3768
                    strSQL.Append(" Union Select");
3769

    
3770
                    if (CommonMotions.BasePeriodYear())
3771
                        strSQL.Append(" Base.ConstructionPeriod");
3772
                    else
3773
                        strSQL.Append(" Base.ConstructionYear");
3774

    
3775
                    strSQL.Append(", Base.ConstructionCode");
3776
                    strSQL.Append(", LDetail.CompanyCode");
3777
                    strSQL.Append(", Ledger.ConstructionStart");
3778
                    strSQL.Append(", Ledger.ConstructionEnd");
3779
                    strSQL.Append(", LDetail.GroupCount");
3780
                    strSQL.Append(", LDetail.SalaryFlg");
3781
                    strSQL.Append(", LDetail.SalaryDays");
3782
                    strSQL.Append(", LDetail.ComponentCode");
3783
                    strSQL.Append(" From");
3784
                    strSQL.Append(" constructionbaseinfo As Base");
3785
                    strSQL.Append(" Inner Join constructionledger As Ledger");
3786
                    strSQL.Append("       On Ledger.ConstructionCode = Base.ConstructionCode");
3787
                    strSQL.Append(" Inner Join constructionledgerdetail As LDetail");
3788
                    strSQL.Append("       On LDetail.ConstructionCode = Base.ConstructionCode");
3789
                    strSQL.AppendFormat("  And LDetail.GroupCount = {0}", (int)ConstructionLedgerDetail.GroupCountDef.Payroll);
3790
                    strSQL.AppendFormat("  And LDetail.ComponentCode = {0}", nDepCode);
3791
                    strSQL.AppendFormat("  And LDetail.CompanyCode = {0}", nPersonCode);
3792
                    strSQL.AppendFormat("  And LDetail.SalaryFlg = {0}", (int)CommonDefine.SalaryDevision.DaysInput);
3793
                    strSQL.Append(" Where");
3794

    
3795
                    if (CommonMotions.BasePeriodYear())
3796
                        strSQL.AppendFormat(" Base.ConstructionPeriod = {0}", PrevTargetYear);
3797
                    else
3798
                        strSQL.AppendFormat(" Base.ConstructionYear = {0}", PrevTargetYear);
3799

    
3800
                    strSQL.AppendFormat(" And Base.ConstrDepCode = {0}", nDepCode);
3801
                    strSQL.AppendFormat(" And Base.ConstructionPersonCode = {0}", nPersonCode);
3802
                    strSQL.Append(" And(");
3803
                    strSQL.AppendFormat("DATE('{0}') <= DATE(Ledger.ConstructionStart)", (stDate.AddDays(-1)).ToShortDateString());
3804
                    strSQL.AppendFormat(" And DATE(Ledger.ConstructionEnd) <= DATE('{0}')", dtPrevEnd.ToShortDateString());
3805
                    strSQL.Append(")");
3806

    
3807
                    bFirst = false;
3808
                }
3809
                // データ取得
3810
                ArrayList ArData = new ArrayList();
3811
                if (!SalDB.ExecuteReader(strSQL.ToString(), ref ArData)) return;
3812

    
3813
                foreach (object[] ObjRec in TargetList)
3814
                {
3815
                    int nDepCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.DepartmentCode]);
3816
                    int nPersonCode = CommonMotions.cnvInt(ObjRec[(int)CommonLedgerData.GetPersonTerm.PersonCode]);
3817

    
3818
                    // 半端分の日数を取得する
3819
                    int NextDiffDay = ArData.Cast<object[]>().Where(x => CommonMotions.cnvInt(x[0]) == TargetYear
3820
                                                                    && CommonMotions.cnvInt(x[8]) == nDepCode
3821
                                                                    && CommonMotions.cnvInt(x[2]) == nPersonCode)
3822
                                                            .Sum(y => CommonMotions.cnvInt(y[7]));
3823

    
3824
                    // 先期の半端分の日数を取得する
3825
                    int PrevDiffDay = ArData.Cast<object[]>().Where(x => CommonMotions.cnvInt(x[0]) == PrevTargetYear
3826
                                                                    && CommonMotions.cnvInt(x[8]) == nDepCode
3827
                                                                    && CommonMotions.cnvInt(x[2]) == nPersonCode)
3828
                                                            .Sum(y => CommonMotions.cnvInt(y[7]));
3829
                    // 同じデータを探す
3830
                    int DateCnt = 0;
3831
                    foreach (KeyValuePair<int, int> CurRec in wrkManCode)
3832
                    {
3833
                        if (CurRec.Key == nDepCode && CurRec.Value == nPersonCode) break;
3834
                        DateCnt++;
3835
                    }
3836
                    KeyValuePair<DateTime, DateTime> CurStEd = wrkStEdDate[DateCnt];
3837

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

    
3840
                    // 今期終了日変更
3841
                    DateTime wrkDate = CurStEd.Value.AddDays(NextDiffDay);
3842
                    if (dtDefaultEnd.Date < wrkDate.Date) wrkDate = dtDefaultEnd;
3843
                    ObjRec[(int)CommonLedgerData.GetPersonTerm.CompDate] = wrkDate;
3844

    
3845
                    if (dtDepMove.Date == CurStEd.Key.Date) PrevDiffDay = 0;    // 部署移動日がセットされている場合は日付を変えない
3846
                    // 今期開始日変更
3847
                    wrkDate = CurStEd.Key.AddDays(PrevDiffDay);
3848
                    if (dtDefaultEnd.Date < wrkDate.Date) wrkDate = dtDefaultEnd;
3849
                    ObjRec[(int)CommonLedgerData.GetPersonTerm.StartDate] = wrkDate;
3850
                }
3851

    
3852
            }
3853
            catch (Exception ex)
3854
            {
3855
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3856
            }
3857
        }
3858
        #endregion
3859

    
3860
        #region 計算開始・終了日のチェック入れ替え
3861
        /// <summary>
3862
        /// 計算開始・終了日のチェック入れ替え
3863
        /// </summary>
3864
        public static void CalcStartCompDate(int BusinessPeriod,
3865
                                        DateTime dtDefaultStart, DateTime dtDefaultEnd,
3866
                                        DateTime HireStartDate, DateTime HireCompDate,
3867
                                        DateTime NextStartDate, DateTime NextCompDate,
3868
                                        DateTime DepHisStDate, DateTime DepHisCompDate,
3869
                                        ref DateTime StartDate, ref DateTime CompDate)
3870
        {
3871
            try
3872
            {
3873
                // ----- 計算開始日セット
3874
                if (StartDate.Date == DateTime.MinValue.Date)
3875
                {
3876
                    // 最小値ならば今期開始をセット
3877
                    StartDate = dtDefaultStart;
3878
                }
3879
                //else if (dtDefaultStart.Date <= HireStartDate.Date && HireStartDate.Date <= dtDefaultEnd.Date)
3880
                //{
3881
                //    // 入社日が期内ならば開始を入社日にする
3882
                //    StartDate = HireStartDate;
3883
                //}
3884
                else if (dtDefaultStart.Date < StartDate.Date)
3885
                {
3886
                    // 今期工事の契約工期が今期の開始より小さい場合は今期開始をセット
3887
                    StartDate = dtDefaultStart;
3888
                }
3889
                // 入社日が期内ならば開始を入社日にする
3890
                if (dtDefaultStart.Date <= HireStartDate && HireStartDate.Date <= dtDefaultEnd.Date)
3891
                {
3892
                    StartDate = HireStartDate;
3893
                }
3894
                // 部署移動開始日が今期ならばセットする
3895
                if (dtDefaultStart.Date <= DepHisStDate.Date && DepHisStDate.Date <= dtDefaultEnd.Date)
3896
                {
3897
                    if (StartDate.Date < DepHisStDate.Date) StartDate = DepHisStDate;
3898
                }
3899

    
3900
                // ----- 計算終了日セット
3901
                // Defaultは期末
3902
                CompDate = dtDefaultEnd;
3903

    
3904
                // 退社日が期内ならば終了を退社日にする
3905
                if (dtDefaultStart.Date < HireCompDate.Date && HireCompDate.Date < dtDefaultEnd.Date)
3906
                {
3907
                    CompDate = HireCompDate;
3908
                }
3909
                else if (DepHisCompDate.Date == DateTime.MaxValue.Date)
3910
                {
3911
                    // 終了がマックスは今季終了をセットする
3912
                    CompDate = dtDefaultEnd;
3913
                }
3914
                else if (NextStartDate.Date != DateTime.MinValue.Date)
3915
                {
3916
                    // 来季の開始があって今期の場合は開始日-1に置き換える
3917
                    if (dtDefaultStart.Date < NextStartDate.Date && NextStartDate.Date < dtDefaultEnd.Date)
3918
                    {
3919
                        CompDate = NextStartDate.AddDays(-1);
3920
                    }
3921
                }
3922
                // 部署移動終了日が今期ならばセットする
3923
                if (dtDefaultStart.Date <= DepHisCompDate.Date && DepHisCompDate.Date <= dtDefaultEnd.Date)
3924
                {
3925
                    if (DepHisCompDate.Date < CompDate.Date) CompDate = DepHisCompDate;
3926
                }
3927
            }
3928
            catch (Exception ex)
3929
            {
3930
                logger.ErrorFormat("システムエラー:{0}", ex.Message);
3931
            }
3932
        }
3933
        #endregion
3934

    
3935
        #region グリッド行退避エリア初期化処理
3936
        /// <summary>
3937
        /// グリッド行退避エリア初期化処理
3938
        /// </summary>
3939
        public static void InitSavrGridRow(ref GridCellStyleMember[] BackUpStyle)
3940
        {
3941
            try
3942
            {
3943
                for (int i = 0; i < BackUpStyle.Length; i++)
3944
                {
3945
                    BackUpStyle[i] = new GridCellStyleMember();
3946
                }
3947
            }
3948
            catch (Exception ex)
3949
            {
3950
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3951
            }
3952
        }
3953
        #endregion
3954

    
3955
        #region 選択行の色を変更する
3956
        /// <summary>
3957
        /// 選択行の色を変更する
3958
        /// </summary>
3959
        public static void ChangeGridRow(DataGridViewEX dgv
3960
                                        , DataGridViewRow CurRow
3961
                                        , ref GridCellStyleMember[] BackUpStyle
3962
                                        , bool bSelect = true)
3963
        {
3964
            try
3965
            {
3966
                // カレント行バックアップ&対象色セット
3967
                for (int i = 0; i < dgv.ColumnCount; i++)
3968
                {
3969
                    if (bSelect)
3970
                    {
3971
                        BackUpStyle[i].DrowBackColor = CurRow.Cells[i].Style.BackColor;
3972
                        BackUpStyle[i].DrowFont = CurRow.Cells[i].Style.Font;
3973
                        BackUpStyle[i].DrowForeColor = CurRow.Cells[i].Style.ForeColor;
3974
                        CurRow.Cells[i].Style.BackColor = Color.Red;
3975
                        CurRow.Cells[i].Style.ForeColor = Color.White;
3976
                    }
3977
                    else
3978
                    {
3979
                        CurRow.Cells[i].Style.BackColor = BackUpStyle[i].DrowBackColor;
3980
                        CurRow.Cells[i].Style.Font = BackUpStyle[i].DrowFont;
3981
                        CurRow.Cells[i].Style.ForeColor = BackUpStyle[i].DrowForeColor;
3982
                    }
3983
                }
3984
            }
3985
            catch (Exception ex)
3986
            {
3987
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
3988
            }
3989
        }
3990
        #endregion
3991

    
3992
        #region フォームのコントロールを列挙する
3993
        /// <summary>
3994
        /// フォームのコントロールを列挙する
3995
        /// </summary>
3996
        /// <returns></returns>
3997
        public static Control[] GetAllControls(Control top)
3998
        {
3999
            ArrayList buf = new ArrayList();
4000
            foreach (Control c in top.Controls)
4001
            {
4002
                buf.Add(c);
4003
                buf.AddRange(GetAllControls(c));
4004
            }
4005
            return (Control[])buf.ToArray(typeof(Control));
4006
        }
4007
        #endregion
4008

    
4009
        #region 今期以降の判定を行う
4010
        /// <summary>
4011
        /// 今期以降の判定を行う
4012
        /// </summary>
4013
        /// <returns></returns>
4014
        public static bool CheckNowSeason(int nTarget)
4015
        {
4016
            try
4017
            {
4018
                if (CommonMotions.BasePeriodYear())
4019
                {   // 営業期数
4020
                    if (nTarget < m_systemMaster.BusinessPeriod) return false;
4021
                }
4022
                else
4023
                {   // 工事年度
4024
                    if (nTarget < m_systemMaster.ConstrYear) return false;
4025
                }
4026
                return true;
4027
            }
4028
            catch (Exception ex)
4029
            {
4030
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4031
                return false;
4032
            }
4033
        }
4034
        #endregion
4035

    
4036
        #region 部署コンボボックスデータ取得SQL作成
4037
        /// <summary>
4038
        /// 部署コンボボックスデータ取得SQL作成
4039
        /// </summary>
4040
        /// <param name="strSQL"></param>
4041
        public static void CreateDepCombBoxSQL(ref StringBuilder strSQL
4042
                                                , int nTargetCount
4043
                                                , bool bCompBase = true
4044
                                                , bool bLedgerDivNo = false
4045
                                                , bool bConstrBase = true)
4046
        {
4047
            try
4048
            {
4049
                if (CommonMotions.LoginUserData.PersonCode == CommonDefine.AdminCode)
4050
                {
4051
                    strSQL.Append("SELECT");
4052
                    strSQL.Append(" A.DEPARTMENTCODE");
4053
                    strSQL.Append(", A.DEPARTMENTSTRING");
4054
                    strSQL.Append(", A.DISPLAYORDER");
4055
                    strSQL.Append(", 1");
4056
                    strSQL.Append(" From DEPARTMENTMASTER As A");
4057
                    strSQL.AppendFormat(" Where DeleteFlg = {0}", (int)CommonDefine.DataDeleteDef.Exists);
4058
                    return;
4059
                }
4060

    
4061
                // 今期のデータかどうかを判定する
4062
                bool bNowSeason = CheckNowSeason(nTargetCount);
4063

    
4064
                strSQL.Append("SELECT");
4065
                strSQL.Append(" A.DEPARTMENTCODE");
4066
                strSQL.Append(", A.DEPARTMENTSTRING");
4067
                strSQL.Append(", A.DISPLAYORDER");
4068
                strSQL.Append(", COUNT(*)");
4069
                strSQL.Append(" FROM");
4070
                strSQL.Append(" persondepartmentmaster As AA");
4071
                strSQL.Append(" INNER JOIN ChgChargeDep As AB");
4072
                strSQL.Append("       On AB.PersonCode = AA.PersonCode");
4073
                strSQL.Append(" INNER JOIN DEPARTMENTMASTER As A");
4074
                strSQL.Append("       On A.DepartmentCode = AA.DepartmentCode");
4075
                if (bNowSeason)
4076
                {
4077
                    // 今期のプライマリテーブルは部署マスタ
4078
                    //strSQL.AppendFormat(" And A.DELETEFLG = {0}", (int)CommonDefine.DataDeleteDef.Exists);
4079
                }
4080
                else
4081
                {
4082
                    if (bConstrBase)
4083
                    {
4084
                        // 過去のデータは工事情報より取得する
4085
                        strSQL.Append(" INNER JOIN (");
4086
                        strSQL.Append("Select");
4087
                        strSQL.Append(" A1.SalesDepCode As DEPARTMENTCODE");
4088
                        strSQL.Append(", A1.SalesPersonCode As PERSONCODE");
4089
                        strSQL.Append(", B1.DetailString As DEPARTMENTSTRING");
4090
                        strSQL.Append(", ifnull(C1.DisplayOrder, 10) As DISPLAYORDER");
4091
                        strSQL.Append(" From Constructionbaseinfo As A1");
4092
                        strSQL.Append("  Inner Join constructionbaseinfodetail As B1");
4093
                        strSQL.Append("        On B1.ConstructionCode = A1.ConstructionCode");
4094
                        strSQL.AppendFormat("  And B1.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.SalesDepartmentName);
4095
                        strSQL.Append("  Left Join departmentmaster As C1");
4096
                        strSQL.Append("       On C1.DepartmentCode = A1.SalesDepCode");
4097

    
4098
                        if (CommonMotions.BasePeriodYear())
4099
                            strSQL.AppendFormat(" Where A1.ConstructionPeriod = {0}", nTargetCount);
4100
                        else
4101
                            strSQL.AppendFormat(" Where A1.ConstructionYear = {0}", nTargetCount);
4102

    
4103
                        strSQL.Append("       And A1.SalesDepCode != 0");
4104

    
4105
                        strSQL.Append(" Union Select");
4106
                        strSQL.Append(" A2.ConstrDepCode As DEPARTMENTCODE");
4107
                        strSQL.Append(", A2.ConstructionPersonCode As PERSONCODE");
4108
                        strSQL.Append(", B2.DetailString As DEPARTMENTSTRING");
4109
                        strSQL.Append(", ifnull(C2.DisplayOrder, 10) As DISPLAYORDER");
4110
                        strSQL.Append(" From Constructionbaseinfo As A2");
4111
                        strSQL.Append(" Inner Join constructionbaseinfodetail As B2");
4112
                        strSQL.Append("       On B2.ConstructionCode = A2.ConstructionCode");
4113
                        strSQL.AppendFormat(" And B2.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.ConstrDepartmentName);
4114
                        strSQL.Append(" Left Join departmentmaster As C2");
4115
                        strSQL.Append("      On C2.DepartmentCode = A2.ConstrDepCode");
4116

    
4117
                        if (CommonMotions.BasePeriodYear())
4118
                            strSQL.AppendFormat(" Where A2.ConstructionPeriod = {0}", nTargetCount);
4119
                        else
4120
                            strSQL.AppendFormat(" Where A2.ConstructionYear = {0}", nTargetCount);
4121

    
4122
                        strSQL.Append("       And A2.ConstrDepCode != 0");
4123

    
4124
                        strSQL.Append(" Union Select");
4125
                        strSQL.Append(" A3.ConstrSubDepCode As DEPARTMENTCODE");
4126
                        strSQL.Append(", A3.ConstrSubPersonCode As PERSONCODE");
4127
                        strSQL.Append(", B3.DetailString As DEPARTMENTSTRING");
4128
                        strSQL.Append(", ifnull(C3.DisplayOrder, 10) As DISPLAYORDER");
4129
                        strSQL.Append(" From Constructionbaseinfo As A3");
4130
                        strSQL.Append(" Inner Join constructionbaseinfodetail As B3");
4131
                        strSQL.Append("       On B3.ConstructionCode = A3.ConstructionCode");
4132
                        strSQL.AppendFormat(" And B3.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.ConstrSubDepartmentName);
4133
                        strSQL.Append(" Left Join departmentmaster As C3");
4134
                        strSQL.Append("      On C3.DepartmentCode = A3.ConstrSubDepCode");
4135

    
4136
                        if (CommonMotions.BasePeriodYear())
4137
                            strSQL.AppendFormat(" Where A3.ConstructionPeriod = {0}", nTargetCount);
4138
                        else
4139
                            strSQL.AppendFormat(" Where A3.ConstructionYear = {0}", nTargetCount);
4140

    
4141
                        strSQL.Append("       And A3.ConstrSubDepCode != 0");
4142

    
4143
                        strSQL.Append(" Union Select");
4144
                        strSQL.Append(" A4.ConstrInstrDepCode As DEPARTMENTCODE");
4145
                        strSQL.Append(", A4.ConstructionInstructor As PERSONCODE");
4146
                        strSQL.Append(", B4.DetailString As DEPARTMENTSTRING");
4147
                        strSQL.Append(", ifnull(C4.DisplayOrder, 10) As DISPLAYORDER");
4148
                        strSQL.Append(" From Constructionbaseinfo As A4");
4149
                        strSQL.Append(" Inner Join constructionbaseinfodetail As B4");
4150
                        strSQL.Append("       On B4.ConstructionCode = A4.ConstructionCode");
4151
                        strSQL.AppendFormat(" And B4.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.InstrDepartmentName);
4152
                        strSQL.Append(" Left Join departmentmaster As C4");
4153
                        strSQL.Append("      On C4.DepartmentCode = A4.ConstrInstrDepCode");
4154

    
4155
                        if (CommonMotions.BasePeriodYear())
4156
                            strSQL.AppendFormat(" Where A4.ConstructionPeriod = {0}", nTargetCount);
4157
                        else
4158
                            strSQL.AppendFormat(" Where A4.ConstructionYear = {0}", nTargetCount);
4159

    
4160
                        strSQL.Append("       And A4.ConstrInstrDepCode != 0");
4161

    
4162
                        strSQL.Append(" Union Select");
4163
                        strSQL.Append(" A5.SalesSubDepCode As DEPARTMENTCODE");
4164
                        strSQL.Append(", A5.SalesSubPersonCode As PERSONCODE");
4165
                        strSQL.Append(", B5.DetailString As DEPARTMENTSTRING");
4166
                        strSQL.Append(", ifnull(C5.DisplayOrder, 10) As DISPLAYORDER");
4167
                        strSQL.Append(" From Constructionbaseinfo As A5");
4168
                        strSQL.Append(" Inner Join constructionbaseinfodetail As B5");
4169
                        strSQL.Append("       On B5.ConstructionCode = A5.ConstructionCode");
4170
                        strSQL.AppendFormat(" And B5.DetailNo = {0}", (int)ConstructionBaseInfoDetail.DataNoDef.SalesSubDepartmentName);
4171
                        strSQL.Append(" Left Join departmentmaster As C5");
4172
                        strSQL.Append("      On C5.DepartmentCode = A5.SalesSubDepCode");
4173

    
4174
                        if (CommonMotions.BasePeriodYear())
4175
                            strSQL.AppendFormat(" Where A5.ConstructionPeriod = {0}", nTargetCount);
4176
                        else
4177
                            strSQL.AppendFormat(" Where A5.ConstructionYear = {0}", nTargetCount);
4178

    
4179
                        strSQL.Append("       And A5.ConstrInstrDepCode != 0");
4180

    
4181
                        strSQL.Append(") As D On D.DEPARTMENTCODE = AA.DepartmentCode");
4182
                    }
4183
                }
4184

    
4185
                if (bNowSeason && bCompBase)
4186
                {   // 対象が今期の場合で工事情報の登録を確認する時
4187
                    strSQL.Append(" Inner Join CONSTRUCTIONBASEINFO C");
4188
                    strSQL.Append("       On C.ConstrDepCode = A.DepartmentCode");
4189
                }
4190

    
4191
                // 台帳計算対象外は外す
4192
                //if (bLedgerDivNo) strSQL.Append(", PERSONINCHARGEMASTER B");
4193

    
4194
                strSQL.Append(" WHERE");
4195
                strSQL.AppendFormat(" AA.PersonCode = {0}", CommonMotions.LoginUserData.PersonCode);
4196

    
4197
                DateTime dtDefaultStart = CommonMotions.GetOpeningEndDate(nTargetCount, true);
4198
                DateTime dtDefaultEnd = CommonMotions.GetOpeningEndDate(nTargetCount, false);
4199

    
4200
                if (bNowSeason)
4201
                {
4202
                    // 対象が今期の場合
4203
                    //strSQL.AppendFormat(" And DATE(A.StartDate) <= DATE('{0}')", dtDefaultEnd.ToShortDateString());
4204
                    // 開始日が今日より小さい
4205
                    strSQL.AppendFormat(" And DATE(A.StartDate) <= DATE('{0}')", DateTime.Today.ToShortDateString());
4206

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

    
4220
                    //strSQL.AppendFormat(" AND ((DATE(AB.STARTDATE) <= DATE('{0}'))", dtDefaultEnd.ToShortDateString());
4221
                    //strSQL.AppendFormat(" AND(DATE('{0}') <= DATE(AB.CompDate)", dtDefaultStart.ToShortDateString());
4222
                    //strSQL.AppendFormat(" OR DATE('{0}') = DATE(AB.CompDate)))", DateTime.MinValue.ToShortDateString());
4223
                }
4224

    
4225
                if (bNowSeason)
4226
                    strSQL.Append(" And (");
4227
                else
4228
                    strSQL.Append(" And");
4229

    
4230
                strSQL.Append(" (0 < (SELECT COUNT(*) FROM constructionbaseinfo AS BX");
4231

    
4232
                if (CommonMotions.BasePeriodYear())
4233
                    strSQL.AppendFormat(" Where BX.ConstructionPeriod = {0}", nTargetCount);
4234
                else
4235
                    strSQL.AppendFormat(" Where BX.ConstructionYear = {0}", nTargetCount);
4236
                strSQL.Append("                 AND (BX.SalesDepCode = AA.DepartmentCode");
4237
                strSQL.Append("                 Or BX.ConstrDepCode = AA.DepartmentCode");
4238
                strSQL.Append("                 Or BX.ConstrSubDepCode = AA.DepartmentCode");
4239
                strSQL.Append("                 Or BX.ConstrInstrDepCode = AA.DepartmentCode)))");
4240

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

    
4251
                strSQL.Append(" GROUP BY A.DEPARTMENTCODE, A.DEPARTMENTSTRING, A.DISPLAYORDER");
4252
                strSQL.Append(" ORDER BY A.DISPLAYORDER ASC");
4253
            }
4254
            catch (Exception ex)
4255
            {
4256
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4257
            }
4258
        }
4259
        #endregion
4260

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

    
4280
                strSQL.AppendFormat("Select {0} From", IOMPersonInCharge.CreateFieldNameList("A."));
4281
                strSQL.Append(" personinchargemaster As A");
4282
                strSQL.Append(" Left Join chgchargedep As B");
4283
                strSQL.Append("       On B.PersonCode = A.PersonCode");
4284

    
4285
                strSQL.Append(" WHERE");
4286
                strSQL.AppendFormat("     ((DATE(A.STARTDATE) <= DATE('{0}'))", dtDefaultEnd.ToShortDateString());
4287
                strSQL.AppendFormat("  AND (DATE('{0}') <= DATE(A.ENDDATE)", dtDefaultStart.ToShortDateString());
4288
                strSQL.AppendFormat("  OR   DATE('{0}') = DATE(A.ENDDATE)))", DateTime.MinValue.ToShortDateString());
4289

    
4290
                strSQL.AppendFormat(" AND ((DATE(B.STARTDATE) <= DATE('{0}'))", dtDefaultEnd.ToShortDateString());
4291
                strSQL.AppendFormat("  AND (DATE('{0}') <= DATE(B.CompDate)", dtDefaultStart.ToShortDateString());
4292
                strSQL.AppendFormat("  OR   DATE('{0}') = DATE(B.CompDate)))", DateTime.MinValue.ToShortDateString());
4293

    
4294
                if ((nDepCode > 0 && nPersonCode > 0) && nPersonCode != CommonDefine.AdminCode)
4295
                {
4296
                    if (CheckNowSeason(nTargetYear))
4297
                    {
4298
                        strSQL.Append(" And (A.DepartmentCode in (Select C.DepartmentCode From persondepartmentmaster As C");
4299
                        strSQL.AppendFormat(" Where C.PersonCode = {0})", nPersonCode);
4300
                        strSQL.AppendFormat(" Or A.DepartmentCode = {0})", nDepCode);
4301
                    }
4302
                    else
4303
                    {
4304
                        strSQL.Append(" And A.DepartmentCode in (Select C.DepartmentCode From persondepartmentmaster As C");
4305
                        strSQL.AppendFormat(" Where C.PersonCode = {0})", nPersonCode);
4306
                    }
4307
                }
4308

    
4309
                // 新規のデータは削除者を表示しない
4310
                if (bNewDataFlg)
4311
                {
4312
                    strSQL.AppendFormat(" And A.DELETEFLG = {0}", (int)CommonDefine.DataDeleteDef.Exists);
4313
                }
4314
                // 開始日が今日より小さい
4315
                strSQL.AppendFormat(" And DATE(A.StartDate) <= DATE('{0}')", DateTime.Today.ToShortDateString());
4316

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

    
4319
                // 台帳計算対象外
4320
                if (bLedgerDivNo)
4321
                {
4322
                    strSQL.AppendFormat(" And A.LedgerFlg = {0}", (int)PersonInChargeMaster.LedgerDivNoDef.CalcTarget);
4323
                }
4324

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

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

    
4374
                strSQL.Append("Select");
4375
                strSQL.Append(" A.PersonCode");
4376
                strSQL.Append(", A.PersonName");
4377
                strSQL.Append(", B.DepartmentCode");
4378
                strSQL.Append(", B.DepartmentName");
4379
                strSQL.Append(" From personinchargemaster As A");
4380
                strSQL.Append("      Left Join chgchargedep As B");
4381
                strSQL.Append("           On B.PersonCode = A.PersonCode");
4382

    
4383
                strSQL.Append(" WHERE");
4384
                strSQL.AppendFormat(" ((DATE(A.STARTDATE) <= DATE('{0}'))", dtDefaultEnd.ToShortDateString());
4385
                strSQL.AppendFormat(" AND (DATE('{0}') <= DATE(A.ENDDATE)", dtDefaultStart.ToShortDateString());
4386
                strSQL.AppendFormat(" OR DATE('{0}') = DATE(A.ENDDATE)))", DateTime.MinValue.ToShortDateString());
4387

    
4388
                if (dtPettion.Date == DateTime.MinValue.Date) dtPettion = dtDefaultEnd;
4389
                strSQL.AppendFormat(" AND ((DATE(B.STARTDATE) <= DATE('{0}'))", dtPettion.ToShortDateString());
4390
                strSQL.AppendFormat(" AND(DATE('{0}') <= DATE(B.CompDate)", dtPettion.ToShortDateString());
4391
                strSQL.AppendFormat(" OR DATE('{0}') = DATE(B.CompDate)))", DateTime.MaxValue.ToShortDateString());
4392

    
4393
                strSQL.AppendFormat(" AND A.PersonCode = {0}", nPersonCode);
4394
                strSQL.Append(" Order By B.CompDate desc");
4395
            }
4396
            catch (Exception ex)
4397
            {
4398
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4399
            }
4400
        }
4401
        #endregion
4402

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

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

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

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

    
4480
                    strSQL.Append(" LEFT JOIN (SELECT");
4481
                    strSQL.Append("                BB.NAMECODE");
4482
                    strSQL.Append("              , BB.DEPARTMENTCODE");
4483
                    strSQL.Append("              , BB.EXPENSESRAITO");
4484
                    strSQL.Append("              , BB.EXPENSESPERIOD");
4485
                    strSQL.Append("              , BB.DisplayOrder");
4486
                    strSQL.Append("            FROM DEPARTMENTEXPENSESMASTER AS BB) AS B");
4487
                    strSQL.Append("      ON A.NAMECODE = B.NAMECODE");
4488
                    strSQL.AppendFormat(" AND B.EXPENSESPERIOD = {0}", Preiod);
4489
                    if (DepartmentCode > 0) strSQL.AppendFormat(" AND B.DEPARTMENTCODE = {0}", DepartmentCode);
4490

    
4491
                    strSQL.Append(" LEFT JOIN departmentmaster AS C");
4492
                    strSQL.Append("      On C.DepartmentCode = B.DEPARTMENTCODE");
4493

    
4494
                    strSQL.Append(" WHERE");
4495
                    strSQL.AppendFormat(" A.DIVISIONCODE = {0}", (int)DivisionMaster.DivisionMasterCodeDef.ConstructionExpenses);
4496
                    strSQL.AppendFormat(" AND A.DeleteFlg = {0}", (int)CommonDefine.DataDeleteDef.Exists);
4497
                    strSQL.Append(" And B.EXPENSESRAITO > 0.00");
4498

    
4499
                    strSQL.Append(" ORDER BY A.DISPLAYORDER, C.DISPLAYORDER");
4500
                }
4501
                else
4502
                {   // 以前のデータ
4503
                    strSQL.Append("SELECT");
4504
                    strSQL.Append(" B.NAMESTRING");
4505
                    strSQL.Append(", B.EXPENSESRAITO");
4506
                    strSQL.Append(", B.NAMECODE");
4507
                    strSQL.Append(", B.DEPARTMENTCODE");
4508
                    strSQL.Append(", B.DeleteFlg");
4509
                    strSQL.Append(" FROM DEPARTMENTEXPENSESMASTER AS B");
4510

    
4511
                    strSQL.Append(" INNER JOIN departmentmaster AS C");
4512
                    strSQL.Append("        On C.DepartmentCode = B.DEPARTMENTCODE");
4513

    
4514
                    strSQL.Append(" INNER JOIN divisionmaster AS D");
4515
                    strSQL.AppendFormat("  ON D.DIVISIONCODE = {0}", (int)DivisionMaster.DivisionMasterCodeDef.ConstructionExpenses);
4516
                    strSQL.Append("        And D.NameCode = B.NameCode");
4517

    
4518
                    strSQL.Append(" WHERE");
4519
                    strSQL.AppendFormat(" B.EXPENSESPERIOD = {0}", Preiod);
4520
                    if (DepartmentCode > 0) strSQL.AppendFormat(" AND B.DEPARTMENTCODE = {0}", DepartmentCode);
4521
                    strSQL.Append(" And B.EXPENSESRAITO > 0.00");
4522

    
4523
                    strSQL.Append(" ORDER BY D.DeleteFlg, C.DISPLAYORDER, B.DISPLAYORDER");
4524
                }
4525

    
4526
                ExpensesList.Clear();
4527
                if (!expDB.ExecuteReader(strSQL.ToString(), ref ExpensesList)) return false;
4528
                if (ExpensesList.Count == 0) return false;
4529

    
4530
                return true;
4531
            }
4532
            catch (Exception ex)
4533
            {
4534
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4535
                return false;
4536
            }
4537
            finally
4538
            {
4539
                expDB.close(); expDB = null;
4540
            }
4541
        }
4542
        #endregion
4543

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

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

    
4600
        #region 現在適応消費税を取得する
4601
        /// <summary>
4602
        /// 現在適応消費税を取得する
4603
        /// </summary>
4604
        /// <returns></returns>
4605
        public static double AdaptationConsumptionTax()
4606
        {
4607
            double dRet = CommonMotions.SystemMasterData.ConsumptionTax;
4608
            try
4609
            {
4610
                // 実装途中
4611

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

    
4631
                int nYear = cnvTruncate(nYMD / 10000);
4632
                int nMonth = cnvTruncate((nYMD - (nYear * 10000)) / 100);
4633
                int nDay = nYMD - ((nYear * 10000) + (nMonth * 100));
4634
                DateTime dateTime = new DateTime(nYear, nMonth, nDay);
4635

    
4636
                ConsumptionTax taxes = m_ConsumptionTax.Where(x => (x.StartDate.Date <= dateTime.Date)
4637
                                                                    && (dateTime.Date <= x.ComplateDate.Date))
4638
                                                        .First();
4639

    
4640
                if (taxes != null) dRet = (double)taxes.TaxRate;
4641

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

    
4661
                ConsumptionTax taxes = m_ConsumptionTax.Where(x => (x.StartDate.Date <= dtYMD.Date)
4662
                                                                    && (dtYMD.Date <= x.ComplateDate.Date))
4663
                                                        .First();
4664

    
4665
                if (taxes != null) dRet = (double)taxes.TaxRate;
4666

    
4667
                return dRet;
4668
            }
4669
            catch (Exception ex)
4670
            {
4671
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4672
                return dRet;
4673
            }
4674
        }
4675
        #endregion
4676

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

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

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

    
4697
                // 参照部署のチェック
4698
                bool bRet = false;
4699
                foreach (PersonDepartmentMaster CurRec in m_LoginUserRefDepartment)
4700
                {
4701
                    if (CurRec.DepartmentCode == ManRec.DepartmentCode)
4702
                    {
4703
                        bRet = true;
4704
                        break;
4705
                    }
4706
                }
4707

    
4708
                return bRet;
4709
            }
4710
            catch (Exception ex)
4711
            {
4712
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4713
                return false;
4714
            }
4715
            finally
4716
            {
4717
                ManDB.close(); ManDB = null;
4718
            }
4719
        }
4720
        #endregion
4721

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

    
4749
                ArrayList arList = new ArrayList();
4750
                FreeDB.ExecuteReader(strSQL.ToString(), ref arList);
4751

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

    
4771
                ArrayList WeekList = new ArrayList();
4772
                FreeDB.ExecuteReader(strSQL.ToString(), ref WeekList);
4773

    
4774
                object[] objWeek = null;
4775
                DateTime dtEnd = DateTime.Today;
4776
                if (WeekList.Count > 0)
4777
                {
4778
                    objWeek = (object[])WeekList[0];
4779
                    // 退職日が無い場合は日付をMAXにする
4780
                    dtEnd = CommonMotions.cnvDate(objWeek[9]).Date == DateTime.MinValue.Date
4781
                                                                            ? DateTime.MaxValue.Date
4782
                                                                            : CommonMotions.cnvDate(objWeek[9]).Date;
4783
                }
4784

    
4785
                DateTime dtRet = DateTime.MinValue;
4786
                int nPrevCount = 0;
4787
                foreach (object[] objCalender in arList)
4788
                {
4789
                    // まず今日を探す
4790
                    DateTime dtwork = CommonMotions.cnvDate(objCalender[0]);
4791
                    if (DateTime.Today.Date < dtwork.Date) continue;
4792

    
4793
                    // 休日は除外する
4794
                    DateTime dtholiday = CommonMotions.cnvDate(objCalender[1]);
4795
                    if (DateTime.MinValue.Date != dtholiday.Date) continue;
4796

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

    
4805
                        //退職日以降は除外する
4806
                        if (dtEnd < dtwork.Date) continue;
4807
                    }
4808

    
4809
                    nPrevCount++;
4810
                    if (nCount <= nPrevCount)
4811
                    {
4812
                        dtRet = dtwork;
4813
                        break;
4814
                    }
4815
                }
4816

    
4817
                return dtRet;
4818
            }
4819
            catch (Exception ex)
4820
            {
4821
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4822
                return DateTime.Today;
4823
            }
4824
            finally
4825
            {
4826
                FreeDB.close(); FreeDB = null;
4827
            }
4828
        }
4829
        #endregion
4830

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

    
4851
                return string.Join("\r\n", textList.ToArray());
4852
            }
4853
            catch (Exception ex)
4854
            {
4855
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4856
                return string.Empty;
4857
            }
4858
        }
4859
        #endregion
4860

    
4861
        #region 日付から曜日を取得してマスタの休みと比較する
4862
        /// <summary>
4863
        /// 日付から曜日を取得してマスタの休みと比較する
4864
        /// </summary>
4865
        /// <returns></returns>
4866
        public static bool MasterHolidayCheck(DateTime DispDate, WorkingTime WDataRec)
4867
        {
4868
            try
4869
            {
4870
                // 曜日取得
4871
                DayOfWeek dowWork = DispDate.DayOfWeek;
4872

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

    
4901
                return true;
4902
            }
4903
            catch (Exception ex)
4904
            {
4905
                logger.ErrorFormat("システムエラー:{0}:{1}", CommonMotions.GetMethodName(), ex.Message);
4906
                return false;
4907
            }
4908
        }
4909
        #endregion
4910

    
4911
        #endregion
4912

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

    
4944
        #endregion
4945
        #endregion
4946

    
4947
        #region デバッグ用メソッド
4948
        /// <summary>
4949
        /// デバッグ用メソッド
4950
        /// </summary>
4951
        /// <param name="DebugPrint">表示文字列</param>
4952
        public static void DebugWriteLine_TimeNow(string DebugPrint)
4953
        {
4954
            string wrkPrint = DateTime.Now.ToLongTimeString() +
4955
                                ((double)DateTime.Now.Millisecond / 1000.0000).ToString("#.0000");
4956

    
4957
            Debug.WriteLine(DebugPrint + ":" + wrkPrint);
4958
        }
4959

    
4960
        public static void DebugWriteLine_DateTimeNow(string DebugPrint)
4961
        {
4962
            string wrkPrint = DateTime.Now.ToLongDateString() + " " +
4963
                                DateTime.Now.ToLongTimeString() + "." +
4964
                                DateTime.Now.Millisecond.ToString();
4965

    
4966
            Debug.WriteLine(DebugPrint + ":" + wrkPrint);
4967
        }
4968
        #endregion
4969
    }
4970
}