Files
hrm_eva/ApiControllers/rep_eva_self_reviewControllers.cs
2022-08-27 11:22:12 +07:00

277 lines
12 KiB
C#

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<rep_eva_self_reviewController> _logger;
private Irep_eva_self_reviewService _repository;
private IConfiguration Configuration { get; set; }
#endregion
#region Properties
#endregion
/// <summary>
/// Default constructure for dependency injection
/// </summary>
/// <param name="repository"></param>
/// <param name="configuration"></param>
/// <param name="logger"></param>
public rep_eva_self_reviewController(ILogger<rep_eva_self_reviewController> logger, Irep_eva_self_reviewService repository, IConfiguration configuration)
{
_logger = logger;
_repository = repository;
Configuration = configuration;
}
/// <summary>
/// Get Blank Item
/// </summary>
/// <remarks>
/// </remarks>
/// <returns>Return a blank item</returns>
/// <response code="200">Returns the item</response>
/// <response code="500">Error Occurred</response>
[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}");
}
}
/// <summary>
/// Download Report
/// </summary>
/// <remarks>
/// </remarks>
/// <returns>Return list of items by specifced keyword</returns>
/// <response code="200">Returns the item</response>
/// <response code="500">Error Occurred</response>
[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;
}
}
}