예제 #1
0
        public CMS_ReportModels Export(ref IXLWorksheet wsMarketing /*, ref IXLWorksheet wsTime*/)
        {
            var result = new CMS_ReportModels();

            try
            {
                string[] lstHeaders = new string[] { "Phone", "Message" };

                int row = 1;
                //add header to excel file
                for (int i = 1; i <= lstHeaders.Length; i++)
                {
                    wsMarketing.Cell(row, i).Value = lstHeaders[i - 1];
                }

                wsMarketing.Cell(2, 1).Value = "0987654321";
                wsMarketing.Cell(2, 2).Value = "Content your mesage at here!";
                //format
                wsMarketing.Range(1, 1, 2, 2).Style.Border.SetTopBorder(XLBorderStyleValues.Thin);
                wsMarketing.Range(1, 1, 2, 2).Style.Border.SetLeftBorder(XLBorderStyleValues.Thin);
                wsMarketing.Range(1, 1, 2, 2).Style.Border.SetRightBorder(XLBorderStyleValues.Thin);
                wsMarketing.Range(1, 1, 2, 2).Style.Border.SetBottomBorder(XLBorderStyleValues.Thin);
                int cols = lstHeaders.Length;
                row = 2;
                BaseFactory.FormatExcelExport(wsMarketing, row, cols);
                //Sheet 2
                //wsTime.Cell(1, 1).Value = "Runing time";
                //wsTime.Cell(2, 1).Value = "60s";
                ////format
                //wsTime.Range(1, 1, 2, 1).Style.Border.SetTopBorder(XLBorderStyleValues.Thin);
                //wsTime.Range(1, 1, 2, 1).Style.Border.SetLeftBorder(XLBorderStyleValues.Thin);
                //wsTime.Range(1, 1, 2, 1).Style.Border.SetRightBorder(XLBorderStyleValues.Thin);
                //wsTime.Range(1, 1, 2, 1).Style.Border.SetBottomBorder(XLBorderStyleValues.Thin);
                //BaseFactory.FormatExcelExport(wsTime, row, 1);
                //============
                result.IsOk = true;
            }

            catch (Exception ex)
            {
                result.IsOk    = false;
                result.Message = ex.Message;
                NSLog.Logger.Error(ex);
            }

            return(result);
        }
        public ActionResult Report(CMS_ReportModels model)
        {
            // Check date
            if (model.From > model.To)
            {
                ModelState.AddModelError("From", "Vui lòng chọn lại thời gian!");
            }


            if (!ModelState.IsValid)
            {
                Response.StatusCode = (int)HttpStatusCode.BadRequest;
                return(View("Index", model));
            }

            var wb = _fac.Report(model);

            ViewBag.wb = wb;
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.Charset         = UTF8Encoding.UTF8.WebName;
            Response.ContentEncoding = UTF8Encoding.UTF8;
            string sheetName = string.Format("Báo cáo_Thu_Chi_{0}", DateTime.Now.ToString("MMddyyyy")).Replace(" ", "_");

            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.AddHeader("content-disposition", String.Format(@"attachment;filename={0}.xlsx", sheetName));
            using (var memoryStream = new System.IO.MemoryStream())
            {
                wb.SaveAs(memoryStream);
                memoryStream.WriteTo(HttpContext.Response.OutputStream);
                memoryStream.Close();
            }
            HttpContext.Response.End();
            return(RedirectToAction("Index"));
        }
