private void LoadOperationPlanCompleted(LoadOperation<plan> aLoadOperation)
        {
            planRemindList.Clear();
            App app = Application.Current as App;
            planRemindList = new ObservableCollection<PlanEntity>();
            if (null != app.UserInfo)
            {
                string userName = app.UserInfo.UserName;

                IEnumerable<string> project_responsibles_MN =
                                                      from c in productDomainContext.project_responsibles
                                                      where c.responsible_persionName == app.UserInfo.UserName
                                                      || (app.UserInfo.IsManager ? c.department_id == app.UserInfo.DepartmentID : false)
                                                      select c.manufacture_number;

                if (0 != project_responsibles_MN.Count())
                {
                    foreach (string itemMN in project_responsibles_MN)
                    {
                        IEnumerable<project> projects =
                                                      from c in planManagerDomainContext.projects
                                                      where c.manufacture_number == itemMN
                                                      select c;
                        if (0 == projects.Count())
                        {
                            continue;
                        }

                        project projectInfo = projects.First<project>();
                        if (string.IsNullOrEmpty(projectInfo.plan_version_id)
                            || (projectInfo.isdelete.HasValue && projectInfo.isdelete.Value))
                        {
                            continue;
                        }
                        ProjectEntity projectDetail = new ProjectEntity();
                        projectDetail.Project = projectInfo;
                        projectDetail.Update();

                        UserRemindEntity lUserRemindEntity;
                        if (UserRemindEntityDicationary.TryGetValue(projectDetail.ManufactureNumber, out lUserRemindEntity))
                        {
                            projectDetail.UserRemindEntity = lUserRemindEntity;
                        }

                        IEnumerable<string> respUserName = from c in productDomainContext.project_responsibles
                                                           where c.manufacture_number == itemMN && c.department_id == app.UserInfo.DepartmentID
                                                           select c.responsible_persionName;

                        String respUserNameString = respUserName.First();

                        IEnumerable<plan> plans;
                        if (app.UserInfo.DepartmentID != 1000)
                        {
                            plans = from c in planManagerDomainContext.plans
                                    where c.manufacture_number == itemMN && c.department_id == app.UserInfo.DepartmentID
                                              && c.version_id == projectInfo.plan_version_id
                                    select c;
                        }
                        else
                        {
                            plans = from c in planManagerDomainContext.plans
                                    where c.manufacture_number == itemMN && c.version_id == projectInfo.plan_version_id
                                    select c;
                        }
                        //IEnumerable<plan> plans = from c in planManagerDomainContext.plans
                        //                          where c.manufacture_number == itemMN && c.department_id == app.UserInfo.DepartmentID
                        //                                    && c.version_id == projectInfo.plan_version_id
                        //                          select c;
                        foreach (plan planItem in plans)
                        {
                            if (planItem.accomplish_date.HasValue)
                            {
                                continue;
                            }

                            int remindDay = ("设计节点" == planItem.sheet_name) ? projectDetail.RemindDayDesign :
                                (("采购节点" == planItem.sheet_name) ? projectDetail.RemindDayPurchase : projectDetail.RemindDayProduce);

                            Nullable<DateTime> targetDateTime = planItem.target_date_adjustment2.HasValue ? planItem.target_date_adjustment2.Value :
                                                (planItem.target_date_adjustment1.HasValue ? planItem.target_date_adjustment1.Value : planItem.target_date);

                            if (!targetDateTime.HasValue)
                            {
                                continue;
                            }

                            DateTime currentDateTime = DateTime.Now;
                            TimeSpan difference = targetDateTime.Value - currentDateTime;

                            if (difference.Days > remindDay)
                            {
                                continue;
                            }

                            PlanEntity planEntity = new PlanEntity();
                            planEntity.Plan = planItem;
                            planEntity.Update();
                            planEntity.Plan = null;
                            planEntity.PlanRemindDay = remindDay;
                            planEntity.ProjectName = projectInfo.project_name;
                            planEntity.TargetDate = targetDateTime.Value;
                            planEntity.RespUserName = respUserNameString;
                            string getDepartmentName;
                            if (departmentIdNameDictionary.TryGetValue(planEntity.DepartmentId, out getDepartmentName))
                            {
                                planEntity.DepartmentName = getDepartmentName;
                            }
                            planRemindList.Add(planEntity);
                        }
                    }
                }
            }
            UpdateChanged("planRemindList");
            IsBusy = false;
        }
        private bool GetPorjectPlanList(ProjectEntity item, string aPlanVersionId, bool aIsSetable,
            ref Dictionary<string, ObservableCollection<PlanEntity>> aPlanListDictionary, 
            ref Dictionary<string, int> aModuleIndexDictionary)
        {
            bool rturnValue = false;
            IEnumerable<string> sheetNames = from c in planManagerDomainContext.plans
                                             where c.manufacture_number == item.ManufactureNumber.TrimEnd()
                                                && c.version_id == aPlanVersionId
                                             select c.sheet_name;
            if (sheetNames.Count() > 0)
            {
                ObservableCollection<string> differentSheets = new ObservableCollection<string>();
                foreach(string originalValue in sheetNames)
                {
                    if (null == originalValue)
                    {
                        continue;
                    }
                    string value = originalValue;

                    if ("设计完成节点" == value)
                    {
                        value = "设计节点";
                    }
                    else if ("采购完成节点" == value)
                    {
                        value = "采购节点";
                    }
                    else if ("生产完成节点" == value)
                    {
                        value = "生产节点";
                    }

                    if (differentSheets.Contains(value))
                    {
                        continue;
                    }

                    differentSheets.Add(value);

                    IEnumerable<plan> selectedPlans = from c in planManagerDomainContext.plans
                                                      where c.manufacture_number == item.ManufactureNumber.TrimEnd()
                                                        && c.version_id == aPlanVersionId
                                                        && c.sheet_name == originalValue
                                                      select c;
                    if (selectedPlans.Count() > 0)
                    {
                        if(!aModuleIndexDictionary.Keys.Contains(value))
                        {
                            aModuleIndexDictionary.Add(value, 0);
                        }

                        if (!aPlanListDictionary.Keys.Contains(value))
                        {
                            aPlanListDictionary.Add(value, new ObservableCollection<PlanEntity>());
                        }

                        if (selectedPlans.First().order_date.HasValue)
                        {
                            aModuleIndexDictionary[value] = 1;
                        }

                        ObservableCollection<PlanEntity> planList = aPlanListDictionary[value];
                        foreach (plan planItem in selectedPlans)
                        {
                            PlanEntity planEntity = new PlanEntity();
                            planEntity.Plan = planItem;
                            string getDepartmentName = string.Empty;
                            planEntity.Update();
                            planEntity.ProjectName = item.ProjectName;
                            planEntity.PlanRemindDay = ("设计节点" == planItem.sheet_name) ? item.RemindDayDesign :
                                (("采购节点" == planItem.sheet_name) ? item.RemindDayPurchase : item.RemindDayProduce);
                            planEntity.IsSetable = aIsSetable;
                            if (departmentIdNameDictionary.TryGetValue(planEntity.DepartmentId, out getDepartmentName))
                            {
                                planEntity.DepartmentName = getDepartmentName;
                            }
                            planList.Add(planEntity);
                        }
                    }
                }

                rturnValue = true;
            }
            return rturnValue;
        }
        private void OnExportPlanCommand()
        {
            IsBusy = true;

            if (null == SelectProjectEntity.PlanVersionID
                || null == SelectProjectEntity.ManufactureNumber
                || string.Empty == SelectProjectEntity.PlanVersionID
                || string.Empty == SelectProjectEntity.ManufactureNumber)
            {
                Message.ErrorMessage("生产令号或版本号无效");
            }
            else
            {
                IEnumerable<string> sheetNames = from c in planManagerDomainContext.plans
                                                 where c.manufacture_number == SelectProjectEntity.ManufactureNumber.TrimEnd()
                                                    && c.version_id == SelectProjectEntity.PlanVersionID
                                                 select c.sheet_name;
                if (sheetNames.Count() > 0)
                {
                    ObservableCollection<PlanListViewModel> planListViewModelList = new ObservableCollection<PlanListViewModel>();
                    ObservableCollection<string> differentSheets = new ObservableCollection<string>();
                    foreach (string value in sheetNames)
                    {
                        if (null == value || differentSheets.Contains(value))
                        {
                            continue;
                        }
                        differentSheets.Add(value);
                        IEnumerable<plan> selectedPlans = from c in planManagerDomainContext.plans
                                                          where c.manufacture_number == SelectProjectEntity.ManufactureNumber.TrimEnd()
                                                            && c.version_id == SelectProjectEntity.PlanVersionID
                                                            && c.sheet_name == value
                                                          select c;
                        ObservableCollection<PlanEntity> planList = new ObservableCollection<PlanEntity>();
                        bool hasOrderDate = false;
                        foreach (plan item in selectedPlans)
                        {
                            PlanEntity planEntity = new PlanEntity();
                            planEntity.Plan = item;
                            if (item.order_date.HasValue)
                            {
                                hasOrderDate = true;
                            }
                            string getDepartmentName = string.Empty;
                            planEntity.Update();
                            planEntity.ProjectName = SelectProjectEntity.ProjectName;
                            if (departmentIdNameDictionary.TryGetValue(planEntity.DepartmentId, out getDepartmentName))
                            {
                                planEntity.DepartmentName = getDepartmentName;
                            }
                            planList.Add(planEntity);
                        }
                        if (planList.Count > 0)
                        {
                            int modelIndex = -1;
                            if ("采购节点" == planList[0].SheetName)
                            {
                                if (hasOrderDate)
                                {
                                    modelIndex = 1;
                                }
                                else
                                {
                                    modelIndex = 2;
                                }
                            }
                            else
                            {
                                modelIndex = 0;
                            }

                            PlanListViewModel planListViewModel = new PlanListViewModel(value, planList,
                                                                        modelIndex, departmentIdNameDictionary);
                            planListViewModel.IsReadOnly = true;
                            planListViewModelList.Add(planListViewModel);
                        }
                    }
                    if (planListViewModelList.Count > 0)
                    {
                        PlanExtraEntity planExtraEntity = null;
                        IEnumerable<plan_extra> plan_extras = from c in planManagerDomainContext.plan_extras
                                                              where c.version_id == SelectProjectEntity.PlanVersionID
                                                              && c.manufacture_number == SelectProjectEntity.ManufactureNumber.TrimEnd()
                                                              select c;
                        if (0 != plan_extras.Count())
                        {
                            planExtraEntity = new PlanExtraEntity();
                            planExtraEntity.PlanExtra = plan_extras.First<plan_extra>();
                            planExtraEntity.Update();
                            planExtraEntity.PlanExtra = null;
                        }
                        PlanListEditWindow planListWindow = new PlanListEditWindow("计划导出", "导出", SelectProjectEntity.PlanVersionID,
                                                                                planListViewModelList, planExtraEntity);
                        planListWindow.ManufactureNumber = SelectProjectEntity.ManufactureNumber;
                        planListWindow.Closed += new EventHandler(PlanListWindow_Closed);
                        planListWindow.Show();
                    }
                }
                else
                {
                    string errorMessage = "无相关数据(生产令号:" +
                                            SelectProjectEntity.ManufactureNumber.TrimEnd() +
                                            ",版本号" +
                                            SelectProjectEntity.PlanVersionID
                                            + ")";
                    Message.ErrorMessage(errorMessage);
                }
            }

            IsBusy = false;
        }
        private void OnEvaluateSingleCommand()
        {
            IsBusy = true;
            if (null == SelectProjectEntity.PlanVersionID
                || null == SelectProjectEntity.ManufactureNumber
                || string.Empty == SelectProjectEntity.PlanVersionID
                || string.Empty == SelectProjectEntity.ManufactureNumber)
            {
                Message.ErrorMessage("生产令号或版本号无效");
            }
            else
            {
                IEnumerable<string> sheetNames = from c in planManagerDomainContext.plans
                                                 where c.manufacture_number == SelectProjectEntity.ManufactureNumber.TrimEnd()
                                                    && c.version_id == SelectProjectEntity.PlanVersionID
                                                 select c.sheet_name;
                if (sheetNames.Count() > 0)
                {
                    ObservableCollection<PlanListViewModel> planListViewModelList = new ObservableCollection<PlanListViewModel>();
                    Dictionary<string, int> accomplishRateDictionary = new Dictionary<string, int>();
                    foreach (string value in sheetNames)
                    {
                        if (null == value || accomplishRateDictionary.ContainsKey(value))
                        {
                            continue;
                        }
                        IEnumerable<plan> selectedPlans = from c in planManagerDomainContext.plans
                                                          where c.manufacture_number == SelectProjectEntity.ManufactureNumber.TrimEnd()
                                                            && c.version_id == SelectProjectEntity.PlanVersionID
                                                            && c.sheet_name == value
                                                          select c;
                        decimal totalValue = 0;
                        decimal accomplishValue = 0;
                        ObservableCollection<PlanEntity> planList = new ObservableCollection<PlanEntity>();
                        bool hasOrderDate = false;
                        foreach (plan item in selectedPlans)
                        {
                            if (item.weight.HasValue)
                            {
                                totalValue += item.weight.Value;
                                if (item.accomplish_date.HasValue && item.score.HasValue)
                                {
                                    accomplishValue += item.score.Value;
                                }
                            }

                            PlanEntity planEntity = new PlanEntity();
                            planEntity.Plan = item;
                            if (item.order_date.HasValue)
                            {
                                hasOrderDate = true;
                            }
                            string getDepartmentName = string.Empty;
                            planEntity.Update();
                            planEntity.Plan = null;
                            planEntity.ProjectName = SelectProjectEntity.ProjectName;
                            if (departmentIdNameDictionary.TryGetValue(planEntity.DepartmentId, out getDepartmentName))
                            {
                                planEntity.DepartmentName = getDepartmentName;
                            }
                            planList.Add(planEntity);
                        }

                        decimal resultValue = (0 == totalValue) ? 0 : accomplishValue / totalValue;
                        int resultInt = Convert.ToInt16(Convert.ToDouble(resultValue) * 100);
                        accomplishRateDictionary.Add(value, resultInt);

                        if (planList.Count > 0)
                        {
                            int modelIndex = -1;
                            if ("采购节点" == planList[0].SheetName)
                            {
                                if (hasOrderDate)
                                {
                                    modelIndex = 1;
                                }
                                else
                                {
                                    modelIndex = 2;
                                }
                            }
                            else
                            {
                                modelIndex = 0;
                            }

                            PlanListViewModel planListViewModel = new PlanListViewModel(value, planList,
                                                                    modelIndex, departmentIdNameDictionary);
                            planListViewModel.IsReadOnly = false;
                            planListViewModelList.Add(planListViewModel);
                        }
                    }
                    if (accomplishRateDictionary.Count > 0)
                    {
                        string title = "计划考核(";
                        title += SelectProjectEntity.ProjectName;
                        title += " ";
                        title += SelectProjectEntity.ManufactureNumber;
                        title += ")";

                        PlanExtraEntity planExtraEntity = null;
                        IEnumerable<plan_extra> plan_extras = from c in planManagerDomainContext.plan_extras
                                                              where c.version_id == SelectProjectEntity.PlanVersionID
                                                              && c.manufacture_number == SelectProjectEntity.ManufactureNumber.TrimEnd()
                                                              select c;
                        if (0 != plan_extras.Count())
                        {
                            planExtraEntity = new PlanExtraEntity();
                            planExtraEntity.PlanExtra = plan_extras.First<plan_extra>();
                            planExtraEntity.Update();
                            planExtraEntity.PlanExtra = null;
                        }

                        PlanListEvaluateWindow planEvaluateResultWindow = new PlanListEvaluateWindow(title, planListViewModelList,
                                                                                accomplishRateDictionary, planExtraEntity);
                        planEvaluateResultWindow.Closed += new EventHandler(PlanListWindow_Closed);
                        planEvaluateResultWindow.Show();
                    }
                }
                else
                {
                    string errorMessage = "无相关数据(生产令号:" +
                                            SelectProjectEntity.ManufactureNumber.TrimEnd() +
                                            ",版本号" +
                                            SelectProjectEntity.PlanVersionID
                                            + ")";
                    Message.ErrorMessage(errorMessage);
                }
            }
            IsBusy = false;
        }
        private bool GetPorjectPlanList(ProjectEntity item, ref ObservableCollection<PlanEntity> planList)
        {
            bool rturnValue = false;
            IEnumerable<string> sheetNames = from c in planManagerDomainContext.plans
                                             where c.manufacture_number == item.ManufactureNumber
                                                && c.version_id == item.PlanVersionID
                                             select c.sheet_name;
            if (sheetNames.Count() > 0)
            {
                ObservableCollection<string> differentSheets = new ObservableCollection<string>();
                foreach (string value in sheetNames)
                {
                    if (null == value || differentSheets.Contains(value))
                    {
                        continue;
                    }
                    differentSheets.Add(value);
                    IEnumerable<plan> selectedPlans = from c in planManagerDomainContext.plans
                                                      where c.manufacture_number == item.ManufactureNumber
                                                        && c.version_id == item.PlanVersionID
                                                        && c.sheet_name == value
                                                      select c;
                    foreach (plan planItem in selectedPlans)
                    {
                        PlanEntity planEntity = new PlanEntity();
                        planEntity.Plan = planItem;
                        string getDepartmentName = string.Empty;
                        planEntity.Update();
                        planEntity.ProjectName = item.ProjectName;
                        if (departmentIdNameDictionary.TryGetValue(planEntity.DepartmentId, out getDepartmentName))
                        {
                            planEntity.DepartmentName = getDepartmentName;
                        }
                        planList.Add(planEntity);
                    }
                }

                rturnValue = true;
            }
            return rturnValue;
        }
        private void OnSmallChangeCommand()
        {
            IsBusy = true;

            if (null == SelectProjectEntity.PlanVersionID
                || null == SelectProjectEntity.ManufactureNumber
                || string.Empty == SelectProjectEntity.PlanVersionID
                || string.Empty == SelectProjectEntity.ManufactureNumber)
            {
                Message.ErrorMessage("生产令号或版本号无效");
            }
            else
            {
                string newVersionId = SelectProjectEntity.PlanVersionID;
            //                 if (!GetNewVersionId(SelectProjectEntity.ManufactureNumber, ref newVersionId))
            //                 {
            //                     Message.ErrorMessage("生成新版本号失败");
            //                     IsBusy = false;
            //                     return;
            //                 }

                IEnumerable<string> sheetNames = from c in planManagerDomainContext.plans
                                                 where c.manufacture_number == SelectProjectEntity.ManufactureNumber.TrimEnd()
                                                    && c.version_id == SelectProjectEntity.PlanVersionID
                                                select c.sheet_name;
                if (sheetNames.Count() > 0)
                {
                    ObservableCollection<PlanListViewModel> planListViewModelList = new ObservableCollection<PlanListViewModel>();
                    ObservableCollection<string> differentSheets = new ObservableCollection<string>();
                    foreach (string originalValue in sheetNames)
                    {
                        if (null == originalValue)
                        {
                            continue;
                        }
                        string value = originalValue;

                        if ("设计完成节点" == value)
                        {
                            value = "设计节点";
                        }
                        else if ("采购完成节点" == value)
                        {
                            value = "采购节点";
                        }
                        else if ("生产完成节点" == value)
                        {
                            value = "生产节点";
                        }

                        if (differentSheets.Contains(value))
                        {
                            continue;
                        }
                        differentSheets.Add(value);
                        IEnumerable<plan> selectedPlans = from c in planManagerDomainContext.plans
                                                  where c.manufacture_number == SelectProjectEntity.ManufactureNumber.TrimEnd()
                                                    && c.version_id == SelectProjectEntity.PlanVersionID
                                                    && c.sheet_name == originalValue orderby c.sequence_id
                                                  select c;
                        ObservableCollection<PlanEntity> planList = new ObservableCollection<PlanEntity>();
                        bool hasOrderDate = false;
                        for (int pos = 0; pos < selectedPlans.Count<plan>(); ++pos)
                        {
                            plan item = selectedPlans.ElementAt(pos); ;
                            PlanEntity planEntity = new PlanEntity();
                            planEntity.Plan = item;
                            if (item.order_date.HasValue)
                            {
                                hasOrderDate = true;
                            }
                            string getDepartmentName = string.Empty;
                            planEntity.Update();
             //                           planEntity.Plan = null;
             //                           planEntity.VersionId = newVersionId;
                            planEntity.ProjectName = SelectProjectEntity.ProjectName;
                            if (departmentIdNameDictionary.TryGetValue(planEntity.DepartmentId, out getDepartmentName))
                            {
                                planEntity.DepartmentName = getDepartmentName;
                            }
                            planList.Add(planEntity);
                        }
                        if (planList.Count > 0)
                        {
                            int modelIndex = -1;
                            if ("采购节点" == planList[0].SheetName)
                            {
                                if (hasOrderDate)
                                {
                                    modelIndex = 1;
                                }
                                else
                                {
                                    modelIndex = 2;
                                }
                            }
                            else
                            {
                                modelIndex = 0;
                            }

                            PlanListViewModel planListViewModel = new PlanListViewModel(value, planList,
                                                                    modelIndex, departmentIdNameDictionary);
                            planListViewModel.IsChanged = false;
                            planListViewModel.IsReadOnly = false;
                            planListViewModelList.Add(planListViewModel);
                        }
                    }
                    if (planListViewModelList.Count > 0)
                    {
                        string title = "少量修改(";
                        title += SelectProjectEntity.ProjectName;
                        title += " ";
                        title += SelectProjectEntity.ManufactureNumber.TrimEnd();
                        title += " ";
                        title += newVersionId;
                        title += ")";
                        PlanExtraEntity planExtraEntity = null;
                        IEnumerable<plan_extra> plan_extras = from c in planManagerDomainContext.plan_extras
                                                              where c.version_id == SelectProjectEntity.PlanVersionID
                                                                && c.manufacture_number == SelectProjectEntity.ManufactureNumber.TrimEnd()
                                                                select c;
                        if (0 != plan_extras.Count())
                        {
                            planExtraEntity = new PlanExtraEntity();
                            planExtraEntity.PlanExtra = plan_extras.First<plan_extra>();
                            planExtraEntity.Update();
            //                             planExtraEntity.VersionId = newVersionId;
            //                             planExtraEntity.PlanExtra = null;
                        }
                        PlanListEditWindow planListWindow = new PlanListEditWindow(title, "修改", newVersionId, planListViewModelList, planExtraEntity);
                        planListWindow.ManufactureNumber = SelectProjectEntity.ManufactureNumber;
                        planListWindow.Closed += new EventHandler(PlanListWindow_Closed);
                        planListWindow.Show();
                    }
                }
                else
                {
                    string errorMessage = "无相关数据(生产令号:" +
                                            SelectProjectEntity.ManufactureNumber.TrimEnd() +
                                            ",版本号" +
                                            SelectProjectEntity.PlanVersionID
                                            + ")" + "\r\n"; ;
                    Message.ErrorMessage(errorMessage);
                }
            }

            IsBusy = false;
        }