public CheckLotAndMachineCompatibilityResult CheckLotAndMachineCompatibility(LotInfo lotInfo, MachineInfo machineInfo)
        {
            Stopwatch functionTimer = new Stopwatch();

            functionTimer.Start();
            int stepCount = 1;
            Dictionary <int, string> WarningMessage = new Dictionary <int, string>();

            //1.) machine must be set as high reliability if lot is auto motive
            if (lotInfo.IsAutomotive && !machineInfo.IsAutomotive)
            {
                functionTimer.Stop();
                SaveFunctionLog("CheckLotAndMachineCompatibility", functionTimer.ElapsedMilliseconds, DateTime.Now);
                return(new CheckLotAndMachineCompatibilityResult(11, WarningMessage, "www.google.com", stepCount));
            }
            stepCount += 1;
            //2.) check machine ...
            //  2.1) process step must be equal
            if (machineInfo.Job == null)
            {
                functionTimer.Stop();
                SaveFunctionLog("CheckLotAndMachineCompatibility", functionTimer.ElapsedMilliseconds, DateTime.Now);
                return(new CheckLotAndMachineCompatibilityResult(27, WarningMessage, "www.google.com", stepCount));
            }
            if (lotInfo.Job == null)
            {
                functionTimer.Stop();
                SaveFunctionLog("CheckLotAndMachineCompatibility", functionTimer.ElapsedMilliseconds, DateTime.Now);
                return(new CheckLotAndMachineCompatibilityResult(28, WarningMessage, "www.google.com", stepCount));
            }
            for (int i = 0; i < machineInfo.Job.Length; i++)
            {
                if (lotInfo.Job.Id == machineInfo.Job[i].Id)
                {
                    break;
                }
                if (i == machineInfo.Job.Length - 1)
                {
                    functionTimer.Stop();
                    SaveFunctionLog("CheckLotAndMachineCompatibility", functionTimer.ElapsedMilliseconds, DateTime.Now);
                    return(new CheckLotAndMachineCompatibilityResult(12, WarningMessage, "www.google.com", stepCount));
                }
            }
            //  2.2) machine type must equal to specific as the lot needed

            //3.) machine's material check
            //  3.1) material type check
            //  3.2) material life time check
            //  3.3) material usagable date check

            //4.) machine's jig check
            //  4.1) jig type check
            //  4.2) jig life time check

            //5.) machine's equipment check
            //  5.1) equipment type check
            //  5.2) equipment setting check
            //  5.3) equipment quantity check

            functionTimer.Stop();
            SaveFunctionLog("CheckLotAndMachineCompatibility", functionTimer.ElapsedMilliseconds, DateTime.Now);
            return(new CheckLotAndMachineCompatibilityResult(WarningMessage));
        }
        public CheckLotConditionResult CheckLotCondition(LotInfo lotInfo)
        {
            Stopwatch functionTimer = new Stopwatch();

            functionTimer.Start();
            int stepCount = 1;
            Dictionary <int, string> WarningMessage = new Dictionary <int, string>();

            if (lotInfo == null)
            {
                functionTimer.Stop();
                SaveFunctionLog("CheckLotCondition", functionTimer.ElapsedMilliseconds, DateTime.Now);
                return(new CheckLotConditionResult(10, WarningMessage, "www.google.com", stepCount));
            }
            stepCount += 1;
            if (lotInfo.LotState == null)
            {
                functionTimer.Stop();
                SaveFunctionLog("CheckLotCondition", functionTimer.ElapsedMilliseconds, DateTime.Now);
                return(new CheckLotConditionResult(26, WarningMessage, "www.google.com", stepCount));
            }
            if (lotInfo.LotState.ProcessState == 1)
            {
                functionTimer.Stop();
                SaveFunctionLog("CheckLotCondition", functionTimer.ElapsedMilliseconds, DateTime.Now);
                return(new CheckLotConditionResult(13, WarningMessage, "www.google.com", stepCount));
            }
            if (lotInfo.LotState.ProcessState == 2)
            {
                functionTimer.Stop();
                SaveFunctionLog("CheckLotCondition", functionTimer.ElapsedMilliseconds, DateTime.Now);
                return(new CheckLotConditionResult(14, WarningMessage, "www.google.com", stepCount));
            }
            if (lotInfo.LotState.ProcessState == 3)
            {
                functionTimer.Stop();
                SaveFunctionLog("CheckLotCondition", functionTimer.ElapsedMilliseconds, DateTime.Now);
                return(new CheckLotConditionResult(15, WarningMessage, "www.google.com", stepCount));
            }
            stepCount += 1;
            if (lotInfo.LotState.QualityState == 1)
            {
                functionTimer.Stop();
                SaveFunctionLog("CheckLotCondition", functionTimer.ElapsedMilliseconds, DateTime.Now);
                return(new CheckLotConditionResult(16, WarningMessage, "www.google.com", stepCount));
            }
            if (lotInfo.LotState.QualityState == 2)
            {
                functionTimer.Stop();
                SaveFunctionLog("CheckLotCondition", functionTimer.ElapsedMilliseconds, DateTime.Now);
                return(new CheckLotConditionResult(17, WarningMessage, "www.google.com", stepCount));
            }
            if (lotInfo.LotState.QualityState == 3)
            {
                functionTimer.Stop();
                SaveFunctionLog("CheckLotCondition", functionTimer.ElapsedMilliseconds, DateTime.Now);
                return(new CheckLotConditionResult(18, WarningMessage, "www.google.com", stepCount));
            }
            functionTimer.Stop();
            SaveFunctionLog("CheckMachineCondition", functionTimer.ElapsedMilliseconds, DateTime.Now);
            return(new CheckLotConditionResult(WarningMessage));
        }