예제 #3
0
        public ExcelPackage Report(CMS_ReportModels request)
        {
            ExcelPackage   pck       = new ExcelPackage();
            ExcelWorksheet wsReceipt = pck.Workbook.Worksheets.Add("Báo cáo thu");
            ExcelWorksheet wsExpense = pck.Workbook.Worksheets.Add("Báo cáo chi");
            int            totalCols = 13;

            CreateReportHeader(wsReceipt, wsExpense, totalCols, "BÁO CÁO THU CHI", request.From, request.To);
            // Format hedaer report Receipt
            wsReceipt.Cells[1, 1, 3, totalCols].Style.Border.Top.Style    = ExcelBorderStyle.Thin;
            wsReceipt.Cells[1, 1, 3, totalCols].Style.Border.Left.Style   = ExcelBorderStyle.Thin;
            wsReceipt.Cells[1, 1, 3, totalCols].Style.Border.Right.Style  = ExcelBorderStyle.Thin;
            wsReceipt.Cells[1, 1, 3, totalCols].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
            //wsReceipt.Cells[4, 1, 4, totalCols].Merge = true;
            // Format hedaer report Expense
            wsExpense.Cells[1, 1, 3, totalCols].Style.Border.Top.Style    = ExcelBorderStyle.Thin;
            wsExpense.Cells[1, 1, 3, totalCols].Style.Border.Left.Style   = ExcelBorderStyle.Thin;
            wsExpense.Cells[1, 1, 3, totalCols].Style.Border.Right.Style  = ExcelBorderStyle.Thin;
            wsExpense.Cells[1, 1, 3, totalCols].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
            //wsExpense.Cells[4, 1, 4, totalCols].Merge = true;
            CMS_ReportModels data = new CMS_ReportModels();

            try
            {
                data = GetReportData(request.From, request.To, request.IsIncludeDelete);

                /* receipt order */
                if (data.ReportReceipt.ListOrder != null && data.ReportReceipt.ListOrder.Any())
                {
                    int row = 4;

                    /* sum total */
                    wsReceipt.Cells[row, 1].Value      = "Tổng Tiền";
                    wsReceipt.Row(row).Style.Font.Bold = true;
                    wsReceipt.Cells[row, 1, row, 2].Style.Fill.PatternType = ExcelFillStyle.Solid;
                    wsReceipt.Cells[row, 1, row, 2].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(217, 217, 217));
                    wsReceipt.Cells[row, 2].Value = string.Format("{0:0,0 VNĐ}", data.ReportReceipt.TotalBill);
                    row++;
                    wsReceipt.Cells[row, 1, row, totalCols].Merge = true;
                    row++;

                    wsReceipt.Cells[row, 1].Value      = "Mã hóa đơn";
                    wsReceipt.Cells[row, 2].Value      = "Ngày tạo";
                    wsReceipt.Cells[row, 3].Value      = "Nhân viên";
                    wsReceipt.Cells[row, 4].Value      = "Khách hàng";
                    wsReceipt.Cells[row, 5].Value      = "Số điện thoại";
                    wsReceipt.Cells[row, 6].Value      = "Email";
                    wsReceipt.Cells[row, 7].Value      = "Địa chỉ";
                    wsReceipt.Cells[row, 8].Value      = "Tên mặt hàng";
                    wsReceipt.Cells[row, 9].Value      = "Tên Nhân viên";
                    wsReceipt.Cells[row, 10].Value     = "Số lượng";
                    wsReceipt.Cells[row, 11].Value     = "Giá";
                    wsReceipt.Cells[row, 12].Value     = "Giá trị giảm giá";
                    wsReceipt.Cells[row, 13].Value     = "Tổng giá";
                    wsReceipt.Row(row).Height          = 15;
                    wsReceipt.Row(row).Style.Font.Bold = true;

                    // format text
                    wsReceipt.Cells[row, 1, row, totalCols].Style.VerticalAlignment   = ExcelVerticalAlignment.Center;
                    wsReceipt.Cells[row, 1, row, totalCols].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                    // format border
                    wsReceipt.Cells[row, 1, row, totalCols].Style.Border.Top.Style    = ExcelBorderStyle.Thin;
                    wsReceipt.Cells[row, 1, row, totalCols].Style.Border.Left.Style   = ExcelBorderStyle.Thin;
                    wsReceipt.Cells[row, 1, row, totalCols].Style.Border.Right.Style  = ExcelBorderStyle.Thin;
                    wsReceipt.Cells[row, 1, row, totalCols].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
                    // format backdround color
                    wsReceipt.Cells[row, 1, row, totalCols].Style.Fill.PatternType = ExcelFillStyle.Solid;
                    wsReceipt.Cells[row, 1, row, totalCols].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(217, 217, 217));
                    //end Columns Name header
                    row++;
                    int _firstRow = row;

                    //List item in data
                    foreach (var item in data.ReportReceipt.ListOrder)
                    {
                        if (item.Status == (byte)Commons.EStatus.Deleted)
                        {
                            wsReceipt.Cells[row, 1, row, totalCols].Style.Font.Strike = true;
                        }
                        wsReceipt.Cells[row, 1].Value = item.ReceiptNo + " (" + item.OrderNo + ")";;
                        wsReceipt.Cells[row, 2].Value = item.ReceiptCreatedDate.ToString("dd/MM/yyyy");
                        wsReceipt.Cells[row, 3].Value = item.EmployeeName;
                        wsReceipt.Cells[row, 4].Value = item.CustomerName;
                        wsReceipt.Cells[row, 5].Value = item.Phone;
                        wsReceipt.Cells[row, 6].Value = item.Email;
                        wsReceipt.Cells[row, 7].Value = item.Address;
                        int _firstChild = row + 1;
                        if (item.Items != null && item.Items.Any())
                        {
                            foreach (var itemChild in item.Items)
                            {
                                wsReceipt.Cells[row, 8].Value  = itemChild.ProductName;
                                wsReceipt.Cells[row, 9].Value  = itemChild.EmployeeName;
                                wsReceipt.Cells[row, 10].Value = itemChild.Quantity;
                                wsReceipt.Cells[row, 11].Value = string.Format("{0:0,0 VNĐ}", itemChild.Price);
                                wsReceipt.Cells[row, 12].Value = string.Format("{0:0,0 VNĐ}", itemChild.DiscountAmount);
                                wsReceipt.Cells[row, 13].Value = string.Format("{0:0,0 VNĐ}", itemChild.TotalPrice);
                                wsReceipt.Cells[row, 1, row, totalCols].Style.VerticalAlignment   = ExcelVerticalAlignment.Center;
                                wsReceipt.Cells[row, 1, row, totalCols].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                                // format border
                                wsReceipt.Cells[row, 1, row, totalCols].Style.Border.Top.Style    = ExcelBorderStyle.Thin;
                                wsReceipt.Cells[row, 1, row, totalCols].Style.Border.Left.Style   = ExcelBorderStyle.Thin;
                                wsReceipt.Cells[row, 1, row, totalCols].Style.Border.Right.Style  = ExcelBorderStyle.Thin;
                                wsReceipt.Cells[row, 1, row, totalCols].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
                                if (item.Status == (byte)Commons.EStatus.Deleted)
                                {
                                    wsReceipt.Cells[row, 8, row, totalCols].Style.Font.Strike = true;
                                }
                                row++;
                            }
                        }

                        wsReceipt.Cells[row, 12].Value = "Giảm giá";
                        //wsReceipt.Row(row).Style.Font.Bold = true;
                        wsReceipt.Cells[row, 12, row, totalCols].Style.Fill.PatternType = ExcelFillStyle.Solid;
                        wsReceipt.Cells[row, 12, row, totalCols].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(217, 217, 217));
                        wsReceipt.Cells[row, 13].Value                = string.Format("{0:0,0 VNĐ}", item.TotalDiscount);
                        wsReceipt.Cells[row, 8, row, 11].Merge        = true;
                        wsReceipt.Cells[_firstChild, 1, row, 7].Merge = true;
                        if (item.Status == (byte)Commons.EStatus.Deleted)
                        {
                            wsReceipt.Cells[row, 12, row, totalCols].Style.Font.Strike = true;
                        }
                        row++;

                        /*  */
                        wsReceipt.Cells[row, 12].Value     = "Tổng";
                        wsReceipt.Row(row).Style.Font.Bold = true;
                        wsReceipt.Cells[row, 12, row, totalCols].Style.Fill.PatternType = ExcelFillStyle.Solid;
                        wsReceipt.Cells[row, 12, row, totalCols].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(217, 217, 217));
                        wsReceipt.Cells[row, 13].Value                = string.Format("{0:0,0 VNĐ}", item.TotalBill);
                        wsReceipt.Cells[row, 8, row, 11].Merge        = true;
                        wsReceipt.Cells[_firstChild, 1, row, 7].Merge = true;
                        var range = wsReceipt.Cells[_firstChild, 1, row, 7];
                        wsReceipt.Cells[range.Start.Address].Value = item.Reason;
                        if (item.Status == (byte)Commons.EStatus.Deleted)
                        {
                            wsReceipt.Cells[row, 12, row, totalCols].Style.Font.Strike = true;
                        }
                        row++;
                    }

                    /* sum total */
                    wsReceipt.Cells[row, 12].Value     = "Tổng Tiền";
                    wsReceipt.Row(row).Style.Font.Bold = true;
                    wsReceipt.Cells[row, 12, row, totalCols].Style.Fill.PatternType = ExcelFillStyle.Solid;
                    wsReceipt.Cells[row, 12, row, totalCols].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(217, 217, 217));
                    wsReceipt.Cells[row, 13].Value = string.Format("{0:0,0 VNĐ}", data.ReportReceipt.TotalBill);

                    wsReceipt.Cells[_firstRow, 1, row - 1, totalCols].Style.VerticalAlignment   = ExcelVerticalAlignment.Center;
                    wsReceipt.Cells[_firstRow, 1, row - 1, totalCols].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                    //format for col 7
                    wsReceipt.Cells[_firstRow, 7, row - 1, totalCols].Style.VerticalAlignment   = ExcelVerticalAlignment.Center;
                    wsReceipt.Cells[_firstRow, 7, row - 1, totalCols].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                    // format border
                    wsReceipt.Cells[_firstRow, 1, row - 1, totalCols].Style.Border.Top.Style    = ExcelBorderStyle.Thin;
                    wsReceipt.Cells[_firstRow, 1, row - 1, totalCols].Style.Border.Left.Style   = ExcelBorderStyle.Thin;
                    wsReceipt.Cells[_firstRow, 1, row - 1, totalCols].Style.Border.Right.Style  = ExcelBorderStyle.Thin;
                    wsReceipt.Cells[_firstRow, 1, row - 1, totalCols].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;

                    wsReceipt.Cells[_firstRow, totalCols].Style.VerticalAlignment   = ExcelVerticalAlignment.Center;
                    wsReceipt.Cells[_firstRow, totalCols].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

                    // Format report
                    wsReceipt.Column(1).Width      = 20;
                    wsReceipt.Column(2).Width      = 20;
                    wsReceipt.Column(3).Width      = 20;
                    wsReceipt.Column(4).Width      = 20;
                    wsReceipt.Column(5).Width      = 20;
                    wsReceipt.Column(6).Width      = 20;
                    wsReceipt.Column(7).Width      = 30;
                    wsReceipt.Column(8).Width      = 30;
                    wsReceipt.Column(9).Width      = 15;
                    wsReceipt.Column(10).Width     = 15;
                    wsReceipt.Column(11).Width     = 15;
                    wsReceipt.Column(12).Width     = 15;
                    wsReceipt.Column(13).Width     = 15;
                    wsReceipt.Column(14).Width     = 20;
                    wsReceipt.Cells.Style.WrapText = true;
                }

                /* expense order */
                if (data.ReportExpense.ListOrder != null && data.ReportExpense.ListOrder.Any())
                {
                    int row = 4;

                    /* sum total */
                    wsExpense.Cells[row, 1].Value      = "Tổng Tiền";
                    wsExpense.Row(row).Style.Font.Bold = true;
                    wsExpense.Cells[row, 1, row, 2].Style.Fill.PatternType = ExcelFillStyle.Solid;
                    wsExpense.Cells[row, 1, row, 2].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(217, 217, 217));
                    wsExpense.Cells[row, 2].Value = string.Format("{0:0,0 VNĐ}", data.ReportExpense.TotalBill);
                    row++;
                    wsExpense.Cells[row, 1, row, totalCols].Merge = true;
                    row++;

                    wsExpense.Cells[row, 1].Value      = "Mã hóa đơn";
                    wsExpense.Cells[row, 2].Value      = "Ngày tạo";
                    wsExpense.Cells[row, 3].Value      = "Nhân viên";
                    wsExpense.Cells[row, 4].Value      = "Khách hàng";
                    wsExpense.Cells[row, 5].Value      = "Số điện thoại";
                    wsExpense.Cells[row, 6].Value      = "Email";
                    wsExpense.Cells[row, 7].Value      = "Địa chỉ";
                    wsExpense.Cells[row, 8].Value      = "Tên mặt hàng";
                    wsExpense.Cells[row, 9].Value      = "Tên nhân viên";
                    wsExpense.Cells[row, 10].Value     = "Số lượng";
                    wsExpense.Cells[row, 11].Value     = "Giá";
                    wsExpense.Cells[row, 12].Value     = "Giá trị giảm giá";
                    wsExpense.Cells[row, 13].Value     = "Tổng giá";
                    wsExpense.Row(row).Height          = 15;
                    wsExpense.Row(row).Style.Font.Bold = true;

                    // format text
                    wsExpense.Cells[row, 1, row, totalCols].Style.VerticalAlignment   = ExcelVerticalAlignment.Center;
                    wsExpense.Cells[row, 1, row, totalCols].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                    // format border
                    wsExpense.Cells[row, 1, row, totalCols].Style.Border.Top.Style    = ExcelBorderStyle.Thin;
                    wsExpense.Cells[row, 1, row, totalCols].Style.Border.Left.Style   = ExcelBorderStyle.Thin;
                    wsExpense.Cells[row, 1, row, totalCols].Style.Border.Right.Style  = ExcelBorderStyle.Thin;
                    wsExpense.Cells[row, 1, row, totalCols].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
                    // format backdround color
                    wsExpense.Cells[row, 1, row, totalCols].Style.Fill.PatternType = ExcelFillStyle.Solid;
                    wsExpense.Cells[row, 1, row, totalCols].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(217, 217, 217));
                    //end Columns Name header
                    row++;
                    int _firstRow = row;
                    //List item in data

                    foreach (var item in data.ReportExpense.ListOrder)
                    {
                        if (item.Status == (byte)Commons.EStatus.Deleted)
                        {
                            wsExpense.Cells[row, 1, row, totalCols].Style.Font.Strike = true;
                        }
                        wsExpense.Cells[row, 1].Value = item.ReceiptNo + " (" + item.OrderNo + ")";
                        wsExpense.Cells[row, 2].Value = item.ReceiptCreatedDate.ToString("dd/MM/yyyy");
                        wsExpense.Cells[row, 3].Value = item.EmployeeName;
                        wsExpense.Cells[row, 4].Value = item.CustomerName;
                        wsExpense.Cells[row, 5].Value = item.Phone;
                        wsExpense.Cells[row, 6].Value = item.Email;
                        wsExpense.Cells[row, 7].Value = item.Address;
                        int _firstChild = row + 1;
                        if (item.Items != null && item.Items.Any())
                        {
                            foreach (var itemChild in item.Items)
                            {
                                wsExpense.Cells[row, 8].Value  = itemChild.ProductName;
                                wsExpense.Cells[row, 9].Value  = itemChild.EmployeeName;
                                wsExpense.Cells[row, 10].Value = itemChild.Quantity;
                                wsExpense.Cells[row, 11].Value = string.Format("{0:0,0 VNĐ}", itemChild.Price);
                                wsExpense.Cells[row, 12].Value = string.Format("{0:0,0 VNĐ}", itemChild.DiscountAmount);
                                wsExpense.Cells[row, 13].Value = string.Format("{0:0,0 VNĐ}", itemChild.TotalPrice);
                                wsExpense.Cells[row, 1, row, totalCols].Style.VerticalAlignment   = ExcelVerticalAlignment.Center;
                                wsExpense.Cells[row, 1, row, totalCols].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                                // format border
                                wsExpense.Cells[row, 1, row, totalCols].Style.Border.Top.Style    = ExcelBorderStyle.Thin;
                                wsExpense.Cells[row, 1, row, totalCols].Style.Border.Left.Style   = ExcelBorderStyle.Thin;
                                wsExpense.Cells[row, 1, row, totalCols].Style.Border.Right.Style  = ExcelBorderStyle.Thin;
                                wsExpense.Cells[row, 1, row, totalCols].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;

                                if (item.Status == (byte)Commons.EStatus.Deleted)
                                {
                                    wsExpense.Cells[row, 1, row, totalCols].Style.Font.Strike = true;
                                }
                                row++;
                            }
                        }
                        wsExpense.Cells[row, 12].Value     = "Tổng";
                        wsExpense.Row(row).Style.Font.Bold = true;
                        wsExpense.Cells[row, 12, row, totalCols].Style.Fill.PatternType = ExcelFillStyle.Solid;
                        wsExpense.Cells[row, 12, row, totalCols].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(217, 217, 217));
                        wsExpense.Cells[row, 13].Value                = string.Format("{0:0,0 VNĐ}", item.TotalBill);
                        wsExpense.Cells[row, 8, row, 11].Merge        = true;
                        wsExpense.Cells[_firstChild, 1, row, 7].Merge = true;
                        if (item.Status == (byte)Commons.EStatus.Deleted)
                        {
                            wsExpense.Cells[row, 1, row, totalCols].Style.Font.Strike = true;
                        }
                        row++;
                    }

                    /* sum total */
                    wsExpense.Cells[row, 12].Value     = "Tổng Tiền";
                    wsExpense.Row(row).Style.Font.Bold = true;
                    wsExpense.Cells[row, 12, row, totalCols].Style.Fill.PatternType = ExcelFillStyle.Solid;
                    wsExpense.Cells[row, 12, row, totalCols].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(217, 217, 217));
                    wsExpense.Cells[row, 13].Value = string.Format("{0:0,0 VNĐ}", data.ReportExpense.TotalBill);

                    wsExpense.Cells[_firstRow, 1, row - 1, totalCols].Style.VerticalAlignment   = ExcelVerticalAlignment.Center;
                    wsExpense.Cells[_firstRow, 1, row - 1, totalCols].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                    //format for col 7
                    wsExpense.Cells[_firstRow, 7, row - 1, totalCols].Style.VerticalAlignment   = ExcelVerticalAlignment.Center;
                    wsExpense.Cells[_firstRow, 7, row - 1, totalCols].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                    // format border
                    wsExpense.Cells[_firstRow, 1, row - 1, totalCols].Style.Border.Top.Style    = ExcelBorderStyle.Thin;
                    wsExpense.Cells[_firstRow, 1, row - 1, totalCols].Style.Border.Left.Style   = ExcelBorderStyle.Thin;
                    wsExpense.Cells[_firstRow, 1, row - 1, totalCols].Style.Border.Right.Style  = ExcelBorderStyle.Thin;
                    wsExpense.Cells[_firstRow, 1, row - 1, totalCols].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;

                    wsExpense.Cells[_firstRow, totalCols].Style.VerticalAlignment   = ExcelVerticalAlignment.Center;
                    wsExpense.Cells[_firstRow, totalCols].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

                    // Format report
                    wsExpense.Column(1).Width      = 20;
                    wsExpense.Column(2).Width      = 20;
                    wsExpense.Column(3).Width      = 20;
                    wsExpense.Column(4).Width      = 20;
                    wsExpense.Column(5).Width      = 20;
                    wsExpense.Column(6).Width      = 20;
                    wsExpense.Column(7).Width      = 30;
                    wsExpense.Column(8).Width      = 30;
                    wsExpense.Column(9).Width      = 15;
                    wsExpense.Column(10).Width     = 15;
                    wsExpense.Column(11).Width     = 15;
                    wsExpense.Column(12).Width     = 15;
                    wsExpense.Column(13).Width     = 15;
                    wsExpense.Column(14).Width     = 20;
                    wsExpense.Cells.Style.WrapText = true;
                }
            }
            catch (Exception ex)
            {
                NSLog.Logger.Error("Report_Receipt:", ex);
            }
            return(pck);
        }
        // GET: Admin/ReportManagement
        public ActionResult Index()
        {
            CMS_ReportModels model = new CMS_ReportModels();

            return(View(model));
        }
