public IHttpActionResult PutDEAL(int id, DEAL dEAL)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != dEAL.DEAL_ID)
            {
                return(BadRequest());
            }

            db.Entry(dEAL).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!DEALExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
        public IHttpActionResult GetDEAL(int id)
        {
            DEAL dEAL = db.DEALs.Find(id);

            if (dEAL == null)
            {
                return(NotFound());
            }

            return(Ok(dEAL));
        }
        public IHttpActionResult PostDEAL(DEAL dEAL)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.DEALs.Add(dEAL);
            db.SaveChanges();

            return(CreatedAtRoute("DefaultApi", new { id = dEAL.DEAL_ID }, dEAL));
        }
        public IHttpActionResult DeleteDEAL(int id)
        {
            DEAL dEAL = db.DEALs.Find(id);

            if (dEAL == null)
            {
                return(NotFound());
            }

            db.DEALs.Remove(dEAL);
            db.SaveChanges();

            return(Ok(dEAL));
        }
Beispiel #5
0
        public TransactionViewModel()
        {
            LoadTransactionData();

            //Khởi tạo AddCommand
            AddCommand = new RelayCommand <object>((p) =>
            {
                //Kiểm tra sự tồn tại trong database
                var displayList = DataProvider.Ins.DB.DEALs.Where(x => x.CustomerName == CustomerName && x.IsDeleted == false);
                if (displayList == null || SalePercent < 0 || Quantity <= 0)
                {
                    return(false);
                }

                return(true);
            }, (p) =>
            {
                //Add deal vào db
                var deal = new DEAL()
                {
                    CustomerName = CustomerName, PhoneNumber = PhoneNumber, CustomerAddress = CustomerAddress, PayDate = PayDate, ProductID = getIDProduct(ProductName), Quantity = (int)Quantity, IsDeleted = false
                };

                if (deal.ProductID == -1) //Ktra sản phẩn có tồn tại trong db không
                {
                    MessageBox.Show("Không tồn tại sản phẩm " + ProductName + " trong kho", "Lỗi");
                    return;
                }

                //Tính thành tiền
                if (IsSale == true)
                {
                    deal.SalePercent  = SalePercent / 100;
                    deal.SaleEvent    = SaleEvent;
                    deal.DisplayPrice = CalcDisplayPrice(DataProvider.Ins.DB.PRODUCTs.Find(deal.ProductID).RetailPrice, Convert.ToDouble(deal.SalePercent)) * deal.Quantity;
                }
                else
                {
                    deal.DisplayPrice = DataProvider.Ins.DB.PRODUCTs.Find(deal.ProductID).RetailPrice *deal.Quantity;
                }

                DataProvider.Ins.DB.DEALs.Add(deal);

                //Update lại số lượng trong product
                var product = DataProvider.Ins.DB.PRODUCTs.Find(deal.ProductID);
                if (deal.Quantity > product.Quantity) //Kiểm tra đầu vào
                {
                    MessageBox.Show("Số lượng sản phẩm vượt quá số lượng tồn kho", "Lỗi");
                    return;
                }

                product.Quantity -= (int)Quantity;
                //Update lại số lượng trong category
                var category       = DataProvider.Ins.DB.CATEGORies.Find(deal.PRODUCT.CatID);
                category.Quantity -= (int)Quantity;

                DataProvider.Ins.DB.SaveChanges();

                //Add vào TransactionDataList để update lại danh sách hiển thị lên màn hình
                TransactionData transactionData = new TransactionData();
                transactionData.NumercialOrder  = TransactionDataList.Count() + 1;
                transactionData.IsSale          = IsSale;
                transactionData.ProductName     = deal.PRODUCT.DisplayName;
                transactionData.Deal            = deal;

                TransactionDataList.Add(transactionData);
            });

            //Khởi tạo UpdateCommand
            UpdateCommand = new RelayCommand <object>((p) =>
            {
                //Kiểm tra đầu vào
                if (SalePercent < 0 || Quantity <= 0)
                {
                    return(false);
                }

                return(true);
            }, (p) =>
            {
                var displayList = DataProvider.Ins.DB.PRODUCTs.Where(x => x.DisplayName == ProductName && x.IsDeleted == false);
                if (displayList == null || displayList.Count() == 0)
                {
                    MessageBox.Show("Không tồn tại sản phẩm " + ProductName + " trong kho", "Lỗi");
                    return;
                }
                //Cập nhật lại deal
                var deal = DataProvider.Ins.DB.DEALs.Find(SelectedItem.Deal.ID);

                //Cập nhật lại số lượng trong category
                //Nếu vẫn giữ nguyên loại sản phẩm đó
                var product = DataProvider.Ins.DB.PRODUCTs.Find(getIDProduct(ProductName));
                if (deal.PRODUCT.CatID == product.CatID)
                {
                    var category      = DataProvider.Ins.DB.CATEGORies.Find(product.CatID);
                    category.Quantity = category.Quantity + deal.Quantity - (int)Quantity;

                    if (category.Quantity < 0)
                    {
                        MessageBox.Show("Số lượng giao dịch lớn hơn số lượng tồn kho", "Lỗi");
                        return;
                    }
                }
                else // Nếu đổi sang loại khác thì
                {
                    //Tăng số lượng ở loại cũ
                    var oldCategory       = DataProvider.Ins.DB.CATEGORies.Find(deal.PRODUCT.CatID);
                    oldCategory.Quantity += deal.Quantity;

                    //Giảm số lượng ở loại mới
                    //deal.PRODUCT.CatID = product.CatID;
                    var newCategory       = DataProvider.Ins.DB.CATEGORies.Find(product.CatID);
                    newCategory.Quantity -= (int)Quantity;

                    if (newCategory.Quantity < 0)
                    {
                        MessageBox.Show("Số lượng giao dịch lớn hơn số lượng tồn kho", "Lỗi");
                        return;
                    }
                }

                deal.CustomerName    = CustomerName;
                deal.PhoneNumber     = PhoneNumber;
                deal.CustomerAddress = CustomerAddress;
                deal.PayDate         = PayDate;
                if (IsSale == true)
                {
                    deal.SalePercent = SalePercent;
                    deal.SaleEvent   = SaleEvent;
                }
                else
                {
                    deal.SalePercent = null;
                    deal.SaleEvent   = null;
                }

                //Cập nhật lại số lượng product
                //Nếu vẫn giữ nguyên tên sản phẩm đó
                if (deal.PRODUCT.DisplayName == product.DisplayName)
                {
                    //Cập nhật số lượng sản phẩm đó
                    product.Quantity = product.Quantity + deal.Quantity - (int)Quantity;
                }
                else //Nếu đổi sang sản phẩm khác
                {
                    //Tăng số lượng sản phẩm cũ
                    var oldProduct       = DataProvider.Ins.DB.PRODUCTs.Find(deal.ProductID);
                    oldProduct.Quantity += deal.Quantity;

                    //Giảm số lượng sản phẩm mới
                    product.Quantity -= (int)Quantity;
                    deal.ProductID    = product.ID;
                }

                if (product.Quantity < 0)
                {
                    MessageBox.Show("Số lượng giao dịch lớn hơn số lượng tồn kho", "Lỗi");
                    return;
                }

                //Cập nhật số lượng trong deal
                deal.Quantity = (int)Quantity;

                //Cập nhật thành tiền
                if (IsSale == true)
                {
                    deal.SalePercent  = SalePercent / 100;
                    deal.SaleEvent    = SaleEvent;
                    deal.DisplayPrice = CalcDisplayPrice(product.RetailPrice, Convert.ToDouble(deal.SalePercent)) * deal.Quantity;
                }
                else
                {
                    deal.DisplayPrice = product.RetailPrice * deal.Quantity;
                }

                DataProvider.Ins.DB.SaveChanges();
                //Cập nhật lại TransactionDataList
                var transactionData         = TransactionDataList.ToList().Find(x => x.Deal.ID == deal.ID);
                transactionData.ProductName = deal.PRODUCT.DisplayName;
                transactionData.IsSale      = IsSale;
                transactionData.Deal        = deal;
            });

            //Khởi tạo WatchCommand
            WatchCommand = new RelayCommand <object>((p) =>
            {
                if (string.IsNullOrEmpty(CustomerName))
                {
                    return(false);
                }
                return(true);
            }, (p) =>
            {
                var deal = DataProvider.Ins.DB.DEALs.Find(SelectedItem.Deal.ID);

                string retailPrice  = getMoney(deal.PRODUCT.RetailPrice) + " VNĐ";
                string displayPrice = getMoney(deal.DisplayPrice) + "VNĐ";

                MessageBox.Show("Tên khách hàng: " + deal.CustomerName + "\n" + "ID: " + deal.ID + "\n" + "Số điện thoại: " + deal.PhoneNumber + "\n" + "Địa chỉ: " + deal.CustomerAddress + "\n" + "Ngày thanh toán: " + Convert.ToDateTime(deal.PayDate).Date.ToShortDateString() + "\n"
                                + "Tên sản phẩm: " + deal.PRODUCT.DisplayName + "\n" + "Loại sản phẩm: " + deal.PRODUCT.CATEGORY.DisplayName + "\n" + "Giá gốc: " + retailPrice + "\n" + "Số lượng: " + deal.Quantity + "\n"
                                + "Giảm: " + Convert.ToDouble(deal.SalePercent) * 100 + " %" + "\n" + "Nhân dịp: " + deal.SaleEvent + "\n" + "Thành tiền: " + displayPrice, "Thông tin chi tiết");
            });

            //Khởi tạo DeleteCommand
            DeleteCommand = new RelayCommand <object>((p) =>
            {
                if (string.IsNullOrEmpty(CustomerName))
                {
                    return(false);
                }
                return(true);
            }, (p) =>
            {
                var deal     = DataProvider.Ins.DB.DEALs.Find(SelectedItem.Deal.ID);
                var product  = DataProvider.Ins.DB.PRODUCTs.Find(deal.ProductID);
                var category = DataProvider.Ins.DB.CATEGORies.Find(deal.PRODUCT.CatID);

                //Đánh dấu là đã bị xóa trong db
                deal.IsDeleted = true;

                //Tăng số lượng trong category
                category.Quantity += deal.Quantity;

                //Tăng số lượng trong product
                product.Quantity += deal.Quantity;

                //Xóa trong TransactionDataList
                int index = TransactionDataList.ToList().FindIndex(x => x.Deal.ID == SelectedItem.Deal.ID);

                for (int i = index + 1; i < TransactionDataList.Count; i++)
                {
                    TransactionDataList[i].NumercialOrder -= 1; //Giảm số thứ tự
                }

                TransactionDataList.RemoveAt(index);

                DataProvider.Ins.DB.SaveChanges();
            }
                                                      );
        }
