private void AddApartment(Apartment apt)
        {
            this.ShowOrdersView();

            IRegion ordersRegion = _regionManager.Regions[RegionNames.OrdersRegion];

            var orderCompositeViewModel = ServiceLocator.Current.GetInstance<OrderCompositeViewModel>();

            orderCompositeViewModel.CurApartment = apt;

            ordersRegion.Add(orderCompositeViewModel);
            OrderModels.Add(orderCompositeViewModel);

            ordersRegion.Activate(orderCompositeViewModel);
        }
 public void OnoperCompleted(Apartment apartment)
 {
     //NitpickHouseDomainContext nitpick = apartmentDomainDataSource.DomainContext as NitpickHouseDomainContext;
     //if (nitpick != null)
     //{
     //    nitpick.Apartments.Detach(apartment);
     //}
 }
 /// <summary>
 /// Create a new Apartment object.
 /// </summary>
 /// <param name="apartmentId">Initial value of the ApartmentId property.</param>
 /// <param name="residentialId">Initial value of the ResidentialId property.</param>
 /// <param name="roomType">Initial value of the RoomType property.</param>
 /// <param name="area">Initial value of the Area property.</param>
 public static Apartment CreateApartment(global::System.Int32 apartmentId, global::System.Int32 residentialId, global::System.String roomType, global::System.Double area)
 {
     Apartment apartment = new Apartment();
     apartment.ApartmentId = apartmentId;
     apartment.ResidentialId = residentialId;
     apartment.RoomType = roomType;
     apartment.Area = area;
     return apartment;
 }
 /// <summary>
 /// Deprecated Method for adding a new object to the Apartments EntitySet. Consider using the .Add method of the associated ObjectSet&lt;T&gt; property instead.
 /// </summary>
 public void AddToApartments(Apartment apartment)
 {
     base.AddObject("Apartments", apartment);
 }
 private void RepareOperation(Apartment cur)
 {
     cur.CurState = ApartmentRuntimeState.Busing;
     _apartmentBusingList.Add(cur);
 }
 //初始化已经Attach 到DomainContent的数据,主要确保存在Consumer
 private void InitialAttachedData(Apartment apt)
 {
     //以下部分需要仔细考虑
     if (apt.Consumer == null)
     {
         byte selltype = 0;
         if (apt.CanMarketSell)
         {
             selltype = 1;
         }
         //注意:特地不设置OperateUser、OperateTime
         //可以用这两个字段来区分是新增记录还是修改记录
         apt.Consumer = new Consumer
         {
             Apartment = apt,
             ApartmentId = apt.ApartmentId,
             SellType = selltype
         };
     }
 }
 private string GetOperationResult(Apartment cur)
 {
     string info;
     //期房
     if (cur.Area == 1.0)
     {
         info = String.Format("序号:   \t{0}\n编号:   \t{1}\n户型:   \t{2}\n面积:   \t{3}\n套内:   \t{4}\n公摊:   \t{5}\n",
             cur.ApartmentId,
             cur.Builing,
             cur.RoomType,
             cur.Uint,
             cur.Floor,
             cur.Number);
     }
     else//现房
     {
         info = String.Format("序号:   \t{0}\n编号:   \t{1}\n位置:   \t{2}{3}楼{4}号\n户型:   \t{5}\n面积:   \t{6:F2}\n套内:   \t{7:F2}\n公摊:   \t{8:F2}\n",
             cur.ApartmentId,
             cur.Builing,
             cur.Uint,
             cur.Floor,
             cur.Number,
             cur.RoomType,
             cur.Area,
             cur.ActualArea,
             cur.ShareArea);
     }
     string comsterinfo;
     if (cur.Consumer != null)
     {
         string tmp;
         switch(cur.Consumer.RegionType)
         {
             case 1:
                 tmp = "一街坊";
                 break;
             case 2:
                 tmp = "二街坊";
                 break;
             case 3:
                 tmp = "整合区域";
                 break;
             default:
                 tmp = "未知";
                 break;
         }
         comsterinfo = String.Format("销售类型:\t{0}\n购买者:  \t{1}\n身份证:  \t{2}\n房产证:  \t{3}\n所属区段:\t{4}\n拆迁面积:\t{5:F2}\n原地址:  \t{6}\n操作人员:\t{7}\n",
             cur.Consumer.SellType == 0 ? "拆迁":"市场",
             cur.Consumer.Name,
             cur.Consumer.IdCard,
             cur.Consumer.RealEstateId,
             tmp,
             cur.Consumer.OriginArea,
             cur.Consumer.OriginAddress,
             cur.Consumer.OperateUser);
         info += comsterinfo;
     }
     string lockinfo;
     if (cur.LockStatu != null)
     {
         lockinfo = String.Format("锁定人员:\t{0}\n", cur.LockStatu.OperateUser);
         info += lockinfo;
     }
     return info;
 }
        public void ApartmentDelete(Apartment cur)
        {
            #region Check

            if (MessageBox.Show(ApartmentServiceError.DelException_Warnning, "警告", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)
            {
                return;
            }

            if (cur.CanDelSold == false)
            {
                cur.ValidationErrors.Add(new ValidationResult(ApartmentServiceError.DelException_AuthLimit, null));
                MessageBox.Show(ApartmentServiceError.DelException_AuthLimit);
                return;
            }
            if (cur.Consumer == null || cur.LockStatu == null)
            {
                throw new InvalidOperationException(ApartmentServiceError.SystemException_CheckState);
            }
             //为空,则表示正在删除未售记录
            if (String.IsNullOrEmpty(cur.Consumer.OperateUser))
            {
                throw new InvalidOperationException(ApartmentServiceError.SystemException_DeleteUnSell);
            }
               #endregion

            #region pepare
            RepareOperation(cur);
            #endregion

            #region initial content

            Apartment commitApartment = new Apartment
            {
                ApartmentId = cur.ApartmentId,
                RoomType = cur.RoomType,
                Area = cur.Area,
                Builing = cur.Builing,
                Uint = cur.Uint,
                Floor = cur.Floor,
                Number = cur.Number,
                ActualArea = cur.ActualArea,
                ShareArea = cur.ShareArea,
                ShareFactor = cur.ShareFactor,
                ResidentialId = cur.ResidentialId,
                Residential = null,
                Consumer = null,
                LockStatu = null
            };

            commitApartment.Consumer = new Consumer()
            {
                Apartment = commitApartment,
                ApartmentId = cur.Consumer.ApartmentId,
                SellType = cur.Consumer.SellType,
                RegionType = cur.Consumer.RegionType,
                Name = cur.Consumer.Name,
                IdCard = cur.Consumer.IdCard,
                RealEstateId = cur.Consumer.RealEstateId,
                OriginArea = cur.Consumer.OriginArea,
                OriginAddress = cur.Consumer.OriginAddress,
                OperateTime = cur.Consumer.OperateTime,
                OperateUser = cur.Consumer.OperateUser
            };
            commitApartment.LockStatu = new LockStatu()
            {
                Apartment = commitApartment,
                ApartmentId = cur.ApartmentId,
                OperateUser = cur.LockStatu.OperateUser,
                OperateTime = cur.LockStatu.OperateTime
            };

            #endregion

            #region submit

            NitpickHouseDomainContext submitContext = new NitpickHouseDomainContext();

            //use attach to set apartment to unchange state
            submitContext.Apartments.Attach(commitApartment);

            commitApartment.LockStatu = null;

            commitApartment.Consumer = null;

            // submit the new context
            SubmitOperation submitOp = submitContext.SubmitChanges();
            submitOp.Completed += (send, args) =>
            {
                CompleteOperation(submitOp, cur);
            };
            #endregion
        }
        private void CompleteOperation(SubmitOperation submitOp, Apartment cur)
        {
            //---------------------------
            //如果当前正在加载,则查询结果可能不正确,需要cancel一次
            MakeSureLoadCorret();

            //---------------------------

            if (submitOp.HasError)
            {
                cur.ValidationErrors.Add(new ValidationResult(submitOp.Error.Message, null));
                submitOp.MarkErrorAsHandled();
                MessageBox.Show(ApartmentServiceError.ServerOperationException + "\n\n" + submitOp.Error.Message);
            }
            else
            {
                string info = GetOperationResult(cur);
                MessageBox.Show(ApartmentServiceError.ServerOperationSuccessed + "\n\n" + info);
                if (_apartemntLocked.Contains(cur))
                {
                    _apartemntLocked.Remove(cur);
                }
            }
            //---------------------------

            //取出busing列表
            if (_apartmentBusingList.Contains(cur))
            {
                _apartmentBusingList.Remove(cur);
            }

            cur.CurState = ApartmentRuntimeState.Deleted;

            _domainContext.Apartments.Detach(cur);
        }
        public void ApartmentSell(Apartment cur)
        {
            #region Check

            if (cur.CanSell == false && cur.CanMarketSell == false)
            {
                cur.ValidationErrors.Add(new ValidationResult(ApartmentServiceError.SellException_AuthLimit, null));
                MessageBox.Show(ApartmentServiceError.SellException_AuthLimit);
                return;
            }
            if (cur.Consumer == null || cur.LockStatu == null)
            {
                throw new InvalidOperationException(ApartmentServiceError.SystemException_CheckState);
            }
            //不为空,则表示已售记录,再次销售
            if (!String.IsNullOrEmpty(cur.Consumer.OperateUser))
            {
                throw new InvalidOperationException(ApartmentServiceError.SystemException_SellSold);
            }
            if (!CheckComsterInfo(cur.Consumer))
            {
                MessageBox.Show(ApartmentServiceError.SellException_NeedInformation);
                return;
            }
            #endregion

            #region pepare
            RepareOperation(cur);
            #endregion

            #region initial content

            Apartment commitApartment = new Apartment
            {
                ApartmentId = cur.ApartmentId,
                RoomType = cur.RoomType,
                Area = cur.Area,
                Builing = cur.Builing,
                Uint = cur.Uint,
                Floor = cur.Floor,
                Number = cur.Number,
                ActualArea = cur.ActualArea,
                ShareArea = cur.ShareArea,
                ShareFactor = cur.ShareFactor,
                ResidentialId = cur.ResidentialId,
                Residential = null,
                Consumer = null,
                LockStatu = null
            };

            commitApartment.LockStatu = new LockStatu()
            {
                Apartment = commitApartment,
                ApartmentId = cur.ApartmentId,
                OperateUser = cur.LockStatu.OperateUser,
                OperateTime = cur.LockStatu.OperateTime
            };

            #endregion

            #region submit
            NitpickHouseDomainContext submitContext = new NitpickHouseDomainContext();

            //use attach to set apartment to unchange state
            submitContext.Apartments.Attach(commitApartment);

            commitApartment.LockStatu = null;

            commitApartment.Consumer = new Consumer()
            {
                Apartment = commitApartment,
                ApartmentId = cur.Consumer.ApartmentId,
                SellType = cur.Consumer.SellType,
                RegionType = cur.Consumer.RegionType,
                Name = cur.Consumer.Name,
                IdCard = cur.Consumer.IdCard,
                RealEstateId = cur.Consumer.RealEstateId,
                OriginArea = cur.Consumer.OriginArea,
                OriginAddress = cur.Consumer.OriginAddress,
                OperateUser = WebContext.Current.User.Name,
                OperateTime = DateTime.Now
            };

            // submit the new context
            SubmitOperation submitOp = submitContext.SubmitChanges();
            submitOp.Completed += (send, args) =>
            {
                CompleteOperation(submitOp, cur);
            };
            #endregion
        }
        /// <summary>
        /// 锁定Apartment函数,被browser调用
        /// </summary>
        /// <param name="cur"></param>
        /// <param name="callback"></param>
        public void ApartmentLock(Apartment cur)
        {
            #region Check
            if (cur.CanLock == false)
            {
                cur.CurState = ApartmentRuntimeState.Deleted;
                cur.ValidationErrors.Add(new ValidationResult(ApartmentServiceError.LockException_AuthLimit, null));
                MessageBox.Show(ApartmentServiceError.LockException_AuthLimit);
                return;
            }
            if (cur.LockStatu != null)
            {
                cur.CurState = ApartmentRuntimeState.Deleted;
                cur.ValidationErrors.Add(new ValidationResult(ApartmentServiceError.LockException_LockForLocked, null));
                MessageBox.Show(ApartmentServiceError.LockException_LockForLocked);
                return;
            }

            if (cur.HasChanges)
            {
                cur.CurState = ApartmentRuntimeState.Deleted;
                cur.ValidationErrors.Add(new ValidationResult(ApartmentServiceError.LockException_RecordModified, null));
                MessageBox.Show(ApartmentServiceError.LockException_RecordModified);
                return;
            }
            #endregion

            #region set origin state

            cur.CurState = ApartmentRuntimeState.Busing;

            #endregion

            #region initial content

            Apartment commitApartment = new Apartment{
                ApartmentId = cur.ApartmentId,
                RoomType = cur.RoomType,
                Area = cur.Area,
                Builing = cur.Builing,
                Uint = cur.Uint,
                Floor = cur.Floor,
                Number = cur.Number,
                ActualArea = cur.ActualArea,
                ShareArea = cur.ShareArea,
                ShareFactor = cur.ShareFactor,
                ResidentialId = cur.ResidentialId,
                Residential = null,
                Consumer = null,
                LockStatu = null
            };

            if (cur.Consumer != null)
            {
                commitApartment.Consumer = new Consumer()
                {
                    Apartment = commitApartment,
                    ApartmentId = cur.Consumer.ApartmentId,
                    SellType = cur.Consumer.SellType,
                    RegionType = cur.Consumer.RegionType,
                    Name = cur.Consumer.Name,
                    IdCard = cur.Consumer.IdCard,
                    RealEstateId = cur.Consumer.RealEstateId,
                    OriginArea = cur.Consumer.OriginArea,
                    OriginAddress = cur.Consumer.OriginAddress,
                    OperateTime = cur.Consumer.OperateTime,
                    OperateUser = cur.Consumer.OperateUser
                };
            }

            #endregion

            #region submit

            NitpickHouseDomainContext submitContext = new NitpickHouseDomainContext();

            //use attach to set apartment to unchange state
            submitContext.Apartments.Attach(commitApartment);

            commitApartment.LockStatu = new LockStatu()
            {
                Apartment = commitApartment,
                ApartmentId = cur.ApartmentId,
                OperateUser = WebContext.Current.User.Name,
                OperateTime = DateTime.Now
            };

            // submit the new context
            var submitOp = submitContext.SubmitChanges();
            submitOp.Completed += (send, args) =>
            {
                if (submitOp.HasError)
                {
                    cur.CurState = ApartmentRuntimeState.Deleted;
                    cur.ValidationErrors.Add(new ValidationResult(submitOp.Error.Message, null));
                    submitOp.MarkErrorAsHandled();
                    MessageBox.Show(ApartmentServiceError.ServerOperationException);
                }
                else
                {
                    //---------------------------
                    //如果当前正在加载,则查询结果可能不正确,需要cancel一次
                    MakeSureLoadCorret();
                    //---------------------------

                    Apartment submittedApartments = (Apartment)submitOp.ChangeSet.ModifiedEntities[0];
                    submitContext.Apartments.Detach(submittedApartments);

                    //刷新状态
                    submittedApartments.CurState = ApartmentRuntimeState.Normal;
                    submittedApartments.RefreshAuthenticate(true);

                    _domainContext.Apartments.Attach(submittedApartments);

                    InitialAttachedData(submittedApartments);

                    //-----------------------
                    //add 到视图,及时显示出来
                    //因为前面清除了当前查询,所以不会出现马上清除的情况。
                    _apartemntLocked.Add(submittedApartments);
                }
            };

            #endregion
        }
 private void RemoveApartment(Apartment apt)
 {
     IRegion ordersRegion = _regionManager.Regions[RegionNames.OrdersRegion];
     foreach (OrderCompositeViewModel v in OrderModels)
     {
         if (v.CurApartment == apt)
         {
             OrderModels.Remove(v);
             ordersRegion.Remove(v);
             if (ordersRegion.Views.Count() == 0)
             {
                 this.RemoveOrdersView();
             }
             break;
         }
     }
 }