????
Current Path : C:/inetpub/vhost/qlk.qfoody.vn/api/Controllers/Report/KetQuaKinhDoanh/ |
Current File : C:/inetpub/vhost/qlk.qfoody.vn/api/Controllers/Report/KetQuaKinhDoanh/KetQuaKinhDoanhController.cs |
using ApiGDTVietnam.Controllers.Report.Service; using ApiGDTVietnam.DataProvider.EF; using ApiGDTVietnam.Models; using iTextSharp.text; using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace ApiGDTVietnam.Controllers.Report.KetQuaKinhDoanh { [Authorize] public class KetQuaKinhDoanhController : IDowloadImpl { Entities db = new Entities(); [Route("Report/BaoCaoKetQuaKinhDoanh")] [HttpGet] public HttpResponseMessage BaoCaoKetQuaKinhDoanh(int? Nam, string mode = "download_pdf") { if (Nam == null) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Chưa chọn năm báo cáo"); } else { int namBaoCao = (int)Nam; string html = this.RenderReportHtml("BaoCaoKetQuaKinhDoanh", layDuLieu_BaoCaoKetQuaKinhDoanh(namBaoCao)); string fileName = "BaoCaoDoanhThuTheoThang"; return this.Download(html, null, PageSize.A3, mode, fileName); } } public BaoCaoKetQuaKinhDoanh layDuLieu_BaoCaoKetQuaKinhDoanh(int nam) { BaoCaoKetQuaKinhDoanh result = new BaoCaoKetQuaKinhDoanh(); var temp1 = db.Sale_DonHang.Where(dh => dh.NgayTao.Value.Year == nam); List<KQKDTheoThang> ListKQKDTheoThang = new List<KQKDTheoThang>(); var ListKhoanChi = db.DM_KhoanChi .Select(nh => new LoaiKhoanChi() { LoaiKhoanChiId = nh.Id, TenKhoanChi = nh.Ten, }).OrderByDescending(nh => nh.LoaiKhoanChiId).ToList(); var ListNhomSanPham = db.DM_NhomSanPhamDichVu .Select(nh => new NhomSanPham() { NhomSanPhamId = nh.Id, TenNhomSanPham = nh.Ten, }).OrderByDescending(nh => nh.NhomSanPhamId).ToList(); result.ListNhomSanPham = ListNhomSanPham; result.SoLuongNhomSanPham = result.ListNhomSanPham.Count(); result.ListLoaiKhoanChi = ListKhoanChi; result.SoLuongKhoanChi = result.ListLoaiKhoanChi.Count(); result.nam = nam; for (int thang = 1; thang < 13; thang++) { KQKDTheoThang KQKDTheoThangTemp = new KQKDTheoThang(); //Bat dau tong doanh thu List<ChiTietDonHangTheoThang> ListChiTietDonHangTheoThang = new List<ChiTietDonHangTheoThang>(); var ListDonHangTheoThang = temp1.Where(dh => dh.NgayTao.Value.Month == thang) .Select(dh => new Donhang() { DonhangId = dh.Id, }); foreach (var item in ListDonHangTheoThang) { var ListChiTietTemp = db.Sale_ChiTietDonHang.Where(ct => ct.DonHang_Id == item.DonhangId) .Select(ct => new ChiTietDonHangTheoThang() { SanPhamDVId = ct.Id, NhomSanPhamDVId = ct.DM_SanPhamDichVu.NhomSanPhamDichVu_Id.Value, TenNhomSanPhamDV = ct.DM_SanPhamDichVu.DM_NhomSanPhamDichVu.Ten, ThanhTien = ct.ThanhTien.Value }).ToList(); foreach (var item1 in ListChiTietTemp) { item1.FormatThanhTien= Helper.PhanCachHangNgan(item1.ThanhTien); ListChiTietDonHangTheoThang.Add(item1); } } List<KetQuaKDNhomSPDV> ListChiTietDonHangTheoNhomDichVu = ListChiTietDonHangTheoThang .GroupBy(ct => ct.NhomSanPhamDVId) .Select(n => new KetQuaKDNhomSPDV() { NhomSPDVId = n.Key, TenNhomSPDV = db.DM_NhomSanPhamDichVu.FirstOrDefault(nhm => nhm.Id == n.Key).Ten, TongDoanhThuTheoNhomDV = n.Select(ct => ct.ThanhTien).Sum(), }).OrderByDescending(n => n.NhomSPDVId).ToList(); decimal TongDoanhThu = 0; foreach (var item2 in ListChiTietDonHangTheoNhomDichVu) { TongDoanhThu = TongDoanhThu + item2.TongDoanhThuTheoNhomDV; item2.FormatTongDoanhThuTheoNhomDV = Helper.PhanCachHangNgan(TongDoanhThu); } //Thêm vào doanh thu rỗng. foreach (var item3 in ListNhomSanPham) { if (checkNhomSPId(item3.NhomSanPhamId, ListChiTietDonHangTheoNhomDichVu) == false) { KetQuaKDNhomSPDV temp4 = new KetQuaKDNhomSPDV(); temp4.NhomSPDVId = item3.NhomSanPhamId; temp4.TenNhomSPDV = item3.TenNhomSanPham; temp4.TongDoanhThuTheoNhomDV = 0; temp4.FormatTongDoanhThuTheoNhomDV = Helper.PhanCachHangNgan(temp4.TongDoanhThuTheoNhomDV); ListChiTietDonHangTheoNhomDichVu.Add(temp4); } } //Ket thuc tong doanh thu // Bat dau tong chi Phi List<ChiTietPhieuChiTheoThang> ListChiTietPhieuChiTheoThang = new List<ChiTietPhieuChiTheoThang>(); List<KetQuaKDNhomKhoanChi> ListPhieuChiTheoThang = db.Sale_PhieuChi.Where(pc => pc.NgayTao.Value.Month == thang&& pc.NgayTao.Value.Year==nam) .GroupBy(pc => pc.KhoanChi_Id) .Select(npc => new KetQuaKDNhomKhoanChi() { KhoanChiId = npc.Key.Value, TenKhoanChi = db.DM_KhoanChi.FirstOrDefault(kc => kc.Id == npc.Key).Ten, TongChiPhiTheoKhoanChi = npc.Select(ct => ct.SoTien.Value).Sum() }).ToList(); decimal TongChiPhi = 0; foreach (var item2 in ListPhieuChiTheoThang) { TongChiPhi = TongChiPhi + item2.TongChiPhiTheoKhoanChi; item2.FormatTongChiPhiTheoKhoanChi = Helper.PhanCachHangNgan(TongChiPhi); } //Thêm vào chi phí rỗng. foreach (var item3 in ListKhoanChi) { if (checkKhoanChiId(item3.LoaiKhoanChiId, ListPhieuChiTheoThang) == false) { KetQuaKDNhomKhoanChi temp5 = new KetQuaKDNhomKhoanChi(); temp5.KhoanChiId = item3.LoaiKhoanChiId; temp5.TenKhoanChi = item3.TenKhoanChi; temp5.TongChiPhiTheoKhoanChi = 0; temp5.FormatTongChiPhiTheoKhoanChi = Helper.PhanCachHangNgan(temp5.TongChiPhiTheoKhoanChi); ListPhieuChiTheoThang.Add(temp5); } } // Ket thuc tong chi Phi //Ket qua kinh doanh theo thang KQKDTheoThangTemp.listKetQuaKDNhomSPDV = ListChiTietDonHangTheoNhomDichVu.OrderBy(ct => ct.NhomSPDVId).ToList(); KQKDTheoThangTemp.TongDoanhThu = TongDoanhThu; KQKDTheoThangTemp.FormatTongDoanhThu = Helper.PhanCachHangNgan(TongDoanhThu); KQKDTheoThangTemp.ListKetQuaKDNhomKhoanChi = ListPhieuChiTheoThang.OrderBy(p => p.KhoanChiId).ToList(); KQKDTheoThangTemp.TongChiPhi = TongChiPhi; KQKDTheoThangTemp.FormatTongChiPhi = Helper.PhanCachHangNgan(TongChiPhi); KQKDTheoThangTemp.LoiNhuan = TongDoanhThu - TongChiPhi; KQKDTheoThangTemp.FormatLoiNhuan = Helper.PhanCachHangNgan(TongDoanhThu - TongChiPhi); KQKDTheoThangTemp.tenThang = thang.ToString(); ListKQKDTheoThang.Add(KQKDTheoThangTemp); } //End KQKD theo thang //Kết quả kinh doanh cả năm KQKDTheoThang KQKDCaNamTemp = new KQKDTheoThang(); foreach (var item in ListKQKDTheoThang.LastOrDefault().ListKetQuaKDNhomKhoanChi) { KetQuaKDNhomKhoanChi temp11 = new KetQuaKDNhomKhoanChi(); temp11.KhoanChiId = item.KhoanChiId; temp11.TenKhoanChi = item.TenKhoanChi; temp11.TongChiPhiTheoKhoanChi = item.TongChiPhiTheoKhoanChi; KQKDCaNamTemp.ListKetQuaKDNhomKhoanChi.Add(temp11); } foreach (var item in ListKQKDTheoThang.LastOrDefault().listKetQuaKDNhomSPDV) { KetQuaKDNhomSPDV temp12 = new KetQuaKDNhomSPDV(); temp12.NhomSPDVId = item.NhomSPDVId; temp12.TenNhomSPDV = item.TenNhomSPDV; temp12.TongDoanhThuTheoNhomDV = item.TongDoanhThuTheoNhomDV; KQKDCaNamTemp.listKetQuaKDNhomSPDV.Add(temp12); } KQKDCaNamTemp.TongDoanhThu = ListKQKDTheoThang.Select(dt => dt.TongDoanhThu).Sum(); KQKDCaNamTemp.FormatTongDoanhThu= Helper.PhanCachHangNgan(KQKDCaNamTemp.TongDoanhThu); KQKDCaNamTemp.TongChiPhi = ListKQKDTheoThang.Select(dt => dt.TongChiPhi).Sum(); KQKDCaNamTemp.FormatTongChiPhi= Helper.PhanCachHangNgan(KQKDCaNamTemp.TongChiPhi); KQKDCaNamTemp.LoiNhuan = KQKDCaNamTemp.TongDoanhThu - KQKDCaNamTemp.TongChiPhi; KQKDCaNamTemp.FormatLoiNhuan = Helper.PhanCachHangNgan(KQKDCaNamTemp.LoiNhuan); KQKDCaNamTemp.tenThang = "Cả năm"; for (int i = 0; i < KQKDCaNamTemp.listKetQuaKDNhomSPDV.Count; i++) { decimal DoanhThuNam = 0; for (int j = 0; j < 12; j++) { DoanhThuNam = DoanhThuNam + ListKQKDTheoThang[j].listKetQuaKDNhomSPDV[i].TongDoanhThuTheoNhomDV; } KQKDCaNamTemp.listKetQuaKDNhomSPDV[i].TongDoanhThuTheoNhomDV = DoanhThuNam; KQKDCaNamTemp.listKetQuaKDNhomSPDV[i].FormatTongDoanhThuTheoNhomDV = Helper.PhanCachHangNgan(DoanhThuNam); } for (int i = 0; i < KQKDCaNamTemp.ListKetQuaKDNhomKhoanChi.Count; i++) { decimal ChiPhiNam = 0; for (int j = 0; j < 11; j++) { ChiPhiNam = ChiPhiNam + ListKQKDTheoThang[j].ListKetQuaKDNhomKhoanChi[i].TongChiPhiTheoKhoanChi; } KQKDCaNamTemp.ListKetQuaKDNhomKhoanChi[i].TongChiPhiTheoKhoanChi = ChiPhiNam; KQKDCaNamTemp.ListKetQuaKDNhomKhoanChi[i].FormatTongChiPhiTheoKhoanChi= Helper.PhanCachHangNgan(ChiPhiNam); } List<KQKDTheoThang> kQKDThang = new List<KQKDTheoThang>(); ListKQKDTheoThang.Add(KQKDCaNamTemp); //Kết thúc KQKD theo nam result.ListKQKDTheoThang = ListKQKDTheoThang; return result; } private Boolean checkNhomSPId(int Id, List<KetQuaKDNhomSPDV> list) { Boolean result = false; foreach (var item in list) { if (item.NhomSPDVId == Id) { result = true; break; } } return result; } private Boolean checkKhoanChiId(int Id, List<KetQuaKDNhomKhoanChi> list) { Boolean result = false; foreach (var item in list) { if (item.KhoanChiId == Id) { result = true; break; } } return result; } } }