Beispiel #6
0
        public bool Create(DealCreateApiModel apiModel, int createdUser)
        {
            var newDeal = new DEAL();

            if (apiModel.account != 0)
            {
                newDeal.ACCOUNT_ID = apiModel.account;
            }
            newDeal.Amount = apiModel.amount;
            //newDeal.ClosingDate = apiModel.closingDate.GetValueOrDefault();
            if (apiModel.contact != 0)
            {
                newDeal.Contact_ID = apiModel.contact;
            }
            newDeal.DealOwner       = apiModel.owner != 0 ? apiModel.owner : createdUser;
            newDeal.Description     = apiModel.description;
            newDeal.ExpectedRevenue = apiModel.expectedRevenue;
            if (apiModel.expectedClosingDate != null)
            {
                newDeal.ExpectedClosingDate = DbDateHelper.ToNullIfTooEarlyForDb(apiModel.expectedClosingDate.Value);
            }
            if (apiModel.stage != 0)
            {
                var newStageHistory = new STAGE_HISTORY();
                newStageHistory.ModifiedBy = createdUser;
                newStageHistory.ModifiedAt = DateTime.Now;
                newStageHistory.STAGE_ID   = apiModel.stage;
                var dbStage = db.STAGEs.Find(apiModel.stage);
                newDeal.ExpectedRevenue = (long)((apiModel.amount * dbStage.Probability) / 100);
                if (apiModel.closingDate != null)
                {
                    newDeal.ClosingDate = DbDateHelper.ToNullIfTooEarlyForDb(apiModel.closingDate.Value);
                }
                if (apiModel.stage == (int)EnumStage.LOST)
                {
                    newDeal.isLost      = true;
                    newDeal.ClosingDate = newStageHistory.ModifiedAt;
                }
                else
                {
                    newDeal.isLost = false;
                }
                if (apiModel.stage == (int)EnumStage.WON)
                {
                    newDeal.ClosingDate = newStageHistory.ModifiedAt;
                }
                newDeal.STAGE_HISTORY.Add(newStageHistory);
                if (!String.IsNullOrEmpty(apiModel.lostReason))
                {
                    //find lost reason
                    var lostReason = db.LOST_REASON.Where(c => c.Reason.ToLower().Contains(apiModel.lostReason.ToLower())).FirstOrDefault();
                    if (lostReason == null)
                    {
                        var newLostReason = new LOST_REASON();
                        newLostReason.Reason = apiModel.lostReason;
                        db.LOST_REASON.Add(newLostReason);
                        newDeal.LOST_REASON = newLostReason;
                        //newLostReason.DEALs.Add(newDeal);
                    }
                    else
                    {
                        newDeal.LOST_REASON_ID = lostReason.ID;
                        //lostReason.DEALs.Add(newDeal);
                    }
                    //dbDeal.LOST_REASON_ID = apiModel.lostReason;
                }
            }
            newDeal.Name = apiModel.name;
            if (apiModel.priority != 0)
            {
                newDeal.PRIORITY_ID = apiModel.priority;
            }

            newDeal.CreatedAt  = DateTime.Now;
            newDeal.CreatedBy  = createdUser;
            newDeal.ModifiedAt = DateTime.Now;
            if (apiModel.campaign != 0)
            {
                newDeal.CAMPAIGN_ID = apiModel.campaign;
            }
            if (apiModel.contact != 0)
            {
                newDeal.Contact_ID = apiModel.contact;
            }

            try
            {
                db.DEALs.Add(newDeal);
                db.SaveChanges();

                var owner   = db.USERs.Find(newDeal.DealOwner);
                var creator = db.USERs.Find(createdUser);

                var notifyModel = new NotificationApiModel();
                notifyModel.title          = "Deal created";
                notifyModel.content        = $"Deal {newDeal.Name} has been created and assigned to you by {creator?.Username}.";
                notifyModel.createdAt      = DateTime.Now;
                notifyModel.module         = "deals";
                notifyModel.moduleObjectId = newDeal.ID;
                //notifyModel.
                NotificationManager.SendNotification(notifyModel, new List <USER> {
                    owner
                });
                NotificationManager.ReloadDashboardSale();
                return(true);
            }
            catch
            {
                return(false);
            }
        }