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)); }