public bool StoreTransfer(tbl_TransferOrder order, List <tbl_TransferOrderDetail> orderDetails)
        {
            using (var db = _connectionData.OpenDbConnection())
            {
                using (var ts = db.OpenTransaction())
                {
                    try
                    {
                        order.Id = Convert.ToInt32(db.Insert(order, true));
                        foreach (var item in orderDetails)
                        {
                            item.TransferID = order.Id;
                        }
                        var srcStoreId = orderDetails.FirstOrDefault().FromStoreId;
                        foreach (var item in orderDetails)
                        {
                            var product =
                                db.Select <tbl_Product>(
                                    p => p.SysHotelID == CommService.GetHotelId() && p.Id == item.itemid)
                                .FirstOrDefault();
                            var srcStoreProduct = db.Select <tbl_StoreProduct>(
                                p => p.productid == item.itemid && p.storeid == srcStoreId).FirstOrDefault();
                            if (srcStoreProduct == null || srcStoreProduct.quantity == 0)
                            {
                                continue;
                            }

                            item.quantity = srcStoreProduct.quantity > item.quantity
                                ? item.quantity
                                : srcStoreProduct.quantity;

                            db.Insert(item);
                            srcStoreProduct.quantity = srcStoreProduct.quantity - item.quantity;
                            db.Update(srcStoreProduct);
                            var existItem =
                                db.Select <tbl_StoreProduct>(
                                    p => p.productid == item.itemid && p.storeid == item.StoreID).FirstOrDefault();
                            if (existItem == null)
                            {
                                existItem = new tbl_StoreProduct
                                {
                                    quantity    = item.quantity,
                                    SysHotelID  = CommService.GetHotelId(),
                                    datecreated = DateTime.Now,
                                    productid   = item.itemid,
                                    unitid      = product.UnitID,
                                    storeid     = item.StoreID
                                };
                                var id = db.Insert(existItem, true);
                                //Thêm bản ghi Log
                                var log = new tbl_StoreProductLog
                                {
                                    typeImportExport = 3,
                                    SysHotelID       = CommService.GetHotelId(),
                                    datecreated      = DateTime.Now,
                                    storeid          = item.StoreID,
                                    productid        = item.itemid,
                                    storeproductid   = Convert.ToInt32(id),
                                    unitid           = product.UnitID,
                                    quantity         = item.quantity,
                                    fromstoreid      = srcStoreId
                                };
                                db.Insert(log);
                            }
                            else
                            {
                                var log = new tbl_StoreProductLog
                                {
                                    typeImportExport = 3,
                                    SysHotelID       = CommService.GetHotelId(),
                                    datecreated      = DateTime.Now,
                                    storeid          = item.StoreID,
                                    productid        = item.itemid,
                                    storeproductid   = existItem.Id,
                                    unitid           = product.UnitID,
                                    quantity         = item.quantity,
                                    fromstoreid      = srcStoreId
                                };
                                db.Insert(log);
                                existItem.quantity = existItem.quantity + item.quantity;
                                db.Update(existItem);
                            }
                        }
                        ts.Commit();
                        return(true);
                    }
                    catch (Exception)
                    {
                        ts.Rollback();
                        return(false);
                    }
                }
            }
        }
 public bool Xuatkho(tbl_PurchaseOrder order, List <tbl_PurchaseOrderDetail> orderDetails, ref string msg)
 {
     using (var db = _connectionData.OpenDbConnection())
     {
         // using (var ts = new TransactionScope())
         var tran = db.OpenTransaction();
         {
             try
             {
                 order.Id = Convert.ToInt32(db.Insert(order, true));
                 foreach (var item in orderDetails)
                 {
                     item.PurchaseID = order.Id;
                 }
                 db.InsertAll(orderDetails);
                 //Cập nhật tồn kho:
                 //Group theo StoreId
                 var storeIds = orderDetails.Select(p => p.StoreID).Distinct().ToList();
                 foreach (var storeId in storeIds)
                 {
                     var orderByStore = orderDetails.Where(p => p.StoreID == storeId);
                     //Group theo sản phẩm
                     var productGroup = orderByStore.GroupBy(p => p.itemid, (key, g) => new
                     {
                         ProductId = key,
                         Total     = g.Sum(p => p.quantity)
                     });
                     foreach (var item in productGroup)
                     {
                         var product =
                             db.Select <tbl_Product>(
                                 p => p.SysHotelID == CommService.GetHotelId() && p.Id == item.ProductId)
                             .FirstOrDefault();
                         var existItem =
                             db.Select <tbl_StoreProduct>(
                                 p => p.productid == item.ProductId && p.storeid == storeId).FirstOrDefault();
                         if (existItem == null || existItem.quantity < item.Total)
                         {
                             msg = "Tạo phiếu không thành công. Sản phẩm " + product.Name + " không đủ hàng";
                             tran.Rollback();
                             return(false);
                         }
                         else
                         {
                             var log = new tbl_StoreProductLog
                             {
                                 typeImportExport = 2,
                                 SysHotelID       = CommService.GetHotelId(),
                                 datecreated      = DateTime.Now,
                                 storeid          = storeId,
                                 productid        = item.ProductId,
                                 storeproductid   = existItem.Id,
                                 unitid           = product.UnitID,
                                 quantity         = item.Total,
                             };
                             db.Insert(log);
                             existItem.quantity = existItem.quantity - item.Total;
                             db.Update(existItem);
                         }
                     }
                 }
                 tran.Commit();
                 return(true);
             }
             catch (Exception)
             {
                 tran.Rollback();
                 return(false);
             }
         }
     }
 }
        public bool StoreTransfer(tbl_TransferOrder order, List <tbl_TransferOrderDetail> orderDetails, ref string msg)
        {
            using (var db = _connectionData.OpenDbConnection())
            {
                using (var ts = db.OpenTransaction())
                {
                    try
                    {
                        order.Id = Convert.ToInt32(db.Insert(order, true));
                        foreach (var item in orderDetails)
                        {
                            item.TransferID = order.Id;
                        }
                        db.InsertAll(orderDetails);
                        //Cập nhật tồn kho:
                        //Group theo StoreId
                        var srcStoreId = orderDetails.FirstOrDefault().FromStoreId;
                        var storeId    = orderDetails.FirstOrDefault().StoreID;
                        //  foreach (var storeId in storeIds)

                        var orderByStore = orderDetails.Where(p => p.StoreID == storeId);
                        //Group theo sản phẩm
                        var productGroup = orderByStore.GroupBy(p => p.itemid, (key, g) => new
                        {
                            ProductId = key,
                            Total     = g.Sum(p => p.quantity)
                        });
                        foreach (var item in productGroup)
                        {
                            //trừ tồn kho Kho gốc
                            var srcStoreProduct = db.Select <tbl_StoreProduct>(
                                p => p.productid == item.ProductId && p.storeid == srcStoreId).FirstOrDefault();

                            var product =
                                db.Select <tbl_Product>(
                                    p => p.SysHotelID == CommService.GetHotelId() && p.Id == item.ProductId)
                                .FirstOrDefault();

                            if (srcStoreProduct == null || srcStoreProduct.quantity < item.Total)
                            {
                                //  var product =
                                msg = "Tạo phiếu lỗi. Sản phẩm " + product.Name + " không đủ số lượng trong kho nguồn";
                                ts.Rollback();
                                return(false);
                            }
                            srcStoreProduct.quantity = srcStoreProduct.quantity - item.Total;
                            db.Update(srcStoreProduct);
                            var existItem =
                                db.Select <tbl_StoreProduct>(
                                    p => p.productid == item.ProductId && p.storeid == storeId).FirstOrDefault();
                            if (existItem == null)
                            {
                                existItem = new tbl_StoreProduct
                                {
                                    quantity    = item.Total,
                                    SysHotelID  = CommService.GetHotelId(),
                                    datecreated = DateTime.Now,
                                    productid   = item.ProductId,
                                    unitid      = product.UnitID,
                                    storeid     = storeId
                                };
                                var id = db.Insert(existItem, true);
                                //Thêm bản ghi Log
                                var log = new tbl_StoreProductLog
                                {
                                    typeImportExport = 3,
                                    SysHotelID       = CommService.GetHotelId(),
                                    datecreated      = DateTime.Now,
                                    storeid          = storeId,
                                    productid        = item.ProductId,
                                    storeproductid   = Convert.ToInt32(id),
                                    unitid           = product.UnitID,
                                    quantity         = item.Total,
                                    fromstoreid      = srcStoreId
                                };
                                db.Insert(log);
                            }
                            else
                            {
                                var log = new tbl_StoreProductLog
                                {
                                    typeImportExport = 3,
                                    SysHotelID       = CommService.GetHotelId(),
                                    datecreated      = DateTime.Now,
                                    storeid          = storeId,
                                    productid        = item.ProductId,
                                    storeproductid   = existItem.Id,
                                    unitid           = product.UnitID,
                                    quantity         = item.Total,
                                    fromstoreid      = srcStoreId
                                };
                                db.Insert(log);
                                existItem.quantity = existItem.quantity + item.Total;
                                db.Update(existItem);
                            }
                        }


                        ts.Commit();
                        return(true);
                    }
                    catch (Exception)
                    {
                        ts.Rollback();
                        return(false);
                    }
                }
            }
        }