示例#1
0
        public async Task <dynamic> themDonDatHang(DonDatHangInsertVM donDatHang)
        {
            int?maDDH = null;

            using (var connection = new SqlConnection(connectionstr))
            {
                await connection.OpenAsync();

                var transaction = connection.BeginTransaction();
                try
                {
                    var insertDDH = @" IF @MaKH=0 SET @MaKH= NULL
	                                   IF @MaNV= 0 SET @MaNV= NULL INSERT INTO DBO.DONDATHANG (NgayDat, TrangThai, MaKH, MaNV, TinhTrang, DiaChiNhan, TenNguoiNhan, SoDT, Email) VALUES ( @NgayDat, 0, @MaKH, @MaNV, @TinhTrang, @DiaChiNhan, @TenNguoiNhan, @SoDT, @Email ); SELECT CAST(SCOPE_IDENTITY() as int)"    ;
                    var p         = new DynamicParameters();
                    p.Add("@NgayDat", donDatHang.NgayDat);
                    p.Add("@MaKH", donDatHang.MaKH);
                    p.Add("@MaNV", donDatHang.MaNV);
                    p.Add("@TinhTrang", donDatHang.TinhTrang);
                    p.Add("@DiaChiNhan", donDatHang.DiaChiNhan);
                    p.Add("@TenNguoiNhan", donDatHang.TenNguoiNhan);
                    p.Add("@SoDT", donDatHang.SoDT);
                    p.Add("@Email", donDatHang.Email);


                    maDDH = await connection.ExecuteScalarAsync <int>(insertDDH, p, transaction);

                    foreach (var item in donDatHang.dsSanPham)
                    {
                        for (int i = 0; i < item.SoLuong; i++)
                        {
                            var p2 = new DynamicParameters();
                            p2.Add("@MaSP", item.MaSP);

                            var insertCTDDH = @"INSERT INTO DBO.CHITIETDONDATHANG(MADDH, MaSeri, DonGia)
                                                VALUES(@MaDDH, @MaSeri, @DonGia)";

                            var selectSeriInsert = "DECLARE @ID varchar(10) " +
                                                   "SET @ID = (SELECT TOP 1 MaSeri FROM SANPHAM WHERE MaSP= @MaSP AND TrangThai=1)" +
                                                   "UPDATE SANPHAM SET TrangThai=0 WHERE MaSeri = @ID  " +
                                                   "SELECT @ID";

                            string seri = await connection.ExecuteScalarAsync <string>(selectSeriInsert, p2, transaction);

                            var p3 = new DynamicParameters();
                            p3.Add("@MaSeri", seri);
                            p3.Add("@MaDDH", maDDH);
                            p3.Add("@DonGia", item.DonGia);
                            await connection.ExecuteAsync(insertCTDDH, p3, transaction);

                            var reduceProduct = @"UPDATE dbo.SANPHAM_LOAI SET
		                                  SoLuongTon= SoLuongTon-1  WHERE MaSP = @MaSP "        ;
                            await connection.ExecuteAsync(reduceProduct, p2, transaction);
                        }
                    }
                    transaction.Commit();
                    return("success");
                }
                catch (Exception ex)
                {
                    //Log the exception (ex)
                    System.Diagnostics.Debug.WriteLine(ex);
                    try
                    {
                        transaction.Rollback();
                    }
                    catch (Exception ex2)
                    {
                        // Handle any errors that may have occurred
                        // on the server that would cause the rollback to fail, such as
                        // a closed connection.
                        // Log the exception ex2
                        var response = await tbl.TBLoi(ThongBaoLoi.Loi500, "Can not Rollback!");

                        return(response.Content);
                    }
                    var response2 = await tbl.TBLoi(ThongBaoLoi.Loi500, "Sorry! Insert order fail");

                    return(response2.Content);
                }
            }
        }
        public async Task <IActionResult> ThemDonDatHang(DonDatHangInsertVM donDatHang)
        {
            dynamic result = await _donDatHangRepository.themDonDatHang(donDatHang);

            return(Ok(result));
        }