예제 #5
0
        public CMS_ReportModels GetReportData(DateTime from, DateTime to, bool isDelete = false)
        {
            CMS_ReportModels ret = null;

            try
            {
                using (var db = new CMS_Context())
                {
                    CMS_ReportModels data = new CMS_ReportModels
                    {
                        From = from,
                        To   = to,
                    };

                    var listOrder = db.CMS_Order.Where(o => DbFunctions.TruncateTime(o.ReceiptCreatedDate) >= from.Date && DbFunctions.TruncateTime(o.ReceiptCreatedDate) <= to.Date).ToList();
                    if (isDelete == false)
                    {
                        listOrder = listOrder.Where(o => o.Status == (byte)Commons.EStatus.Actived).ToList();
                    }
                    var listOrderID     = listOrder.Select(o => o.ID).ToList();
                    var listOrderDetail = db.CMS_OrderDetail.Where(o => listOrderID.Contains(o.OrderID) && (!string.IsNullOrEmpty(o.ProductID) || !string.IsNullOrEmpty(o.Remark))).ToList();

                    /* get product db */
                    var listProductID = listOrderDetail.Select(o => o.ProductID).ToList();
                    var listProduct   = db.CMS_Products.Where(o => listProductID.Contains(o.ID)).ToList();

                    /* get cus db */
                    var listCusID      = listOrder.Select(o => o.CustomerID).ToList();
                    var listCustomerDB = db.CMS_Customer.Where(o => listCusID.Contains(o.ID)).ToList();

                    /* get list emp db */
                    var listEmployeeID = listOrder.Select(o => o.Cashier).ToList();
                    listEmployeeID.AddRange(listOrderDetail.Select(o => o.EmployeeID).ToList());
                    listEmployeeID = listEmployeeID.Distinct().ToList();
                    var listEmployeeDb = db.CMS_Employee.Where(o => listEmployeeID.Contains(o.ID)).ToList();

                    /* get expense data */
                    var expenseData = new CMS_ReportExpensetModels();

                    var listOrderExpense   = listOrder.Where(o => o.OrderType == (byte)Commons.EOrderType.Expense).ToList();
                    var listOrderExpenseID = listOrderExpense.Select(o => o.ID).ToList();
                    var listOrderDetailEx  = listOrderDetail.Where(o => listOrderExpenseID.Contains(o.OrderID)).ToList();

                    expenseData.TotalBill = listOrderExpense.Where(o => o.Status != (byte)Commons.EStatus.Deleted).Sum(o => o.TotalBill) ?? 0;
                    expenseData.TotalItem = (double)(listOrderDetailEx.Where(o => o.Status != (byte)Commons.EStatus.Deleted).Sum(o => o.Quantity) ?? 0);
                    expenseData.ListOrder = listOrderExpense.Select(o => new CMS_OrderModels()
                    {
                        Id                 = o.ID,
                        OrderNo            = o.OrderNo,
                        ReceiptNo          = o.ReceiptNo,
                        ReceiptCreatedDate = o.ReceiptCreatedDate ?? Commons.MinDate,
                        TotalBill          = o.TotalBill,
                        SubTotal           = o.SubTotal,
                        Status             = o.Status,
                        Remark             = o.Remark,
                        Reason             = o.Reason,
                        TotalDiscount      = o.TotalDiscount,
                        CustomerId         = o.CustomerID,
                        CustomerName       = listCustomerDB.Where(c => c.ID == o.CustomerID).Select(c => c.FirstName).FirstOrDefault(),
                        Phone              = listCustomerDB.Where(c => c.ID == o.CustomerID).Select(c => c.Phone).FirstOrDefault(),
                        Email              = listCustomerDB.Where(c => c.ID == o.CustomerID).Select(c => c.Email).FirstOrDefault(),
                        EmployeeName       = listEmployeeDb.Where(e => e.ID == o.Cashier).Select(e => e.Name).FirstOrDefault(),
                    }).ToList();

                    foreach (var order in expenseData.ListOrder)
                    {
                        order.Items = listOrderDetailEx.Where(o => o.OrderID == order.Id)
                                      .GroupJoin(listProduct, od => od.ProductID, p => p.ID, (od, p) => new { od, p = p.FirstOrDefault() })
                                      .Select(o => new CMS_ItemModels()
                        {
                            ID             = o.od.ID,
                            ProductID      = o.od.ProductID,
                            ProductName    = o.p?.Name ?? o.od.Remark,
                            Quantity       = (double)(o.od.Quantity ?? 1),
                            Price          = o.od.Price ?? 0,
                            TotalPrice     = ((double)o.od.Price * (double)o.od.Quantity),
                            DiscountAmount = (float)o.od.DiscountAmount,
                            EmployeeName   = listEmployeeDb.Where(e => e.ID == o.od.EmployeeID).Select(e => e.Name).FirstOrDefault(),
                        }).ToList();
                    }
                    data.ReportExpense = expenseData;

                    /* get receipt data */
                    var receiptData = new CMS_ReportReceiptModels();

                    var listOrderRc       = listOrder.Where(o => o.OrderType == (byte)Commons.EOrderType.Normal).ToList();
                    var listOrderRcID     = listOrderRc.Select(o => o.ID).ToList();
                    var listOrderDetailRc = listOrderDetail.Where(o => listOrderRcID.Contains(o.OrderID)).ToList();

                    receiptData.TotalBill     = listOrderRc.Where(o => o.Status != (byte)Commons.EStatus.Deleted).Sum(o => o.TotalBill) ?? 0;
                    receiptData.TotalDiscount = listOrderRc.Where(o => o.Status != (byte)Commons.EStatus.Deleted).Sum(o => o.TotalDiscount) ?? 0;
                    receiptData.TotalItem     = (double)(listOrderDetailRc.Where(o => o.Status != (byte)Commons.EStatus.Deleted).Sum(o => o.Quantity) ?? 0);
                    receiptData.ListOrder     = listOrderRc.Select(o => new CMS_OrderModels()
                    {
                        Id                 = o.ID,
                        OrderNo            = o.OrderNo,
                        ReceiptNo          = o.ReceiptNo,
                        ReceiptCreatedDate = o.ReceiptCreatedDate ?? Commons.MinDate,
                        TotalBill          = o.TotalBill,
                        SubTotal           = o.SubTotal,
                        TotalDiscount      = o.TotalDiscount,
                        Status             = o.Status,
                        Remark             = o.Remark,
                        Reason             = o.Reason,
                        CustomerName       = listCustomerDB.Where(c => c.ID == o.CustomerID).Select(c => c.FirstName).FirstOrDefault(),
                        Phone              = listCustomerDB.Where(c => c.ID == o.CustomerID).Select(c => c.Phone).FirstOrDefault(),
                        Email              = listCustomerDB.Where(c => c.ID == o.CustomerID).Select(c => c.Email).FirstOrDefault(),
                        EmployeeName       = listEmployeeDb.Where(e => e.ID == o.Cashier).Select(e => e.Name).FirstOrDefault(),
                    }).ToList();

                    foreach (var order in receiptData.ListOrder)
                    {
                        order.Items = listOrderDetailRc.Where(o => o.OrderID == order.Id)
                                      .GroupJoin(listProduct, od => od.ProductID, p => p.ID, (od, p) => new { od, p = p.FirstOrDefault() })
                                      .Select(o => new CMS_ItemModels()
                        {
                            ID             = o.od.ID,
                            ProductID      = o.od.ProductID,
                            ProductName    = o.p?.Name ?? o.od.Remark,
                            Quantity       = (double)(o.od.Quantity ?? 1),
                            Price          = o.od.Price ?? 0,
                            TotalPrice     = ((double)o.od.Price * (double)o.od.Quantity),
                            DiscountAmount = (float)o.od.DiscountAmount,
                            EmployeeName   = listEmployeeDb.Where(e => e.ID == o.od.EmployeeID).Select(e => e.Name).FirstOrDefault(),
                        }).ToList();
                    }
                    data.ReportReceipt = receiptData;

                    ret = data;
                }
            }
            catch (Exception ex)
            {
                NSLog.Logger.Error("ErrorGetReportData :", ex);
            }
            return(ret);
        }