Exemple #1
0
        public async Task <IHttpActionResult> Update(int chiTietDoGiatID, [FromBody] ChiTietDoGiat chiTietDoGiat)
        {
            if (chiTietDoGiat.ChiTietDoGiatID != chiTietDoGiatID)
            {
                return(BadRequest("Id mismatch"));
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            using (var db = new ApplicationDbContext())
            {
                ChiTietDoGiat chiTietDoGiatCu = await db.ChiTietDoGiat.SingleOrDefaultAsync(x => x.ChiTietDoGiatID == chiTietDoGiatID);

                try
                {
                    using (var transaction = db.Database.BeginTransaction())
                    {
                        KhachDatHang kdh = await db.KhachDatHang.SingleOrDefaultAsync(x => x.KhachDatHangID == chiTietDoGiat.KhachDatHangID);

                        NguoiDung nguoiDung = await db.NguoiDung.SingleOrDefaultAsync(x => x.NguoiDungID == kdh.NguoiDungID);

                        DoGiat doGiat = await db.DoGiat.SingleOrDefaultAsync(x => x.DoGiatID == chiTietDoGiat.DoGiatID);

                        HinhThucGiat hinhThucGiat = await db.HinhThucGiat.SingleOrDefaultAsync(x => x.HinhThucGiatID == chiTietDoGiat.HinhThucGiatID);

                        var giaBan = await db.DonGia.FirstOrDefaultAsync(x => x.DoGiatID == doGiat.DoGiatID && x.HinhThucGiatID == hinhThucGiat.HinhThucGiatID);

                        int?donGia = giaBan.DonGiaGiat;
                        kdh.ThanhTien        = (kdh.ThanhTien - donGia * chiTietDoGiatCu.SoLuong + donGia * chiTietDoGiat.SoLuong);
                        nguoiDung.DiemThuong = nguoiDung.DiemThuong - (donGia * chiTietDoGiatCu.SoLuong) / 100 + (donGia * chiTietDoGiat.SoLuong) / 100;

                        chiTietDoGiatCu.KhachDatHangID = chiTietDoGiat.KhachDatHangID;
                        chiTietDoGiatCu.HinhThucGiatID = chiTietDoGiat.HinhThucGiatID;
                        chiTietDoGiatCu.DoGiatID       = chiTietDoGiat.DoGiatID;
                        chiTietDoGiatCu.SoLuong        = chiTietDoGiat.SoLuong;
                        await db.SaveChangesAsync();

                        transaction.Commit();
                    }
                }
                catch (DbUpdateConcurrencyException ducEx)
                {
                    bool exists = db.ChiTietDoGiat.Count(o => o.ChiTietDoGiatID == chiTietDoGiatID) > 0;
                    if (!exists)
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw ducEx;
                    }
                }

                return(Ok(chiTietDoGiat));
            }
        }
Exemple #2
0
        public async Task <IHttpActionResult> Insert([FromBody] ChiTietDoGiat chiTietDoGiat)
        {
            if (chiTietDoGiat.ChiTietDoGiatID != 0)
            {
                return(BadRequest("Invalid ChiTietDoGiatID"));
            }

            using (var db = new ApplicationDbContext())
            {
                using (var transaction = db.Database.BeginTransaction())
                {
                    KhachDatHang kdh = await db.KhachDatHang.SingleOrDefaultAsync(x => x.KhachDatHangID == chiTietDoGiat.KhachDatHangID);

                    NguoiDung nguoiDung = await db.NguoiDung.SingleOrDefaultAsync(x => x.NguoiDungID == kdh.NguoiDungID);

                    var giaBan = await db.DonGia.FirstOrDefaultAsync(x => x.DoGiatID == chiTietDoGiat.DoGiatID && x.HinhThucGiatID == chiTietDoGiat.HinhThucGiatID);

                    if (giaBan != null)
                    {
                        int?donGia = giaBan.DonGiaGiat;
                        kdh.ThanhTien       += donGia * chiTietDoGiat.SoLuong;
                        nguoiDung.DiemThuong = kdh.ThanhTien / 100;
                    }
                    var chiTietDoGiatDaCo = await db.ChiTietDoGiat.FirstOrDefaultAsync(x => x.KhachDatHangID == chiTietDoGiat.KhachDatHangID &&
                                                                                       x.DoGiatID == chiTietDoGiat.DoGiatID &&
                                                                                       x.HinhThucGiatID == chiTietDoGiat.HinhThucGiatID);

                    if (chiTietDoGiatDaCo != null)
                    {
                        chiTietDoGiatDaCo.SoLuong += chiTietDoGiat.SoLuong;
                    }
                    else
                    {
                        db.ChiTietDoGiat.Add(chiTietDoGiat);
                    }

                    await db.SaveChangesAsync();

                    transaction.Commit();
                }
            }

            return(Ok(chiTietDoGiat));
        }