using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Logging; using TTSW.Controllers; using TTSW.EF; using TTSW.Utils; using TTSW.Constant; using TTSW.Common; using TodoAPI2.Models; using System.Data; using Microsoft.Extensions.Configuration; using System.IO; using System.Net; using iTextSharp.text; using iTextSharp.text.pdf; namespace TodoAPI2.Controllers { //[Authorize] [Produces("application/json")] [Route("api/rep_eva_self_review")] public class rep_eva_self_reviewController : BaseController { #region Private Variables private ILogger _logger; private Irep_eva_self_reviewService _repository; private IConfiguration Configuration { get; set; } #endregion #region Properties #endregion /// /// Default constructure for dependency injection /// /// /// /// public rep_eva_self_reviewController(ILogger logger, Irep_eva_self_reviewService repository, IConfiguration configuration) { _logger = logger; _repository = repository; Configuration = configuration; } /// /// Get Blank Item /// /// /// /// Return a blank item /// Returns the item /// Error Occurred [HttpGet("GetBlankItem")] [ProducesResponseType(typeof(rep_eva_self_reviewWithSelectionViewModel), 200)] [ProducesResponseType(400)] [ProducesResponseType(500)] //[ValidateAntiForgeryToken] public IActionResult GetBlankItem() { try { if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); var result = _repository.GetBlankItem(); return Ok(result); } catch (Exception ex) { _logger.LogCritical($"Exception in IActionResult GetBlankItem.", ex); return StatusCode(500, $"{ex.Message}"); } } /// /// Download Report /// /// /// /// Return list of items by specifced keyword /// Returns the item /// Error Occurred [HttpGet("rep_eva_self_review_report")] [ProducesResponseType(typeof(FileStreamResult), 200)] [ProducesResponseType(400)] [ProducesResponseType(500)] //[ValidateAntiForgeryToken] public IActionResult rep_eva_self_review_report(rep_eva_self_reviewReportRequestModel model) { try { model.print_dt = MyHelper.GetDateStringForReport(DateTime.Now) + " " + MyHelper.GetTimeStringFromDate(DateTime.Now); if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); var httpclient = new WebClient(); //var stream = new MemoryStream(); //Document document = new Document(); //PdfCopy writer = new PdfCopy(document, stream); //document.Open(); var data1 = GetReport01(model); //PdfReader reader1 = new PdfReader(data1); //reader1.ConsolidateNamedDestinations(); //for (int i = 1; i <= reader1.NumberOfPages; i++) //{ // PdfImportedPage page = writer.GetImportedPage(reader1, i); // writer.AddPage(page); //} //reader1.Close(); //var data2 = GetReport02(model); //PdfReader reader2 = new PdfReader(data2); //reader2.ConsolidateNamedDestinations(); //for (int i = 1; i <= reader2.NumberOfPages; i++) //{ // PdfImportedPage page = writer.GetImportedPage(reader2, i); // writer.AddPage(page); //} //reader2.Close(); //writer.Close(); //document.Close(); //var datax = stream.ToArray(); //var streamx = new MemoryStream(datax); var stream = new MemoryStream(data1); return File(stream, model.contentType); } catch (Exception ex) { _logger.LogCritical($"Exception while GetReport.", ex); return StatusCode(500, $"{ex.Message}"); } } private byte[] GetReport01(rep_eva_self_reviewReportRequestModel model) { var httpclient = new WebClient(); string mainurl = MyHelper.GetConfig(Configuration, "JasperReportServer:MainURL"); string reportsite = MyHelper.GetConfig(Configuration, "JasperReportServer:reportsite"); string username = MyHelper.GetConfig(Configuration, "JasperReportServer:username"); string password = MyHelper.GetConfig(Configuration, "JasperReportServer:password"); var temp = (from x in _repository.GetContext().eva_adjust_postponement_detail join fk_eva_adjust_postponement1 in _repository.GetContext().eva_adjust_postponement on x.adjust_postponement_id equals fk_eva_adjust_postponement1.id into eva_adjust_postponementResult1 from fk_eva_adjust_postponementResult1 in eva_adjust_postponementResult1.DefaultIfEmpty() join fk_eva_adjust_postponement2 in _repository.GetContext().eva_adjust_postponement on x.adjust_postponement_quota_id equals fk_eva_adjust_postponement2.id into eva_adjust_postponementResult2 from fk_eva_adjust_postponementResult2 in eva_adjust_postponementResult2.DefaultIfEmpty() where x.id == model.detail_id select fk_eva_adjust_postponementResult1 == null? fk_eva_adjust_postponementResult1 : fk_eva_adjust_postponementResult2).FirstOrDefault(); if (temp != null) { model.theround = temp.theRound.ToString(); model.theyear = temp.fiscal_year.ToString(); var all_eva = (from x in _repository.GetContext().eva_performance_plan where x.fiscal_year == temp.fiscal_year && x.theTime == temp.theRound orderby x.theTime select x).ToList(); foreach (var x2 in all_eva) { var start = (from n in _repository.GetContext().eva_performance_plan_detail where n.performance_plan_id == x2.id select n.start_date).Min(); var end = (from n in _repository.GetContext().eva_performance_plan_detail where n.performance_plan_id == x2.id select n.end_date).Min(); model.thedesc = "ตั้งแต่วันที่ " + MyHelper.GetDateStringForReport(start) + " ถึงวันที่ " + MyHelper.GetDateStringForReport(end); } } var temp2 = (from x in _repository.GetContext().eva_adjust_postponement_detail where x.id == model.detail_id select x).FirstOrDefault(); if (temp2 != null && temp2.promoted_percentage.HasValue) { model.x1 = temp2.promoted_percentage.Value > 0 ? "/" : ""; model.x2 = temp2.promoted_percentage.Value <= 0 ? "/" : ""; } string url = $"{mainurl}{reportsite}/rep_eva_self_review.{model.filetype}?{MyHelper.GetParameterForJasperReport(model)}&j_username={username}&j_password={password}"; if (model.filetype == "xlsx") { url += "&ignorePagination=true"; } var data = httpclient.DownloadData(url); return data; } private byte[] GetReport02(rep_eva_self_reviewReportRequestModel model) { var httpclient = new WebClient(); string mainurl = MyHelper.GetConfig(Configuration, "JasperReportServer:MainURL"); string reportsite = MyHelper.GetConfig(Configuration, "JasperReportServer:reportsite"); string username = MyHelper.GetConfig(Configuration, "JasperReportServer:username"); string password = MyHelper.GetConfig(Configuration, "JasperReportServer:password"); var temp = (from x in _repository.GetContext().eva_adjust_postponement_detail join fk_eva_adjust_postponement1 in _repository.GetContext().eva_adjust_postponement on x.adjust_postponement_id equals fk_eva_adjust_postponement1.id into eva_adjust_postponementResult1 from fk_eva_adjust_postponementResult1 in eva_adjust_postponementResult1.DefaultIfEmpty() join fk_eva_adjust_postponement2 in _repository.GetContext().eva_adjust_postponement on x.adjust_postponement_quota_id equals fk_eva_adjust_postponement2.id into eva_adjust_postponementResult2 from fk_eva_adjust_postponementResult2 in eva_adjust_postponementResult2.DefaultIfEmpty() where x.id == model.detail_id select fk_eva_adjust_postponementResult1 == null ? fk_eva_adjust_postponementResult1 : fk_eva_adjust_postponementResult2).FirstOrDefault(); if (temp != null) { model.theround = temp.theRound.ToString(); model.theyear = temp.fiscal_year.ToString(); var all_eva = (from x in _repository.GetContext().eva_performance_plan where x.fiscal_year == temp.fiscal_year && x.theTime == temp.theRound orderby x.theTime select x).ToList(); foreach (var x2 in all_eva) { var start = (from n in _repository.GetContext().eva_performance_plan_detail where n.performance_plan_id == x2.id select n.start_date).Min(); var end = (from n in _repository.GetContext().eva_performance_plan_detail where n.performance_plan_id == x2.id select n.end_date).Min(); model.thedesc = "ตั้งแต่วันที่ " + MyHelper.GetDateStringForReport(start) + " ถึงวันที่ " + MyHelper.GetDateStringForReport(end); } } var temp2 = (from x in _repository.GetContext().eva_adjust_postponement_detail where x.id == model.detail_id select x).FirstOrDefault(); if (temp2 != null && temp2.promoted_percentage.HasValue) { model.x1 = temp2.promoted_percentage.Value > 0 ? "/" : ""; model.x2 = temp2.promoted_percentage.Value <= 0 ? "/" : ""; } string url = $"{mainurl}{reportsite}/rep_eva_self_review_cover.{model.filetype}?{MyHelper.GetParameterForJasperReport(model)}&j_username={username}&j_password={password}"; if (model.filetype == "xlsx") { url += "&ignorePagination=true"; } var data = httpclient.DownloadData(url); return data; } } }