????

Your IP : 3.145.0.146


Current Path : C:/inetpub/vhost/qlk.qfoody.vn/api/Controllers/Report/KetQuaKinhDoanh/
Upload File :
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;
        }
    }

}