From 9063b6038c6633f13d341937d8451a4dfc770d55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20=C4=90=E1=BB=A9c=20Tr=C6=B0=C6=A1ng?= Date: Thu, 22 Oct 2020 13:11:43 +0700 Subject: [PATCH] Fixed 22102020 --- QuanLyChiTieu/chitieu.cpp | 18 +- QuanLyChiTieu/expensetracker.cpp | 124 +++++++++----- QuanLyChiTieu/expensetracker.h | 2 +- QuanLyChiTieu/loan.cpp | 19 --- QuanLyChiTieu/loan.h | 2 - QuanLyChiTieu/quanlychitieu.cpp | 25 +++ QuanLyChiTieu/quanlychitieu.h | 2 + QuanLyChiTieu/quanlythunhap.cpp | 36 +++- QuanLyChiTieu/quanlythunhap.h | 6 +- QuanLyChiTieu/thongke.cpp | 281 +++++++------------------------ QuanLyChiTieu/thongke.h | 10 +- QuanLyChiTieu/tietkiem.cpp | 36 +--- QuanLyChiTieu/tietkiem.h | 4 +- schem2110.sql | Bin 26188 -> 25740 bytes 14 files changed, 230 insertions(+), 335 deletions(-) diff --git a/QuanLyChiTieu/chitieu.cpp b/QuanLyChiTieu/chitieu.cpp index c2fbd13..2c62de9 100644 --- a/QuanLyChiTieu/chitieu.cpp +++ b/QuanLyChiTieu/chitieu.cpp @@ -74,11 +74,6 @@ void ChiTieu::on_btn_OK_clicked() SoTien = ui->lineEdit_SoTien->text().toLongLong(); - //Cập nhật thông tin thu nhập cho bảng ThongKe - ThoiGianThongKe = ui->dateEdit->date().toString("yyyy-MM-dd"); - ThongKeQL.CapNhatTongChi(this->Username, ThoiGianThongKe, SoTien); - - //done //Continue.. if( MoTa == "" || SoTien < 0){ @@ -149,13 +144,11 @@ void ChiTieu::on_btn_OK_clicked() /// Thêm vào bảng KhoanChi - qry.prepare("INSERT KhoanChi ( SoTien, NgayChiTieu, GhiChu, MaDanhMuc, TenChu, TenTaiKhoan, ID_DanhMuc )" "VALUES ( :SoTien, :NgayChiTieu, :GhiChu, :MaDanhMuc, :TenChu, :TenTaiKhoan, :ID_DanhMuc )"); + qry.prepare("INSERT KhoanChi ( SoTien, NgayChiTieu, GhiChu, TenTaiKhoan, ID_DanhMuc )" "VALUES ( :SoTien, :NgayChiTieu, :GhiChu, :TenTaiKhoan, :ID_DanhMuc )"); qry.bindValue(":SoTien", SoTien); qry.bindValue(":NgayChiTieu", NgayChiTieu); qry.bindValue(":GhiChu", MoTa); - qry.bindValue(":MaDanhMuc", MaDanhMuc); - qry.bindValue(":TenChu", Username); qry.bindValue(":TenTaiKhoan", TenTaiKhoan); qry.bindValue(":ID_DanhMuc", ID_DanhMuc); @@ -163,6 +156,15 @@ void ChiTieu::on_btn_OK_clicked() ///done + /// Lấy mã khoản chi + int MaKhoanChi = DanhMucQL.LayMaKhoanChi(); + + //Cập nhật thông tin thu nhập cho bảng ThongKe + + ThongKeQL.CapNhatMaKhoanChi(this->Username, NgayChiTieu, MaKhoanChi); + + //done + buttonPressed(); diff --git a/QuanLyChiTieu/expensetracker.cpp b/QuanLyChiTieu/expensetracker.cpp index 8349d9a..c03c0dc 100644 --- a/QuanLyChiTieu/expensetracker.cpp +++ b/QuanLyChiTieu/expensetracker.cpp @@ -178,17 +178,17 @@ void ExpenseTracker::on_pushButton_TrangChinh_clicked() //Đồ thị lli TienGD, TienSK, TienMS, TienHP, TienHD, TienKD, TienOT, TienQT, TienDC, TienGT, TienBH; - TienGD = DanhMucQL.LaySoTienTong("GD", TenDangNhap); - TienSK = DanhMucQL.LaySoTienTong("SK", TenDangNhap); - TienMS = DanhMucQL.LaySoTienTong("MS", TenDangNhap); - TienHP = DanhMucQL.LaySoTienTong("HP", TenDangNhap); - TienHD = DanhMucQL.LaySoTienTong("HD", TenDangNhap); - TienKD = DanhMucQL.LaySoTienTong("KD", TenDangNhap); - TienOT = DanhMucQL.LaySoTienTong("OT", TenDangNhap); - TienQT = DanhMucQL.LaySoTienTong("QT", TenDangNhap); - TienDC = DanhMucQL.LaySoTienTong("DC", TenDangNhap); - TienGT = DanhMucQL.LaySoTienTong("GT", TenDangNhap); - TienBH = DanhMucQL.LaySoTienTong("BH", TenDangNhap); + TienGD = ChiTieuQL.LaySoTienTong("GD", TenDangNhap); + TienSK = ChiTieuQL.LaySoTienTong("SK", TenDangNhap); + TienMS = ChiTieuQL.LaySoTienTong("MS", TenDangNhap); + TienHP = ChiTieuQL.LaySoTienTong("HP", TenDangNhap); + TienHD = ChiTieuQL.LaySoTienTong("HD", TenDangNhap); + TienKD = ChiTieuQL.LaySoTienTong("KD", TenDangNhap); + TienOT = ChiTieuQL.LaySoTienTong("OT", TenDangNhap); + TienQT = ChiTieuQL.LaySoTienTong("QT", TenDangNhap); + TienDC = ChiTieuQL.LaySoTienTong("DC", TenDangNhap); + TienGT = ChiTieuQL.LaySoTienTong("GT", TenDangNhap); + TienBH = ChiTieuQL.LaySoTienTong("BH", TenDangNhap); QPieSeries *series = new QPieSeries(); QPieSlice *slice; @@ -326,7 +326,7 @@ void ExpenseTracker::on_pushButton_TrangChinh_clicked() } - QSqlQuery qry("SELECT * FROM dbo.NguoiDung nd WHERE nd.TenDangNhap = '"+TenDangNhap+"'"); + QSqlQuery qry("SELECT * FROM NguoiDung nd WHERE nd.TenDangNhap = '"+TenDangNhap+"'"); while( qry.next() ){ this->HoTen = qry.value("HoVaTen").toString(); } @@ -438,7 +438,7 @@ void ExpenseTracker::on_pushButton_ThuNhap_clicked() qryModel = new QSqlQueryModel(); - qryModel->setQuery("SELECT TOP 50 LoaiThuNhap AS N'Loại thu nhập', format(SoTien, 'N0' ) AS N'Số tiền(VNĐ)', TenTaiKhoan AS N'Đến tài khoản', NgayThuNhap AS N'Thời gian', GhiChu AS N'Ghi chú' FROM ThuNhap WHERE TenChu = '"+TenDangNhap+"' "); + qryModel->setQuery("SELECT TOP 50 ltn.LoaiThuNhap AS N'Loại thu nhập', format(tn.SoTien, 'N0' ) AS N'Số tiền(VNĐ)', tn.TenTaiKhoan AS N'Đến tài khoản', tn.NgayThuNhap AS N'Thời gian', tn.GhiChu AS N'Ghi chú' FROM ThuNhap tn JOIN LoaiThuNhap ltn ON tn.MaLoaiThuNhap = ltn.MaLoaiThuNhap WHERE ltn.TenChu = '"+TenDangNhap+"' "); //Chỉnh độ rộng ui->tableView_page3->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->tableView_page3->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); @@ -571,7 +571,7 @@ void ExpenseTracker::on_pushButton_NguoiDung_clicked() QString HoVaTen, Email,CongViec; - QSqlQuery qry("SELECT * FROM dbo.NguoiDung nd WHERE nd.TenDangNhap = '"+TenDangNhap+"'"); + QSqlQuery qry("SELECT * FROM NguoiDung nd WHERE nd.TenDangNhap = '"+TenDangNhap+"'"); while( qry.next() ){ HoVaTen = qry.value("HoVaTen").toString(); Email = qry.value("Email").toString(); @@ -620,7 +620,7 @@ void ExpenseTracker::on_btn_p2_TimTheoNgay_clicked() QSqlQuery qry; - qry.prepare("SELECT TOP 10 format(SoTien, 'N0' ) AS N'Số tiền(VNĐ)', GhiChu AS N'Mô tả', format(NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi WHERE TenChu = '"+TenDangNhap+"' AND NgayChiTieu = '"+Ngay+"' ORDER BY Year(NgayChiTieu) DESC, Month(NgayChiTieu) DESC, Day(NgayChiTieu) DESC "); + qry.prepare("SELECT TOP 75 format(kc.SoTien, 'N0' ) AS N'Số tiền(VNĐ)', kc.GhiChu AS N'Mô tả', format(kc.NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', kc.TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi kc JOIN DanhMucChiTieu dmct ON kc.ID_DanhMuc = dmct.ID_DanhMuc WHERE dmct.TenChu = '"+TenDangNhap+"' AND kc.NgayChiTieu = '"+Ngay+"' ORDER BY Year(kc.NgayChiTieu) DESC, Month(kc.NgayChiTieu) DESC, Day(kc.NgayChiTieu) DESC "); if( qry.exec() ){ int count = 0; @@ -668,7 +668,7 @@ void ExpenseTracker::on_btn_p2_TimTheoThang_clicked() QSqlQuery qry; - qry.prepare("SELECT format(SoTien, 'N0' ) AS N'Số tiền(VNĐ)', GhiChu AS N'Mô tả', format(NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi WHERE TenChu = '"+TenDangNhap+"' AND Month(NgayChiTieu) = '"+Thang+"' ORDER BY Year(NgayChiTieu) DESC, Month(NgayChiTieu) DESC, Day(NgayChiTieu) DESC "); + qry.prepare("SELECT TOP 75 format(kc.SoTien, 'N0' ) AS N'Số tiền(VNĐ)', kc.GhiChu AS N'Mô tả', format(kc.NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', kc.TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi kc JOIN DanhMucChiTieu dmct ON kc.ID_DanhMuc = dmct.ID_DanhMuc WHERE dmct.TenChu = '"+TenDangNhap+"' AND Month(kc.NgayChiTieu) = '"+Thang+"' ORDER BY Year(kc.NgayChiTieu) DESC, Month(kc.NgayChiTieu) DESC, Day(kc.NgayChiTieu) DESC "); if( qry.exec() ){ int count = 0; @@ -712,7 +712,7 @@ void ExpenseTracker::on_btn_p2_TimTheoNam_clicked() QSqlQuery qry; - qry.prepare("SELECT TOP 10 format(SoTien, 'N0' ) AS N'Số tiền(VNĐ)', GhiChu AS N'Mô tả', format(NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi WHERE TenChu = '"+TenDangNhap+"' AND Year(NgayChiTieu) = '"+Nam+"' ORDER BY Year(NgayChiTieu) DESC, Month(NgayChiTieu) DESC, Day(NgayChiTieu) DESC "); + qry.prepare("SELECT TOP 75 format(kc.SoTien, 'N0' ) AS N'Số tiền(VNĐ)', kc.GhiChu AS N'Mô tả', format(kc.NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', kc.TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi kc JOIN DanhMucChiTieu dmct ON kc.ID_DanhMuc = dmct.ID_DanhMuc WHERE dmct.TenChu = '"+TenDangNhap+"' AND Year(kc.NgayChiTieu) = '"+Nam+"' ORDER BY Year(kc.NgayChiTieu) DESC, Month(kc.NgayChiTieu) DESC, Day(kc.NgayChiTieu) DESC "); if( qry.exec() ){ int count = 0; @@ -763,19 +763,19 @@ void ExpenseTracker::on_btn_p2_TimKiemChung_clicked() QSqlQuery qry; if( TenDanhMuc == "Tất Cả" && TenTaiKhoan == "Tất Cả" ){ - qry.prepare("SELECT format(SoTien, 'N0' ) AS N'Số tiền(VNĐ)', GhiChu AS N'Mô tả', format(NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi WHERE TenChu = '"+TenDangNhap+"' AND GhiChu LIKE N'%"+Key+"%' ORDER BY Year(NgayChiTieu) DESC, Month(NgayChiTieu) DESC, Day(NgayChiTieu) DESC "); + qry.prepare("SELECT TOP 75 format(kc.SoTien, 'N0' ) AS N'Số tiền(VNĐ)', kc.GhiChu AS N'Mô tả', format(kc.NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', kc.TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi kc JOIN DanhMucChiTieu dmct ON kc.ID_DanhMuc = dmct.ID_DanhMuc WHERE dmct.TenChu = '"+TenDangNhap+"' AND kc.GhiChu LIKE N'%"+Key+"%' ORDER BY Year(kc.NgayChiTieu) DESC, Month(kc.NgayChiTieu) DESC, Day(kc.NgayChiTieu) DESC "); } if( TenDanhMuc != "Tất Cả" && TenTaiKhoan == "Tất Cả" ){ - qry.prepare("SELECT TOP 15 format(SoTien, 'N0' ) AS N'Số tiền(VNĐ)', GhiChu AS N'Mô tả', format(NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi WHERE TenChu = '"+TenDangNhap+"' AND MaDanhMuc = '"+MaDanhMuc+"' AND GhiChu LIKE N'%"+Key+"%' ORDER BY Year(NgayChiTieu) DESC, Month(NgayChiTieu) DESC, Day(NgayChiTieu) DESC "); + qry.prepare("SELECT TOP 75 format(kc.SoTien, 'N0' ) AS N'Số tiền(VNĐ)', kc.GhiChu AS N'Mô tả', format(kc.NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', kc.TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi kc JOIN DanhMucChiTieu dmct ON kc.ID_DanhMuc = dmct.ID_DanhMuc WHERE dmct.TenChu = '"+TenDangNhap+"' AND dmct.MaDanhMuc = '"+MaDanhMuc+"' AND kc.GhiChu LIKE N'%"+Key+"%' ORDER BY Year(kc.NgayChiTieu) DESC, Month(kc.NgayChiTieu) DESC, Day(kc.NgayChiTieu) DESC "); } if( TenDanhMuc == "Tất Cả" && TenTaiKhoan != "Tất Cả" ){ - qry.prepare("SELECT TOP 15 format(SoTien, 'N0' ) AS N'Số tiền(VNĐ)', GhiChu AS N'Mô tả', format(NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi WHERE TenChu = '"+TenDangNhap+"' AND TenTaiKhoan = N'"+TenTaiKhoan+"' AND GhiChu LIKE N'%"+Key+"%' ORDER BY Year(NgayChiTieu) DESC, Month(NgayChiTieu) DESC, Day(NgayChiTieu) DESC "); + qry.prepare("SELECT TOP 75 format(kc.SoTien, 'N0' ) AS N'Số tiền(VNĐ)', kc.GhiChu AS N'Mô tả', format(kc.NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', kc.TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi kc JOIN DanhMucChiTieu dmct ON kc.ID_DanhMuc = dmct.ID_DanhMuc WHERE dmct.TenChu = '"+TenDangNhap+"' AND kc.TenTaiKhoan = N'"+TenTaiKhoan+"' AND kc.GhiChu LIKE N'%"+Key+"%' ORDER BY Year(kc.NgayChiTieu) DESC, Month(kc.NgayChiTieu) DESC, Day(kc.NgayChiTieu) DESC "); } if( TenDanhMuc != "Tất Cả" && TenTaiKhoan != "Tất Cả" ){ - qry.prepare("SELECT TOP 15 format(SoTien, 'N0' ) AS N'Số tiền(VNĐ)', GhiChu AS N'Mô tả', format(NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi WHERE TenChu = '"+TenDangNhap+"' AND MaDanhMuc = '"+MaDanhMuc+"' AND TenTaiKhoan = N'"+TenTaiKhoan+"' AND GhiChu LIKE N'%"+Key+"%' ORDER BY Year(NgayChiTieu) DESC, Month(NgayChiTieu) DESC, Day(NgayChiTieu) DESC "); + qry.prepare("SELECT TOP 75 format(kc.SoTien, 'N0' ) AS N'Số tiền(VNĐ)', kc.GhiChu AS N'Mô tả', format(kc.NgayChiTieu,'dd/MM/yyyy') AS N'Thời gian', kc.TenTaiKhoan AS N'Tên tài khoản' FROM KhoanChi kc JOIN DanhMucChiTieu dmct ON kc.ID_DanhMuc = dmct.ID_DanhMuc WHERE dmct.TenChu = '"+TenDangNhap+"' AND dmct.MaDanhMuc = '"+MaDanhMuc+"' AND kc.TenTaiKhoan = N'"+TenTaiKhoan+"' AND kc.GhiChu LIKE N'%"+Key+"%' ORDER BY Year(kc.NgayChiTieu) DESC, Month(kc.NgayChiTieu) DESC, Day(kc.NgayChiTieu) DESC "); } if( qry.exec() ){ @@ -801,8 +801,8 @@ void ExpenseTracker::on_btn_p2_TimKiemChung_clicked() // - ui->tableView_page2->setModel(qryModel); + ui->tableView_page2->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); ui->tableView_page2->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); ui->tableView_page2->update(); @@ -836,12 +836,6 @@ void ExpenseTracker::on_btn_p3_XacNhan_clicked() SoTien = ui->lineEdit_p3_SoTien->text().toLongLong(); - //Cập nhật thông tin thu nhập cho bảng ThongKe - ThoiGianThongKe = ui->dateEdit_p3_NgayThuNhap->date().toString("yyyy-MM-dd"); - ThongKeQL.CapNhatTongThu(TenDangNhap, ThoiGianThongKe, SoTien); - - //done - //Continue.. if( LoaiThuNhap == "" || TenTaiKhoan == "" || SoTien < 0){ @@ -927,7 +921,7 @@ void ExpenseTracker::on_btn_p3_XacNhan_clicked() } } - // + //done /// Cộng tiền vào tài khoản qry.prepare("UPDATE TaiKhoan SET SoDu = :SoDuTK WHERE Ten = :TenTaiKhoan AND TenChu = :Username; "); @@ -942,22 +936,38 @@ void ExpenseTracker::on_btn_p3_XacNhan_clicked() else QMessageBox::warning(this,"Lỗi",QString::fromUtf8("Thêm không thành công !!")); /// done + ////Lấy MaLoaiThuNhap đưa vào bảng ThuNhap + + int MaLoaiThuNhap = ThuNhapQL.LayMaLoaiThuNhap(TenDangNhap, LoaiThuNhap); + + //// /// Thêm vào thu nhập - qry.prepare("INSERT ThuNhap ( LoaiThuNhap, SoTien, GhiChu, TenChu, TenTaiKhoan, NgayThuNhap )" "VALUES ( :LoaiThuNhap, :SoTien, :GhiChu, :TenChu, :TenTaiKhoan, :NgayThuNhap )"); + qry.prepare("INSERT ThuNhap ( SoTien, GhiChu, TenTaiKhoan, NgayThuNhap, MaLoaiThuNhap )" "VALUES ( :SoTien, :GhiChu, :TenTaiKhoan, :NgayThuNhap, :MaLoaiThuNhap )"); - qry.bindValue(":LoaiThuNhap", LoaiThuNhap); qry.bindValue(":SoTien", SoTien); qry.bindValue(":GhiChu", GhiChu); - qry.bindValue(":TenChu", TenDangNhap); qry.bindValue(":TenTaiKhoan", TenTaiKhoan); qry.bindValue(":NgayThuNhap", NgayThuNhap); + qry.bindValue(":MaLoaiThuNhap", MaLoaiThuNhap); + + if( !qry.exec() ){ + QMessageBox::warning(this,"Lỗi",QString::fromUtf8("Thêm không thành công !!")); + + - if( qry.exec() ){ - RefreshP3(); } - else QMessageBox::warning(this,"Lỗi",QString::fromUtf8("Thêm không thành công !!")); + /// Lấy mã khoản chi + int MaThuNhap = ThuNhapQL.LayMaThuNhap(); + //qDebug()<= 0 ){ + bool check = false; //Kiểm tra nếu mục tiêu mới hợp lệ + + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, "Chúc mừng", "Bạn đã đạt mục tiêu tiết kiệm, bạn có muốn nối dài mục tiêu không?", QMessageBox::Yes|QMessageBox::No); + + lli MucTieuMoi = 0; + if( reply == QMessageBox::Yes ){ + QString MucTieuMoiText = QInputDialog::getText(this,"Nhập vào đây", "Mục tiêu mới: "); + + if( !CheckMoneyInput(MucTieuMoiText) ) check = true; + + MucTieuMoi = MucTieuMoiText.toLongLong(); + + if( !check && MucTieuMoi <= SoDuTK ) check = true; + + + } + + if( check ) QMessageBox::warning(this,"Chú ý",QString::fromUtf8("Bạn nhập không hợp lệ hoặc mục tiêu mới không lớn hơn số dư tiết kiệm!\n Mục tiêu sẽ không đổi!")); + else TietKiemQL.CapNhatMucTieu(TenDangNhap, MTK, MucTieuMoi); + + } + } //done @@ -1259,7 +1294,7 @@ void ExpenseTracker::on_btn_page4_XoaTaiKhoan_clicked() //Xoá mọi thứ trong việc chi tiêu liên quan đến tài khoản này - DanhMucQL.XoaTaiKhoanInChiTieu(TenDangNhap, TenTaiKhoan); + ChiTieuQL.XoaTaiKhoanInChiTieu(TenDangNhap, TenTaiKhoan); //done @@ -1304,7 +1339,7 @@ void ExpenseTracker::on_btn_page4_CapNhat_XemBang_clicked() if( LoaiTaiKhoan == "Tiết kiệm" ){ qryModel = new QSqlQueryModel(); - qryModel->setQuery("SELECT tk1.TenTietKiem AS N'Tên tiết kiệm', format(tk1.SoDu, 'N0' ) AS N'Số dư tiết kiệm(VNĐ)', format(tk1.MucTieu, 'N0' ) AS N'Mục tiêu', tk2.MoTa AS N'Mô Tả' FROM TietKiem tk1 INNER JOIN dbo.TaiKhoan tk2 ON tk1.MaTaiKhoan = tk2.MaTaiKhoan AND tk1.TenChu = '"+TenDangNhap+"' AND tk2.TenChu = '"+TenDangNhap+"' "); + qryModel->setQuery("SELECT tkiem.TenTietKiem AS N'Tên tiết kiệm', format(tk.SoDu, 'N0' ) AS N'Số dư tiết kiệm(VNĐ)', format(tkiem.MucTieu, 'N0' ) AS N'Mục tiêu', tk.MoTa AS N'Mô Tả' FROM TietKiem tkiem INNER JOIN TaiKhoan tk ON tkiem.MaTaiKhoan = tk.MaTaiKhoan AND tk.TenChu = '"+TenDangNhap+"' "); //Chỉnh độ rộng ui->tableView_page4->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->tableView_page4->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); @@ -1315,7 +1350,7 @@ void ExpenseTracker::on_btn_page4_CapNhat_XemBang_clicked() if( LoaiTaiKhoan == "Nợ" ){ qryModel = new QSqlQueryModel(); - qryModel->setQuery("SELECT tk1.TenNo AS N'Tên khoản nợ', format(tk1.TienNo, 'N0' ) AS N'Tiền nợ(VNĐ)', format(tk1.KyHan,'dd/MM/yyyy') AS N'Kỳ hạn', tk2.MoTa AS N'Mô tả' FROM Loan tk1 INNER JOIN dbo.TaiKhoan tk2 ON tk1.MaTaiKhoan = tk2.MaTaiKhoan AND tk1.TenChu = '"+TenDangNhap+"' AND tk2.TenChu = '"+TenDangNhap+"' "); + qryModel->setQuery("SELECT no.TenNo AS N'Tên khoản nợ', format(tk.SoDu, 'N0' ) AS N'Tiền nợ(VNĐ)', format(no.KyHan,'dd/MM/yyyy') AS N'Kỳ hạn', tk.MoTa AS N'Mô tả' FROM Loan no INNER JOIN TaiKhoan tk ON no.MaTaiKhoan = tk.MaTaiKhoan AND tk.TenChu = '"+TenDangNhap+"'"); //Chỉnh độ rộng ui->tableView_page4->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->tableView_page4->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); @@ -1328,6 +1363,7 @@ void ExpenseTracker::on_btn_page4_CapNhat_XemBang_clicked() } //done p4 +///Chưa fix //Page Thống kê void ExpenseTracker::on_btn_P5_TheoThang_tab1_clicked() { @@ -1517,7 +1553,7 @@ void ExpenseTracker::on_btn_P5_CapNhat_tab2_clicked() //Xử lý biểu đồ ///7 ngày trước if( KhoangThoiGian == "7 ngày trước" ){ - QVector> Chi = DanhMucQL.LayThongKe7NgayTruoc(TenDangNhap, TenDanhMuc, TenTaiKhoan, Ngay, Thang, Nam); + QVector> Chi = ChiTieuQL.LayThongKe7NgayTruoc(TenDangNhap, TenDanhMuc, TenTaiKhoan, Ngay, Thang, Nam); lli Max = Chi[1][2]; for (int i = 2; i < 8; ++i) { @@ -1592,7 +1628,7 @@ void ExpenseTracker::on_btn_P5_CapNhat_tab2_clicked() /// 30 ngày trước else if( KhoangThoiGian == "30 ngày trước" ){ - QVector> Chi = DanhMucQL.LayThongKe30NgayTruoc(TenDangNhap, TenDanhMuc, TenTaiKhoan, Ngay, Thang, Nam); + QVector> Chi = ChiTieuQL.LayThongKe30NgayTruoc(TenDangNhap, TenDanhMuc, TenTaiKhoan, Ngay, Thang, Nam); lli Max = Chi[1][3]; for (int i = 2; i < 11; ++i) { @@ -1665,7 +1701,7 @@ void ExpenseTracker::on_btn_P5_CapNhat_tab2_clicked() ///done else if( KhoangThoiGian == "3 tháng trước" ){ - QVector> Chi = DanhMucQL.LayThongKe3ThangTruoc(TenDangNhap, TenDanhMuc, TenTaiKhoan, Ngay, Thang, Nam); + QVector> Chi = ChiTieuQL.LayThongKe3ThangTruoc(TenDangNhap, TenDanhMuc, TenTaiKhoan, Ngay, Thang, Nam); lli Max = Chi[1][3]; for (int i = 2; i < 11; ++i) { @@ -1736,7 +1772,7 @@ void ExpenseTracker::on_btn_P5_CapNhat_tab2_clicked() chartView->show(); } else if( KhoangThoiGian == "Năm này" ){ - QVector Chi = DanhMucQL.LayThongKe1Nam(TenDangNhap, TenDanhMuc, TenTaiKhoan, Nam); + QVector Chi = ChiTieuQL.LayThongKe1Nam(TenDangNhap, TenDanhMuc, TenTaiKhoan, Nam); lli Max = Chi[1]; for (int i = 2; i < 13; ++i) { diff --git a/QuanLyChiTieu/expensetracker.h b/QuanLyChiTieu/expensetracker.h index 805991b..893528e 100644 --- a/QuanLyChiTieu/expensetracker.h +++ b/QuanLyChiTieu/expensetracker.h @@ -168,7 +168,7 @@ private slots: QSqlQueryModel *qryModel; QString HoTen = "Username"; QuanLyTaiKhoan TaiKhoanQL; - QuanLyChiTieu DanhMucQL; + QuanLyChiTieu ChiTieuQL; QuanLyThuNhap ThuNhapQL; TietKiem TietKiemQL; Loan NoQL; diff --git a/QuanLyChiTieu/loan.cpp b/QuanLyChiTieu/loan.cpp index 28fd6af..c2ad33f 100644 --- a/QuanLyChiTieu/loan.cpp +++ b/QuanLyChiTieu/loan.cpp @@ -5,25 +5,6 @@ Loan::Loan() } -int Loan::LayMaTaiKhoanInLoan(QString Username, QString TenTaiKhoan){ - int res = -1; - - this->TenChu = Username; - this->TenTaiKhoan = TenTaiKhoan; - - QSqlQuery qry; - - if( qry.exec("SELECT MaTaiKhoan FROM TaiKhoan WHERE TenChu = '"+TenChu+"' AND Ten = N'"+TenTaiKhoan+"' ") ){ - while ( qry.next() ) { - res = qry.value("MaTaiKhoan").toInt(); - } - } - - else qDebug()<<"Lỗi không kết nối được CSDL!"; - - return res; -} - void Loan::CapNhatDuNo(QString Username, int MaTaiKhoan, lli SoDuNo){ this->TenChu = Username; this->MaTaiKhoan = MaTaiKhoan; diff --git a/QuanLyChiTieu/loan.h b/QuanLyChiTieu/loan.h index 5b43e20..32c312b 100644 --- a/QuanLyChiTieu/loan.h +++ b/QuanLyChiTieu/loan.h @@ -15,8 +15,6 @@ class Loan : public QuanLyTaiKhoan public: Loan(); - int LayMaTaiKhoan(QString Username, QString TenTaiKhoan); - void CapNhatDuNo(QString Username, int MaTaiKhoan, lli SoDuNo); void XoaNo(QString Username, int MaTaiKhoan); diff --git a/QuanLyChiTieu/quanlychitieu.cpp b/QuanLyChiTieu/quanlychitieu.cpp index fd2e3d2..78537b6 100644 --- a/QuanLyChiTieu/quanlychitieu.cpp +++ b/QuanLyChiTieu/quanlychitieu.cpp @@ -97,6 +97,31 @@ lli QuanLyChiTieu::LaySoTienTong(QString MaDanhMuc, QString Username){ return res; } +lli QuanLyChiTieu::LaySoTienTheoMaKhoanChi(QString Username, int MaKhoanChi){ + this->TenChu = Username; + lli res = 0; + + QSqlQuery qry; + qry.prepare("SELECT kc.SoTien FROM KhoanChi kc JOIN DanhMucChiTieu dmct ON kc.ID_DanhMuc = dmct.ID_DanhMuc WHERE dmct.TenChu = :Username AND kc.MaKhoanChi = :MaKhoanChi "); + + + qry.bindValue(":MaThuNhap", MaKhoanChi); + qry.bindValue(":Username", Username); + + if( qry.exec() ){ + + while ( qry.next() ) { + res += qry.value("SoTien").toLongLong(); + } + } + else{ + qDebug()<<"Loi CSDL"; + return -1; + } + + return res; +} + void QuanLyChiTieu::XoaTaiKhoanInChiTieu(QString Username, QString TenTaiKhoan ){ QSqlQuery qry; diff --git a/QuanLyChiTieu/quanlychitieu.h b/QuanLyChiTieu/quanlychitieu.h index eba45ed..662b4d1 100644 --- a/QuanLyChiTieu/quanlychitieu.h +++ b/QuanLyChiTieu/quanlychitieu.h @@ -28,6 +28,8 @@ class QuanLyChiTieu lli LaySoTienTong(QString MaDanhMuc, QString Username); + lli LaySoTienTheoMaKhoanChi(QString Username, int MaKhoanChi); + void XoaTaiKhoanInChiTieu(QString Username, QString TenTaiKhoan ); QVector> LayThongKe7NgayTruoc(QString Username, QString TenDanhMuc, QString TenTaiKhoan, QString Ngay, QString Thang,QString Nam); diff --git a/QuanLyChiTieu/quanlythunhap.cpp b/QuanLyChiTieu/quanlythunhap.cpp index 7e7317d..29374f3 100644 --- a/QuanLyChiTieu/quanlythunhap.cpp +++ b/QuanLyChiTieu/quanlythunhap.cpp @@ -5,14 +5,20 @@ QuanLyThuNhap::QuanLyThuNhap() } -lli QuanLyThuNhap::LaySoTienTong(QString Username){ +lli QuanLyThuNhap::LaySoTienTong(QString Username, int MaThuNhap){ this->TenChu = Username; lli res = 0; QSqlQuery qry; + if( MaThuNhap < 0 ) + qry.prepare("SELECT tn.SoTien FROM ThuNhap tn JOIN LoaiThuNhap ltn ON tn.MaLoaiThuNhap = ltn.MaLoaiThuNhap WHERE ltn.TenChu = :Username "); + else { + qry.prepare("SELECT tn.SoTien FROM ThuNhap tn JOIN LoaiThuNhap ltn ON tn.MaLoaiThuNhap = ltn.MaLoaiThuNhap WHERE ltn.TenChu = :Username AND tn.MaThuNhap = :MaThuNhap "); + } - qry.prepare("SELECT SoTien FROM ThuNhap WHERE TenChu = :Username "); + qry.bindValue(":MaThuNhap", MaThuNhap); + qry.bindValue(":Username", Username); if( qry.exec() ){ @@ -65,16 +71,31 @@ int QuanLyThuNhap::LayMaLoaiThuNhap(QString Username, QString LoaiThuNhap){ return res; } +//Hàm này chỉ được gọi sau khi INSERT vào bảng LoaiThuNhap +int QuanLyThuNhap::LayMaThuNhap(){ + int res = 0; + + QSqlQuery qry; + + if( qry.exec("SELECT MaThuNhap FROM ThuNhap WHERE MaThuNhap = SCOPE_IDENTITY()") ){ + while ( qry.next() ) { + res = qry.value("MaThuNhap").toInt(); + qDebug()<TenChu = Username; this->LoaiThuNhap = LoaiThuNhap; QSqlQuery qry; + //Xoá trong bảng ThuNhap - //Xoá trong bảng LoaiThuNhap - - qry.prepare("DELETE FROM LoaiThuNhap WHERE TenChu = :Username AND LoaiThuNhap = :LoaiThuNhap"); + qry.prepare("DELETE tn FROM ThuNhap tn INNER JOIN LoaiThuNhap ltn ON tn.MaLoaiThuNhap = ltn.MaLoaiThuNhap WHERE ltn.TenChu = :Username AND ltn.LoaiThuNhap = :LoaiThuNhap"); qry.bindValue(":Username", Username); qry.bindValue(":LoaiThuNhap", LoaiThuNhap); @@ -83,9 +104,9 @@ void QuanLyThuNhap::XoaLoaiThuNhap(QString Username, QString LoaiThuNhap){ qDebug()<<"Lỗi không kết nối được CSDL!"; } - //Xoá trong bảng ThuNhap + //Xoá trong bảng LoaiThuNhap - qry.prepare("DELETE tn FROM ThuNhap tn INNER JOIN LoaiThuNhap ltn ON tn.MaLoaiThuNhap = ltn.MaLoaiThuNhap WHERE ltn.TenChu = :Username AND ltn.LoaiThuNhap = :LoaiThuNhap"); + qry.prepare("DELETE FROM LoaiThuNhap WHERE TenChu = :Username AND LoaiThuNhap = :LoaiThuNhap"); qry.bindValue(":Username", Username); qry.bindValue(":LoaiThuNhap", LoaiThuNhap); @@ -94,6 +115,7 @@ void QuanLyThuNhap::XoaLoaiThuNhap(QString Username, QString LoaiThuNhap){ qDebug()<<"Lỗi không kết nối được CSDL!"; } + } void QuanLyThuNhap::XoaTaiKhoanInThuNhap(QString Username, QString TenTaiKhoan ){ diff --git a/QuanLyChiTieu/quanlythunhap.h b/QuanLyChiTieu/quanlythunhap.h index a04155e..04a3007 100644 --- a/QuanLyChiTieu/quanlythunhap.h +++ b/QuanLyChiTieu/quanlythunhap.h @@ -14,12 +14,16 @@ class QuanLyThuNhap { public: QuanLyThuNhap(); - lli LaySoTienTong(QString Username); + lli LaySoTienTong(QString Username, int MaThuNhap = -1); QVector LayTenThuNhap(QString Username); int LayMaLoaiThuNhap(QString Username, QString LoaiThuNhap); + //Hàm này chỉ được gọi sau khi INSERT vào bảng LoaiThuNhap + int LayMaThuNhap(); + // + void XoaLoaiThuNhap(QString Username, QString LoaiThuNhap); void XoaTaiKhoanInThuNhap(QString Username, QString TenTaiKhoan ); diff --git a/QuanLyChiTieu/thongke.cpp b/QuanLyChiTieu/thongke.cpp index 37e1bf4..5a21d8b 100644 --- a/QuanLyChiTieu/thongke.cpp +++ b/QuanLyChiTieu/thongke.cpp @@ -5,128 +5,53 @@ ThongKe::ThongKe() } -void ThongKe::CapNhatTongThu(QString Username, QString ThoiGian, lli SoTien ){ +void ThongKe::CapNhatMaKhoanChi(QString Username, QString ThoiGian, int MaKhoanChi ){ this->TenChu = Username; this->ThoiGian = ThoiGian; - bool CheckExistDate = false; - lli TienThu = 0, TienCanDoi = 0; - QSqlQuery qry; + qry.prepare("INSERT INTO ThongKe ( ThoiGian, TenChu, MaKhoanChi )" "VALUES ( :ThoiGian, :TenChu, :MaKhoanChi )"); - qry.prepare("SELECT TongThu, CanDoi, ThoiGian FROM ThongKe WHERE TenChu = :Username "); - - qry.bindValue(":Username", Username); - - if( qry.exec() ){ - int cnt = 0; - while ( qry.next() ) { - if( qry.value("ThoiGian").toString() == ThoiGian ){ - TienThu += qry.value("TongThu").toLongLong(); - TienCanDoi += qry.value("CanDoi").toLongLong(); - cnt++; - } - - } - if( cnt ) CheckExistDate = true; - } - //Nếu ngày chưa tồn tại - if( !CheckExistDate ) { - qry.prepare("INSERT INTO ThongKe ( TongThu, TongChi, CanDoi, ThoiGian, TenChu )" "VALUES ( :TongThu, :TongChi, :CanDoi, :ThoiGian, :TenChu )"); - - qry.bindValue(":TongThu", SoTien); - qry.bindValue(":TongChi", 0); - qry.bindValue(":CanDoi", SoTien); - qry.bindValue(":ThoiGian", ThoiGian); - qry.bindValue(":TenChu", Username); - - if( !qry.exec() ){ - qDebug()<<"Lỗi không kết nối được CSDL!"; - return; - } + qry.bindValue(":MaKhoanChi", MaKhoanChi); + qry.bindValue(":ThoiGian", ThoiGian); + qry.bindValue(":TenChu", Username); - } - //Nếu ngày đã tồn tại - else if ( CheckExistDate ) { - qry.prepare("UPDATE ThongKe SET TongThu = :TongThu, CanDoi = :CanDoi WHERE TenChu = :TenChu AND ThoiGian = :ThoiGian"); - - qry.bindValue(":TongThu", SoTien + TienThu); - qry.bindValue(":CanDoi", TienCanDoi + SoTien); - qry.bindValue(":ThoiGian", ThoiGian); - qry.bindValue(":TenChu", Username); - - if( !qry.exec() ){ - qDebug()<<"Lỗi không kết nối được CSDL!"; - return; - } + if( !qry.exec() ){ + qDebug()<<"Lỗi không kết nối được CSDL!"; + return; } } -void ThongKe::CapNhatTongChi(QString Username, QString ThoiGian, lli SoTien ){ +void ThongKe::CapNhatMaThuNhap(QString Username, QString ThoiGian, int MaThuNhap ){ this->TenChu = Username; this->ThoiGian = ThoiGian; - bool CheckExistDate = false; - lli TienChi = 0, TienCanDoi = 0; - QSqlQuery qry; - qry.prepare("SELECT TongChi, CanDoi, ThoiGian FROM ThongKe WHERE TenChu = :Username "); - qry.bindValue(":Username", Username); + qry.prepare("INSERT INTO ThongKe ( ThoiGian, TenChu, MaThuNhap )" "VALUES ( :ThoiGian, :TenChu, :MaThuNhap )"); - if( qry.exec() ){ - int cnt = 0; - while ( qry.next() ) { - if( qry.value("ThoiGian").toString() == ThoiGian ){ - TienChi += qry.value("TongChi").toLongLong(); - TienCanDoi += qry.value("CanDoi").toLongLong(); - cnt++; - } + qry.bindValue(":MaThuNhap", MaThuNhap); + qry.bindValue(":ThoiGian", ThoiGian); + qry.bindValue(":TenChu", Username); - } - if( cnt ) CheckExistDate = true; + if( !qry.exec() ){ + qDebug()<<"Lỗi không kết nối được CSDL!"; + return; } - //Nếu ngày chưa tồn tại - if( !CheckExistDate ) { - qry.prepare("INSERT INTO ThongKe ( TongThu, TongChi, CanDoi, ThoiGian, TenChu )" "VALUES ( :TongThu, :TongChi, :CanDoi, :ThoiGian, :TenChu )"); - - qry.bindValue(":TongThu", 0); - qry.bindValue(":TongChi", SoTien); - qry.bindValue(":CanDoi", -SoTien); - qry.bindValue(":ThoiGian", ThoiGian); - qry.bindValue(":TenChu", Username); - - if( !qry.exec() ){ - qDebug()<<"Lỗi không kết nối được CSDL!"; - return; - } - } - //Nếu ngày đã tồn tại - else if ( CheckExistDate ) { - qry.prepare("UPDATE ThongKe SET TongChi = :TongChi, CanDoi = :CanDoi WHERE TenChu = :TenChu AND ThoiGian = :ThoiGian"); - - qry.bindValue(":TongChi", TienChi + SoTien); - qry.bindValue(":CanDoi", TienCanDoi - SoTien); - qry.bindValue(":ThoiGian", ThoiGian); - qry.bindValue(":TenChu", Username); - - if( !qry.exec() ){ - qDebug()<<"Lỗi không kết nối được CSDL!"; - return; - } - } + } +//Chưa fix 22102020 QVector ThongKe::LayDuLieuTongThuTheoTuan(QString Username, QString Thang, QString Nam){ QVector res = {0, 0, 0, 0, 0, 0, 0, 0, 0}; QSqlQuery qry; - qry.prepare("SELECT Day(ThoiGian) AS 'Ngay', TongThu FROM ThongKe WHERE TenChu = :Username AND Month(ThoiGian) = :Thang AND Year(ThoiGian) = :Nam"); + qry.prepare("SELECT Day(ThoiGian) AS 'Ngay', MaThuNhap FROM ThongKe WHERE TenChu = :Username AND Month(ThoiGian) = :Thang AND Year(ThoiGian) = :Nam"); qry.bindValue(":Thang", Thang); qry.bindValue(":Nam", Nam); @@ -134,22 +59,12 @@ QVector ThongKe::LayDuLieuTongThuTheoTuan(QString Username, QString Thang, if( qry.exec() ){ while ( qry.next() ) { - if( qry.value("Ngay").toInt() >= 1 && qry.value("Ngay").toInt() < 5 ) - res[1] += qry.value("TongThu").toLongLong(); - if( qry.value("Ngay").toInt() >= 5 && qry.value("Ngay").toInt() < 9 ) - res[2] += qry.value("TongThu").toLongLong(); - if( qry.value("Ngay").toInt() >= 9 && qry.value("Ngay").toInt() < 13 ) - res[3] += qry.value("TongThu").toLongLong(); - if( qry.value("Ngay").toInt() >= 13 && qry.value("Ngay").toInt() < 17 ) - res[4] += qry.value("TongThu").toLongLong(); - if( qry.value("Ngay").toInt() >= 17 && qry.value("Ngay").toInt() < 21 ) - res[5] += qry.value("TongThu").toLongLong(); - if( qry.value("Ngay").toInt() >= 21 && qry.value("Ngay").toInt() < 25 ) - res[6] += qry.value("TongThu").toLongLong(); - if( qry.value("Ngay").toInt() >= 25 && qry.value("Ngay").toInt() < 29 ) - res[7] += qry.value("TongThu").toLongLong(); - if( qry.value("Ngay").toInt() >= 29 && qry.value("Ngay").toInt() < 32 ) - res[8] += qry.value("TongThu").toLongLong(); + int MTN = qry.value("MaThuNhap").toInt(); + + for( int i = 1, j = 5, cnt = 1; i < 30; i += 4, j += 4, ++cnt ){ + if( qry.value("Ngay").toInt() >= i && qry.value("Ngay").toInt() < j ) + res[cnt] += ThuNhapQL.LaySoTienTong(Username, MTN); + } } } @@ -164,7 +79,7 @@ QVector ThongKe::LayDuLieuTongChiTheoTuan(QString Username, QString Thang, QSqlQuery qry; - qry.prepare("SELECT Day(ThoiGian) AS 'Ngay', TongChi FROM ThongKe WHERE TenChu = :Username AND Month(ThoiGian) = :Thang AND Year(ThoiGian) = :Nam"); + qry.prepare("SELECT Day(ThoiGian) AS 'Ngay', MaKhoanChi FROM ThongKe WHERE TenChu = :Username AND Month(ThoiGian) = :Thang AND Year(ThoiGian) = :Nam"); qry.bindValue(":Thang", Thang); qry.bindValue(":Nam", Nam); @@ -172,22 +87,12 @@ QVector ThongKe::LayDuLieuTongChiTheoTuan(QString Username, QString Thang, if( qry.exec() ){ while ( qry.next() ) { - if( qry.value("Ngay").toInt() >= 1 && qry.value("Ngay").toInt() < 5 ) - res[1] -= qry.value("TongChi").toLongLong(); - if( qry.value("Ngay").toInt() >= 5 && qry.value("Ngay").toInt() < 9 ) - res[2] -= qry.value("TongChi").toLongLong(); - if( qry.value("Ngay").toInt() >= 9 && qry.value("Ngay").toInt() < 13 ) - res[3] -= qry.value("TongChi").toLongLong(); - if( qry.value("Ngay").toInt() >= 13 && qry.value("Ngay").toInt() < 17 ) - res[4] -= qry.value("TongChi").toLongLong(); - if( qry.value("Ngay").toInt() >= 17 && qry.value("Ngay").toInt() < 21 ) - res[5] -= qry.value("TongChi").toLongLong(); - if( qry.value("Ngay").toInt() >= 21 && qry.value("Ngay").toInt() < 25 ) - res[6] -= qry.value("TongChi").toLongLong(); - if( qry.value("Ngay").toInt() >= 25 && qry.value("Ngay").toInt() < 29 ) - res[7] -= qry.value("TongChi").toLongLong(); - if( qry.value("Ngay").toInt() >= 29 && qry.value("Ngay").toInt() < 32 ) - res[8] -= qry.value("TongChi").toLongLong(); + int MKC = qry.value("MaKhoanChi").toInt(); + + for( int i = 1, j = 5, cnt = 1; i < 30; i += 4, j += 4, ++cnt ){ + if( qry.value("Ngay").toInt() >= i && qry.value("Ngay").toInt() < j ) + res[cnt] -= ChiTieuQL.LaySoTienTheoMaKhoanChi(Username, MKC); + } } } @@ -201,37 +106,19 @@ QVector ThongKe::LayDuLieuTongThuTheoNam(QString Username, QString Nam){ QSqlQuery qry; - qry.prepare("SELECT Month(ThoiGian) AS 'Thang', TongThu FROM ThongKe WHERE TenChu = :Username AND Year(ThoiGian) = :Nam"); + qry.prepare("SELECT Month(ThoiGian) AS 'Thang', MaThuNhap FROM ThongKe WHERE TenChu = :Username AND Year(ThoiGian) = :Nam"); qry.bindValue(":Nam", Nam); qry.bindValue(":Username", Username); if( qry.exec() ){ while ( qry.next() ) { - if( qry.value("Thang").toInt() == 1 ) - res[1] += qry.value("TongThu").toLongLong(); - if( qry.value("Thang").toInt() == 2 ) - res[2] += qry.value("TongThu").toLongLong(); - if( qry.value("Thang").toInt() == 3 ) - res[3] += qry.value("TongThu").toLongLong(); - if( qry.value("Thang").toInt() == 4 ) - res[4] += qry.value("TongThu").toLongLong(); - if( qry.value("Thang").toInt() == 5 ) - res[5] += qry.value("TongThu").toLongLong(); - if( qry.value("Thang").toInt() == 6 ) - res[6] += qry.value("TongThu").toLongLong(); - if( qry.value("Thang").toInt() == 7 ) - res[7] += qry.value("TongThu").toLongLong(); - if( qry.value("Thang").toInt() == 8 ) - res[8] += qry.value("TongThu").toLongLong(); - if( qry.value("Thang").toInt() == 9 ) - res[9] += qry.value("TongThu").toLongLong(); - if( qry.value("Thang").toInt() == 10 ) - res[10] += qry.value("TongThu").toLongLong(); - if( qry.value("Thang").toInt() == 11 ) - res[11] += qry.value("TongThu").toLongLong(); - if( qry.value("Thang").toInt() == 12 ) - res[12] += qry.value("TongThu").toLongLong(); + int MTN = qry.value("MaThuNhap").toInt(); + + for( int i = 1; i <= 12; ++i ){ + if( qry.value("Thang").toInt() == i ) + res[i] += ThuNhapQL.LaySoTienTong(Username, MTN); + } } } @@ -244,37 +131,19 @@ QVector ThongKe::LayDuLieuTongChiTheoNam(QString Username, QString Nam){ QSqlQuery qry; - qry.prepare("SELECT Month(ThoiGian) AS 'Thang', TongChi FROM ThongKe WHERE TenChu = :Username AND Year(ThoiGian) = :Nam"); + qry.prepare("SELECT Month(ThoiGian) AS 'Thang', MaKhoanChi FROM ThongKe WHERE TenChu = :Username AND Year(ThoiGian) = :Nam"); qry.bindValue(":Nam", Nam); qry.bindValue(":Username", Username); if( qry.exec() ){ while ( qry.next() ) { - if( qry.value("Thang").toInt() == 1 ) - res[1] -= qry.value("TongChi").toLongLong(); - if( qry.value("Thang").toInt() == 2 ) - res[2] -= qry.value("TongChi").toLongLong(); - if( qry.value("Thang").toInt() == 3 ) - res[3] -= qry.value("TongChi").toLongLong(); - if( qry.value("Thang").toInt() == 4 ) - res[4] -= qry.value("TongChi").toLongLong(); - if( qry.value("Thang").toInt() == 5 ) - res[5] -= qry.value("TongChi").toLongLong(); - if( qry.value("Thang").toInt() == 6 ) - res[6] -= qry.value("TongChi").toLongLong(); - if( qry.value("Thang").toInt() == 7 ) - res[7] -= qry.value("TongChi").toLongLong(); - if( qry.value("Thang").toInt() == 8 ) - res[8] -= qry.value("TongChi").toLongLong(); - if( qry.value("Thang").toInt() == 9 ) - res[9] -= qry.value("TongChi").toLongLong(); - if( qry.value("Thang").toInt() == 10 ) - res[10] -= qry.value("TongChi").toLongLong(); - if( qry.value("Thang").toInt() == 11 ) - res[11] -= qry.value("TongChi").toLongLong(); - if( qry.value("Thang").toInt() == 12 ) - res[12] -= qry.value("TongChi").toLongLong(); + int MKC = qry.value("MaKhoanChi").toInt(); + + for( int i = 1; i <= 12; ++i ){ + if( qry.value("Thang").toInt() == i ) + res[i] -= ChiTieuQL.LaySoTienTheoMaKhoanChi(Username, MKC); + } } } @@ -287,7 +156,7 @@ QVector ThongKe::LayDuLieuCanDoiTheoTuan(QString Username, QString Thang, Q QSqlQuery qry; - qry.prepare("SELECT Day(ThoiGian) AS 'Ngay', CanDoi FROM ThongKe WHERE TenChu = :Username AND Month(ThoiGian) = :Thang AND Year(ThoiGian) = :Nam"); + qry.prepare("SELECT Day(ThoiGian) AS 'Ngay', MaKhoanChi, MaThuNhap FROM ThongKe WHERE TenChu = :Username AND Month(ThoiGian) = :Thang AND Year(ThoiGian) = :Nam"); qry.bindValue(":Thang", Thang); qry.bindValue(":Nam", Nam); @@ -295,22 +164,13 @@ QVector ThongKe::LayDuLieuCanDoiTheoTuan(QString Username, QString Thang, Q if( qry.exec() ){ while ( qry.next() ) { - if( qry.value("Ngay").toInt() >= 1 && qry.value("Ngay").toInt() < 5 ) - res[1] += qry.value("CanDoi").toLongLong(); - if( qry.value("Ngay").toInt() >= 5 && qry.value("Ngay").toInt() < 9 ) - res[2] += qry.value("CanDoi").toLongLong(); - if( qry.value("Ngay").toInt() >= 9 && qry.value("Ngay").toInt() < 13 ) - res[3] += qry.value("CanDoi").toLongLong(); - if( qry.value("Ngay").toInt() >= 13 && qry.value("Ngay").toInt() < 17 ) - res[4] += qry.value("CanDoi").toLongLong(); - if( qry.value("Ngay").toInt() >= 17 && qry.value("Ngay").toInt() < 21 ) - res[5] += qry.value("CanDoi").toLongLong(); - if( qry.value("Ngay").toInt() >= 21 && qry.value("Ngay").toInt() < 25 ) - res[6] += qry.value("CanDoi").toLongLong(); - if( qry.value("Ngay").toInt() >= 25 && qry.value("Ngay").toInt() < 29 ) - res[7] += qry.value("CanDoi").toLongLong(); - if( qry.value("Ngay").toInt() >= 29 && qry.value("Ngay").toInt() < 32 ) - res[8] += qry.value("CanDoi").toLongLong(); + int MKC = qry.value("MaKhoanChi").toInt(); + int MTN = qry.value("MaThuNhap").toInt(); + + for( int i = 1, j = 5, cnt = 1; i < 30; i += 4, j += 4, ++cnt ){ + if( qry.value("Ngay").toInt() >= i && qry.value("Ngay").toInt() < j ) + res[cnt] += ThuNhapQL.LaySoTienTong(Username, MTN) - ChiTieuQL.LaySoTienTheoMaKhoanChi(Username, MKC); + } } } @@ -323,37 +183,20 @@ QVector ThongKe::LayDuLieuCanDoiTheoNam(QString Username, QString Nam){ QSqlQuery qry; - qry.prepare("SELECT Month(ThoiGian) AS 'Thang', CanDoi FROM ThongKe WHERE TenChu = :Username AND Year(ThoiGian) = :Nam"); + qry.prepare("SELECT Month(ThoiGian) AS 'Thang', MaKhoanChi, MaThuNhap FROM ThongKe WHERE TenChu = :Username AND Year(ThoiGian) = :Nam"); qry.bindValue(":Nam", Nam); qry.bindValue(":Username", Username); if( qry.exec() ){ while ( qry.next() ) { - if( qry.value("Thang").toInt() == 1 ) - res[1] += qry.value("CanDoi").toLongLong(); - if( qry.value("Thang").toInt() == 2 ) - res[2] += qry.value("CanDoi").toLongLong(); - if( qry.value("Thang").toInt() == 3 ) - res[3] += qry.value("CanDoi").toLongLong(); - if( qry.value("Thang").toInt() == 4 ) - res[4] += qry.value("CanDoi").toLongLong(); - if( qry.value("Thang").toInt() == 5 ) - res[5] += qry.value("CanDoi").toLongLong(); - if( qry.value("Thang").toInt() == 6 ) - res[6] += qry.value("CanDoi").toLongLong(); - if( qry.value("Thang").toInt() == 7 ) - res[7] += qry.value("CanDoi").toLongLong(); - if( qry.value("Thang").toInt() == 8 ) - res[8] += qry.value("CanDoi").toLongLong(); - if( qry.value("Thang").toInt() == 9 ) - res[9] += qry.value("CanDoi").toLongLong(); - if( qry.value("Thang").toInt() == 10 ) - res[10] += qry.value("CanDoi").toLongLong(); - if( qry.value("Thang").toInt() == 11 ) - res[11] += qry.value("CanDoi").toLongLong(); - if( qry.value("Thang").toInt() == 12 ) - res[12] += qry.value("CanDoi").toLongLong(); + int MKC = qry.value("MaKhoanChi").toInt(); + int MTN = qry.value("MaThuNhap").toInt(); + + for( int i = 1; i <= 12; ++i ){ + if( qry.value("Thang").toInt() == i ) + res[i] += ThuNhapQL.LaySoTienTong(Username, MTN) - ChiTieuQL.LaySoTienTheoMaKhoanChi(Username, MKC); + } } } diff --git a/QuanLyChiTieu/thongke.h b/QuanLyChiTieu/thongke.h index 75655b6..9971c70 100644 --- a/QuanLyChiTieu/thongke.h +++ b/QuanLyChiTieu/thongke.h @@ -1,6 +1,9 @@ #ifndef THONGKE_H #define THONGKE_H +#include "quanlythunhap.h" +#include "quanlychitieu.h" + #include #include #include @@ -14,10 +17,11 @@ class ThongKe public: ThongKe(); - void CapNhatTongThu(QString Username, QString ThoiGian, lli SoTien ); + void CapNhatMaKhoanChi(QString Username, QString ThoiGian, int MaKhoanChi ); - void CapNhatTongChi(QString Username, QString ThoiGian, lli SoTien ); + void CapNhatMaThuNhap(QString Username, QString ThoiGian, int MaThuNhap ); + //Chưa fix 22102020 QVector LayDuLieuTongThuTheoTuan(QString Username, QString Thang, QString Nam); QVector LayDuLieuTongChiTheoTuan(QString Username, QString Thang, QString Nam); @@ -34,6 +38,8 @@ class ThongKe private: QString TenChu, ThoiGian; + QuanLyChiTieu ChiTieuQL; + QuanLyThuNhap ThuNhapQL; }; #endif // THONGKE_H diff --git a/QuanLyChiTieu/tietkiem.cpp b/QuanLyChiTieu/tietkiem.cpp index 97ec7f2..a0c9339 100644 --- a/QuanLyChiTieu/tietkiem.cpp +++ b/QuanLyChiTieu/tietkiem.cpp @@ -5,26 +5,6 @@ TietKiem::TietKiem() } - -int TietKiem::LayMaTaiKhoan(QString Username, QString TenTaiKhoan){ - int res = -1; - - this->TenChu = Username; - this->TenTaiKhoan = TenTaiKhoan; - - QSqlQuery qry; - - if( qry.exec("SELECT MaTaiKhoan FROM TietKiem WHERE TenChu = '"+TenChu+"' AND Ten = N'"+TenTaiKhoan+"' ") ){ - while ( qry.next() ) { - res = qry.value("MaTaiKhoan").toInt(); - } - } - - else qDebug()<<"Lỗi không kết nối được CSDL!"; - - return res; -} - lli TietKiem::LayMucTieu(QString Username, QString TenTaiKhoan){ lli res = -1; @@ -33,7 +13,7 @@ lli TietKiem::LayMucTieu(QString Username, QString TenTaiKhoan){ QSqlQuery qry; - if( qry.exec("SELECT MucTieu FROM TietKiem WHERE TenChu = '"+TenChu+"' AND Ten = N'"+TenTaiKhoan+"' ") ){ + if( qry.exec("SELECT tkiem.MucTieu FROM TietKiem tkiem JOIN TaiKhoan tk ON tkiem.MaTaiKhoan = tk.MaTaiKhoan WHERE tk.TenChu = '"+TenChu+"' AND tk.Ten = N'"+TenTaiKhoan+"' ") ){ while ( qry.next() ) { res = qry.value("MucTieu").toLongLong(); } @@ -50,7 +30,7 @@ void TietKiem::CapNhatMucTieu(QString Username, int MaTaiKhoan, lli MucTieu){ QSqlQuery qry; - qry.prepare("UPDATE TietKiem SET MucTieu = :MucTieu WHERE MaTaiKhoan = :MaTaiKhoan AND TenChu = :Username; "); + qry.prepare("UPDATE TietKiem SET tkiem.MucTieu = :MucTieu FROM TietKiem tkiem INNER JOIN TaiKhoan tk ON tkiem.MaTaiKhoan = tk.MaTaiKhoan WHERE tkiem.MaTaiKhoan = :MaTaiKhoan AND tk.TenChu = :Username; "); qry.bindValue(":MucTieu", MucTieu); qry.bindValue(":MaTaiKhoan", MaTaiKhoan); @@ -67,7 +47,7 @@ void TietKiem::CapNhatSoDu(QString Username, int MaTaiKhoan, lli SoDuTK){ QSqlQuery qry; - qry.prepare("UPDATE TietKiem SET SoDu = :SoDuTK WHERE MaTaiKhoan = :MaTaiKhoan AND TenChu = :Username; "); + qry.prepare("UPDATE TaiKhoan SET SoDu = :SoDuTK WHERE MaTaiKhoan = :MaTaiKhoan AND TenChu = :Username; "); qry.bindValue(":SoDuTK", SoDuTK); qry.bindValue(":MaTaiKhoan", MaTaiKhoan); @@ -84,7 +64,7 @@ void TietKiem::XoaTietKiem(QString Username, int MaTaiKhoan){ QSqlQuery qry; - qry.prepare("DELETE FROM TietKiem WHERE TenChu = :Username AND MaTaiKhoan = :MaTaiKhoan "); + qry.prepare("DELETE tkiem FROM TietKiem tkiem INNER JOIN TaiKhoan tk ON tkiem.MaTaiKhoan = tk.MaTaiKhoan WHERE tk.TenChu = :Username AND tkiem.MaTaiKhoan = :MaTaiKhoan "); qry.bindValue(":MaTaiKhoan", MaTaiKhoan); qry.bindValue(":Username", Username); @@ -95,16 +75,14 @@ void TietKiem::XoaTietKiem(QString Username, int MaTaiKhoan){ } -void TietKiem::ThemTietKiem(QString Username, QString TenTietKiem, lli SoDu, lli MucTieu, int MaTaiKhoan){ +void TietKiem::ThemTietKiem( QString TenTietKiem, lli MucTieu, int MaTaiKhoan){ QSqlQuery qry; - qry.prepare("INSERT INTO TietKiem ( TenTietKiem, SoDu, MucTieu, MaTaiKhoan, TenChu )" "VALUES ( :TenTietKiem, :SoDu, :MucTieu, :MaTaiKhoan, :TenChu )"); + qry.prepare("INSERT INTO TietKiem ( TenTietKiem, MucTieu, MaTaiKhoan )" "VALUES ( :TenTietKiem, :MucTieu, :MaTaiKhoan )"); qry.bindValue(":TenTietKiem", TenTietKiem); - qry.bindValue(":SoDu", SoDu); qry.bindValue(":MucTieu", MucTieu); qry.bindValue(":MaTaiKhoan", MaTaiKhoan); - qry.bindValue(":TenChu", Username); if( !qry.exec() ){ qDebug()<<"Lỗi không kết nối được CSDL!"; @@ -116,7 +94,7 @@ lli TietKiem::KiemTraMucTieu(QString Username, int MaTaiKhoan){ QSqlQuery qry; lli res = 0; - qry.prepare("SELECT SoDu, MucTieu FROM TietKiem WHERE TenChu = :Username AND MaTaiKhoan = :MaTaiKhoan"); + qry.prepare("SELECT tk.SoDu, tkiem.MucTieu FROM TietKiem tkiem JOIN TaiKhoan tk ON tkiem.MaTaiKhoan = tk.MaTaiKhoan WHERE tk.TenChu = :Username AND tkiem.MaTaiKhoan = :MaTaiKhoan"); qry.bindValue(":Username", Username); qry.bindValue(":MaTaiKhoan", MaTaiKhoan); diff --git a/QuanLyChiTieu/tietkiem.h b/QuanLyChiTieu/tietkiem.h index f686d67..eb8b50c 100644 --- a/QuanLyChiTieu/tietkiem.h +++ b/QuanLyChiTieu/tietkiem.h @@ -16,8 +16,6 @@ class TietKiem : public QuanLyTaiKhoan public: TietKiem(); - int LayMaTaiKhoan(QString Username, QString TenTaiKhoan); - lli LayMucTieu(QString Username, QString TenTaiKhoan); void CapNhatMucTieu(QString Username, int MaTaiKhoan, lli MucTieu); @@ -26,7 +24,7 @@ class TietKiem : public QuanLyTaiKhoan void XoaTietKiem(QString Username, int MaTaiKhoan); - void ThemTietKiem(QString Username, QString TenTietKiem, lli SoDu, lli MucTieu, int MaTaiKhoan); + void ThemTietKiem( QString TenTietKiem, lli MucTieu, int MaTaiKhoan); lli KiemTraMucTieu(QString Username, int MaTaiKhoan); }; diff --git a/schem2110.sql b/schem2110.sql index 65693ca961b7a567417617736cc7c042ae291b8c..9c7e8502785db42367eafe21bab0d7d44e1a0cde 100644 GIT binary patch delta 595 zcmX?ehOy@)e&r*FhJ%eYA4b|%OKpUnr{ui-HPWXWVMN4?2)+Cr1>1$u2>z>u(B>C@ U2KbfwOg`YQ1ya8GUSOUG0FWJ$=>Px# delta 660 zcmeA<$#~`rl7ycjO`nDPo)aAe?10k8&J-E9bCb2h+f(qxEYqs=@44I%)rlbtO9