From 086f101d0f1460b1af8c1dcaec50cb39265ce4c0 Mon Sep 17 00:00:00 2001 From: nakorn Date: Mon, 2 May 2022 10:53:45 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B8=97=E0=B8=B3=E0=B9=80=E0=B8=A3=E0=B8=B7?= =?UTF-8?q?=E0=B9=88=E0=B8=AD=E0=B8=87=E0=B8=AD=E0=B8=99=E0=B8=B8=E0=B8=A1?= =?UTF-8?q?=E0=B8=B1=E0=B8=95=E0=B8=B4=E0=B8=A7=E0=B8=87=E0=B9=80=E0=B8=87?= =?UTF-8?q?=E0=B8=B4=E0=B8=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...a_adjust_quota_update_statusControllers.cs | 229 +++++++++++++++++ ApiControllers/rep_eva01Controllers.cs | 4 +- ApiControllers/rep_eva02Controllers.cs | 4 +- ApiControllers/rep_eva03Controllers.cs | 4 +- .../rep_eva_limit_frame_planControllers.cs | 4 +- .../rep_eva_self_reviewControllers.cs | 4 +- .../rep_eva_self_review_allControllers.cs | 4 +- ApiControllers/rep_summary_a01Controllers.cs | 4 +- .../rpt_payroll_summaryControllers.cs | 4 +- ...@eva_adjust_quota_update_final_status.xlsx | Bin 0 -> 10429 bytes ...nement@eva_adjust_quota_update_status.xlsx | Bin 0 -> 10527 bytes .../eva_adjust_postponementEntity.cs | 10 + ...djust_postponement_update_statusService.cs | 4 +- .../Ieva_adjust_quota_update_statusService.cs | 25 ++ ...va_adjust_quota_update_statusInputModel.cs | 32 +++ ...t_quota_update_statusReportRequestModel.cs | 21 ++ ...a_adjust_quota_update_statusSearchModel.cs | 23 ++ .../eva_adjust_quota_update_statusService.cs | 229 +++++++++++++++++ ...eva_adjust_quota_update_statusViewModel.cs | 35 +++ ...ota_update_statusWithSelectionViewModel.cs | 15 ++ .../external_linkageService.cs | 12 +- .../rep_eva01/rep_eva01ReportRequestModel.cs | 2 + .../rep_eva02/rep_eva02ReportRequestModel.cs | 2 + .../rep_eva03/rep_eva03ReportRequestModel.cs | 2 + ..._eva_limit_frame_planReportRequestModel.cs | 2 + .../rep_eva_self_reviewReportRequestModel.cs | 2 + ...p_eva_self_review_allReportRequestModel.cs | 2 + .../rep_summary_a01ReportRequestModel.cs | 2 + .../rpt_payroll_summaryReportRequestModel.cs | 2 + Startup.cs | 6 + .../eva_adjust_postponement_normal_d.cshtml | 11 +- .../eva_adjust_postponement_quota_d.cshtml | 84 ++++-- .../eva_adjust_quota_update_status.cshtml | 120 +++++++++ tb320eva.csproj | 2 + tb320eva.xml | 61 +++++ ...ust_postponement_detail_quota_02_inline.js | 2 +- .../eva_adjust_postponement_quota_d.js | 2 +- .../eva_adjust_postponement_update_status.js | 25 +- .../eva_adjust_quota_update_status.js | 239 ++++++++++++++++++ 39 files changed, 1193 insertions(+), 42 deletions(-) create mode 100644 ApiControllers/eva_adjust_quota_update_statusControllers.cs create mode 100644 EXCEL/eva_adjust_postponement@eva_adjust_quota_update_final_status.xlsx create mode 100644 EXCEL/eva_adjust_postponement@eva_adjust_quota_update_status.xlsx create mode 100644 Models/eva_adjust_quota_update_status/Ieva_adjust_quota_update_statusService.cs create mode 100644 Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusInputModel.cs create mode 100644 Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusReportRequestModel.cs create mode 100644 Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusSearchModel.cs create mode 100644 Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusService.cs create mode 100644 Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusViewModel.cs create mode 100644 Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusWithSelectionViewModel.cs create mode 100644 Views/eva_adjust_quota_update_statusView/eva_adjust_quota_update_status.cshtml create mode 100644 wwwroot/js/eva_adjust_quota_update_status/eva_adjust_quota_update_status.js diff --git a/ApiControllers/eva_adjust_quota_update_statusControllers.cs b/ApiControllers/eva_adjust_quota_update_statusControllers.cs new file mode 100644 index 0000000..9ae1d8a --- /dev/null +++ b/ApiControllers/eva_adjust_quota_update_statusControllers.cs @@ -0,0 +1,229 @@ +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; + +namespace TodoAPI2.Controllers +{ + //[Authorize] + [Produces("application/json")] + [Route("api/eva_adjust_quota_update_status")] + public class eva_adjust_quota_update_statusController : BaseController + { + #region Private Variables + private ILogger _logger; + private Ieva_adjust_quota_update_statusService _repository; + private Iexternal_employeeService emp; + private IConfiguration Configuration { get; set; } + #endregion + + #region Properties + + #endregion + + /// + /// Default constructure for dependency injection + /// + /// + /// + /// + public eva_adjust_quota_update_statusController(ILogger logger, Ieva_adjust_quota_update_statusService repository, + IConfiguration configuration, + Iexternal_employeeService inemp) + { + _logger = logger; + _repository = repository; + Configuration = configuration; + emp = inemp; + } + + /// + /// Get specific item by id + /// + /// + /// + /// Return Get specific item by id + /// Returns the item + /// Error Occurred + [HttpGet("{id}")] + [ProducesResponseType(typeof(eva_adjust_quota_update_statusWithSelectionViewModel), 200)] + [ProducesResponseType(400)] + [ProducesResponseType(500)] + //[ValidateAntiForgeryToken] + public IActionResult Get(int id) + { + try + { + if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); + var result = _repository.GetWithSelection(id); + + return Ok(result); + } + catch (Exception ex) + { + _logger.LogCritical($"Exception in IActionResult Get.", ex); + return StatusCode(500, $"{ex.Message}"); + } + } + + /// + /// Get Blank Item + /// + /// + /// + /// Return a blank item + /// Returns the item + /// Error Occurred + [HttpGet("GetBlankItem")] + [ProducesResponseType(typeof(eva_adjust_quota_update_statusWithSelectionViewModel), 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}"); + } + } + + /// + /// Get list items by quota_status_note + /// + /// + /// + /// Return list of items by specifced keyword + /// Returns the item + /// Error Occurred + [HttpGet("")] + [ProducesResponseType(typeof(List), 200)] + [ProducesResponseType(400)] + [ProducesResponseType(500)] + //[ValidateAntiForgeryToken] + public IActionResult GetList(string quota_status_note) + { + try + { + if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); + return Ok(_repository.GetListByquota_status_note(quota_status_note)); + } + catch (Exception ex) + { + _logger.LogCritical($"Exception in IActionResult GetList.", ex); + return StatusCode(500, $"{ex.Message}"); + } + } + + /// + /// Get list items by search + /// + /// + /// + /// Return list of items by specifced keyword + /// Returns the item + /// Error Occurred + [HttpGet("GetListBySearch")] + [ProducesResponseType(typeof(List), 200)] + [ProducesResponseType(400)] + [ProducesResponseType(500)] + //[ValidateAntiForgeryToken] + public IActionResult GetListBySearch(eva_adjust_quota_update_statusSearchModel model) + { + try + { + if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); + return Ok(_repository.GetListBySearch(model)); + } + catch (Exception ex) + { + _logger.LogCritical($"Exception in IActionResult GetListBySearch.", ex); + return StatusCode(500, $"{ex.Message}"); + } + } + + + /// + /// Update item + /// + /// + /// + /// + /// + /// Response Result Message + /// Response Result Message + /// If the model is invalid + /// Error Occurred + [HttpPut("{id}")] + [ProducesResponseType(typeof(CommonResponseMessage), 200)] + [ProducesResponseType(400)] + [ProducesResponseType(500)] + //[ValidateAntiForgeryToken] + public IActionResult Update(int id, [FromBody] eva_adjust_quota_update_statusInputModel model) + { + if (ModelState.IsValid) + { + try + { + if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); + + int? e = null; + + if (!string.IsNullOrEmpty(HttpContext.Request.Cookies["user_id"])) + { + var loginid = Convert.ToInt32(HttpContext.Request.Cookies["user_id"]); + var theEmp = emp.GetEmployeeForLogin(Convert.ToInt32(loginid)); + if (theEmp != null) + { + e = theEmp.id; + } + else + { + return Unauthorized(); + } + } + else + { + return Unauthorized(); + } + + var result = _repository.Update(id, model, true, e); + var message = new CommonResponseMessage(); + message.code = "200"; + message.message = $"แก้ไขข้อมูล เรียบร้อย"; + message.data = result; + return Ok(message); + } + catch (Exception ex) + { + _logger.LogCritical($"Exception while update {id.ToString()}.", ex); + return StatusCode(500, $"{id.ToString()}. {ex.Message}"); + } + } + + return BadRequest(ModelState); + } + + } +} diff --git a/ApiControllers/rep_eva01Controllers.cs b/ApiControllers/rep_eva01Controllers.cs index 0b5958d..06c423e 100644 --- a/ApiControllers/rep_eva01Controllers.cs +++ b/ApiControllers/rep_eva01Controllers.cs @@ -94,7 +94,9 @@ namespace TodoAPI2.Controllers { try { - if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); + model.print_dt = MyHelper.GetDateStringForReport(DateTime.Now) + " " + MyHelper.GetTimeStringFromDate(DateTime.Now); + + if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); //var httpclient = MyHelper.getHttpClient(Configuration); var httpclient = new WebClient(); diff --git a/ApiControllers/rep_eva02Controllers.cs b/ApiControllers/rep_eva02Controllers.cs index 1998869..8cd0aaa 100644 --- a/ApiControllers/rep_eva02Controllers.cs +++ b/ApiControllers/rep_eva02Controllers.cs @@ -94,7 +94,9 @@ namespace TodoAPI2.Controllers { try { - if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); + model.print_dt = MyHelper.GetDateStringForReport(DateTime.Now) + " " + MyHelper.GetTimeStringFromDate(DateTime.Now); + + if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); //var httpclient = MyHelper.getHttpClient(Configuration); var httpclient = new WebClient(); string mainurl = MyHelper.GetConfig(Configuration, "JasperReportServer:MainURL"); diff --git a/ApiControllers/rep_eva03Controllers.cs b/ApiControllers/rep_eva03Controllers.cs index 60594fd..6d2f13a 100644 --- a/ApiControllers/rep_eva03Controllers.cs +++ b/ApiControllers/rep_eva03Controllers.cs @@ -93,7 +93,9 @@ namespace TodoAPI2.Controllers { try { - if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); + model.print_dt = MyHelper.GetDateStringForReport(DateTime.Now) + " " + MyHelper.GetTimeStringFromDate(DateTime.Now); + + if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); //var httpclient = MyHelper.getHttpClient(Configuration); var httpclient = new WebClient(); string mainurl = MyHelper.GetConfig(Configuration, "JasperReportServer:MainURL"); diff --git a/ApiControllers/rep_eva_limit_frame_planControllers.cs b/ApiControllers/rep_eva_limit_frame_planControllers.cs index 6483992..63f7a70 100644 --- a/ApiControllers/rep_eva_limit_frame_planControllers.cs +++ b/ApiControllers/rep_eva_limit_frame_planControllers.cs @@ -95,7 +95,9 @@ namespace TodoAPI2.Controllers { try { - if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); + model.print_dt = MyHelper.GetDateStringForReport(DateTime.Now) + " " + MyHelper.GetTimeStringFromDate(DateTime.Now); + + if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); var httpclient = new WebClient(); string mainurl = MyHelper.GetConfig(Configuration, "JasperReportServer:MainURL"); string reportsite = MyHelper.GetConfig(Configuration, "JasperReportServer:reportsite"); diff --git a/ApiControllers/rep_eva_self_reviewControllers.cs b/ApiControllers/rep_eva_self_reviewControllers.cs index db53aff..f67a616 100644 --- a/ApiControllers/rep_eva_self_reviewControllers.cs +++ b/ApiControllers/rep_eva_self_reviewControllers.cs @@ -96,7 +96,9 @@ namespace TodoAPI2.Controllers { try { - if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); + 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(); diff --git a/ApiControllers/rep_eva_self_review_allControllers.cs b/ApiControllers/rep_eva_self_review_allControllers.cs index d0e7982..eef5e4c 100644 --- a/ApiControllers/rep_eva_self_review_allControllers.cs +++ b/ApiControllers/rep_eva_self_review_allControllers.cs @@ -94,7 +94,9 @@ namespace TodoAPI2.Controllers { try { - if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); + model.print_dt = MyHelper.GetDateStringForReport(DateTime.Now) + " " + MyHelper.GetTimeStringFromDate(DateTime.Now); + + if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); var httpclient = new WebClient(); string mainurl = MyHelper.GetConfig(Configuration, "JasperReportServer:MainURL"); string reportsite = MyHelper.GetConfig(Configuration, "JasperReportServer:reportsite"); diff --git a/ApiControllers/rep_summary_a01Controllers.cs b/ApiControllers/rep_summary_a01Controllers.cs index 575e40d..753291c 100644 --- a/ApiControllers/rep_summary_a01Controllers.cs +++ b/ApiControllers/rep_summary_a01Controllers.cs @@ -94,7 +94,9 @@ namespace TodoAPI2.Controllers { try { - if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); + model.print_dt = MyHelper.GetDateStringForReport(DateTime.Now) + " " + MyHelper.GetTimeStringFromDate(DateTime.Now); + + if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); var httpclient = new WebClient(); string mainurl = MyHelper.GetConfig(Configuration, "JasperReportServer:MainURL"); string reportsite = MyHelper.GetConfig(Configuration, "JasperReportServer:reportsite"); diff --git a/ApiControllers/rpt_payroll_summaryControllers.cs b/ApiControllers/rpt_payroll_summaryControllers.cs index 604e6e1..1ec6020 100644 --- a/ApiControllers/rpt_payroll_summaryControllers.cs +++ b/ApiControllers/rpt_payroll_summaryControllers.cs @@ -94,7 +94,9 @@ namespace TodoAPI2.Controllers { try { - if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); + model.print_dt = MyHelper.GetDateStringForReport(DateTime.Now) + " " + MyHelper.GetTimeStringFromDate(DateTime.Now); + + if (!MyHelper.checkAuth(Configuration, HttpContext)) return Unauthorized(); var httpclient = new WebClient(); string mainurl = MyHelper.GetConfig(Configuration, "JasperReportServer:MainURL"); diff --git a/EXCEL/eva_adjust_postponement@eva_adjust_quota_update_final_status.xlsx b/EXCEL/eva_adjust_postponement@eva_adjust_quota_update_final_status.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..67eab95e7ecf133d010ad50a8db77cb16702ebc0 GIT binary patch literal 10429 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 literal 0 HcmV?d00001 diff --git a/EXCEL/eva_adjust_postponement@eva_adjust_quota_update_status.xlsx b/EXCEL/eva_adjust_postponement@eva_adjust_quota_update_status.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3bba9279d94cf9d67d765eaa5d5a7008190843f2 GIT binary patch literal 10527 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 XZB+$0hz|k)sE{8G#EsXff8G5*_Rl`9 literal 0 HcmV?d00001 diff --git a/Models/eva_adjust_postponement/eva_adjust_postponementEntity.cs b/Models/eva_adjust_postponement/eva_adjust_postponementEntity.cs index 5c7e296..0956518 100644 --- a/Models/eva_adjust_postponement/eva_adjust_postponementEntity.cs +++ b/Models/eva_adjust_postponement/eva_adjust_postponementEntity.cs @@ -76,5 +76,15 @@ namespace TodoAPI2.Models public int? quota_status_by { get; set; } [MaxLength(1000)] public string quota_status_note { get; set; } + public int? quota_status_submit_to { get; set; } + + [MaxLength(5)] + public string quota_final_status { get; set; } + + public DateTime? quota_final_status_date { get; set; } + [MaxLength(255)] + public int? quota_final_status_by { get; set; } + [MaxLength(1000)] + public string quota_final_status_note { get; set; } } } diff --git a/Models/eva_adjust_postponement_update_status/eva_adjust_postponement_update_statusService.cs b/Models/eva_adjust_postponement_update_status/eva_adjust_postponement_update_statusService.cs index 755a82e..67cfa59 100644 --- a/Models/eva_adjust_postponement_update_status/eva_adjust_postponement_update_statusService.cs +++ b/Models/eva_adjust_postponement_update_status/eva_adjust_postponement_update_statusService.cs @@ -119,7 +119,7 @@ namespace TodoAPI2.Models into external_linkageResult1 from fk_external_linkageResult1 in external_linkageResult1.DefaultIfEmpty() - join fk_external_linkage3 in ext.GetAgreeDisagree4() on m_eva_adjust_postponement_update_status.postponement_status_by equals fk_external_linkage3.id + join fk_external_linkage3 in emp.GetAllEmployee() on m_eva_adjust_postponement_update_status.postponement_status_by equals fk_external_linkage3.id into external_linkageResult3 from fk_external_linkageResult3 in external_linkageResult3.DefaultIfEmpty() @@ -139,7 +139,7 @@ namespace TodoAPI2.Models postponement_status_note = m_eva_adjust_postponement_update_status.postponement_status_note, postponement_status_external_linkage_external_name = fk_external_linkageResult1.external_name, - postponement_status_by_external_linkage_external_name = fk_external_linkageResult3.external_name, + postponement_status_by_external_linkage_external_name = fk_external_linkageResult3.fullname, isActive = m_eva_adjust_postponement_update_status.isActive, Created = m_eva_adjust_postponement_update_status.created, diff --git a/Models/eva_adjust_quota_update_status/Ieva_adjust_quota_update_statusService.cs b/Models/eva_adjust_quota_update_status/Ieva_adjust_quota_update_statusService.cs new file mode 100644 index 0000000..1c4a801 --- /dev/null +++ b/Models/eva_adjust_quota_update_status/Ieva_adjust_quota_update_statusService.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using TTSW.EF; +using TTSW.Utils; +using TTSW.Constant; +using TTSW.Common; +using TodoAPI2.Models; + +namespace TodoAPI2.Models +{ + public interface Ieva_adjust_quota_update_statusService + { + new eva_adjust_quota_update_statusViewModel Update(int id, eva_adjust_quota_update_statusInputModel model, bool is_force_save, int? updateby); + List GetListByquota_status_note(string quota_status_note); + List GetListBySearch(eva_adjust_quota_update_statusSearchModel model); + eva_adjust_quota_update_statusWithSelectionViewModel GetWithSelection(int id); + eva_adjust_quota_update_statusWithSelectionViewModel GetBlankItem(); + + eva_adjust_postponementEntity GetEntity(int id); + DataContext GetContext(); + } +} + diff --git a/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusInputModel.cs b/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusInputModel.cs new file mode 100644 index 0000000..c786e32 --- /dev/null +++ b/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusInputModel.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Threading.Tasks; +using TTSW.EF; +using TTSW.Utils; +using TTSW.Constant; +using TTSW.Common; + +namespace TodoAPI2.Models +{ + public class eva_adjust_quota_update_statusInputModel + { + + public int? id { get; set; } + + public string quota_status { get; set; } + + public DateTime? quota_status_date { get; set; } + + public int? quota_status_by { get; set; } + + public string quota_status_note { get; set; } + + public int? quota_status_submit_to { get; set; } + + public string active_mode { get; set; } + } +} + diff --git a/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusReportRequestModel.cs b/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusReportRequestModel.cs new file mode 100644 index 0000000..d322376 --- /dev/null +++ b/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusReportRequestModel.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Threading.Tasks; +using TTSW.EF; +using TTSW.Utils; +using TTSW.Constant; +using TTSW.Common; + +namespace TodoAPI2.Models +{ + public class eva_adjust_quota_update_statusReportRequestModel : eva_adjust_quota_update_statusSearchModel + { + public string filetype { get; set; } + + public string contentType { get { return MyHelper.GetContentType(filetype); } } + } +} + diff --git a/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusSearchModel.cs b/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusSearchModel.cs new file mode 100644 index 0000000..3ca8ccd --- /dev/null +++ b/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusSearchModel.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Threading.Tasks; +using TTSW.EF; +using TTSW.Utils; +using TTSW.Constant; +using TTSW.Common; + +namespace TodoAPI2.Models +{ + public class eva_adjust_quota_update_statusSearchModel + { + + public int id { get; set; } + + public string quota_status_note { get; set; } + + } +} + diff --git a/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusService.cs b/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusService.cs new file mode 100644 index 0000000..1995a94 --- /dev/null +++ b/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusService.cs @@ -0,0 +1,229 @@ +using AutoMapper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using TTSW.EF; +using TTSW.Utils; +using TTSW.Constant; +using TTSW.Common; +using TodoAPI2.Models; +using System.IO; +using System.Web; +using System.Net; +using TTSW.Configure; +using Microsoft.Extensions.Options; +using System.Data; + +namespace TodoAPI2.Models +{ + public class eva_adjust_quota_update_statusService : Ieva_adjust_quota_update_statusService + { + private IBaseRepository2 _repository; + private IMyDatabase db; + private Iexternal_linkageService ext; + private Iexternal_employeeService emp; + + public eva_adjust_quota_update_statusService(IBaseRepository2 repository, + IMyDatabase mydb, + Iexternal_linkageService inext, + Iexternal_employeeService inemp) + { + _repository = repository; + db = mydb; + ext = inext; + emp = inemp; + } + + #region Private Functions + private eva_adjust_postponementEntity GetEntity(eva_adjust_quota_update_statusInputModel model) + { + return Mapper.Map(model); + } + private List GetEntityList(List models) + { + return Mapper.Map>(models); + } + private eva_adjust_quota_update_statusViewModel GetDto(eva_adjust_postponementEntity entity) + { + return Mapper.Map(entity); + } + private List GetDtoList(List entities) + { + return Mapper.Map>(entities); + } + + #endregion + + #region Public Functions + #region Query Functions + + public eva_adjust_quota_update_statusViewModel Get(int id) + { + var entity = _repository.Get(id); + + return GetDto(entity); + } + + public eva_adjust_postponementEntity GetEntity(int id) + { + var entity = _repository.Get(id); + + return entity; + } + + public DataContext GetContext() + { + return _repository.Context; + } + + public eva_adjust_quota_update_statusWithSelectionViewModel GetWithSelection(int id) + { + var entity = _repository.Get(id); + var i = Mapper.Map(entity); + i.item_quota_status = (from x in ext.GetAgreeDisagree4() select x).ToList(); + i.item_quota_status_by = (from x in emp.GetAllEmployee() select x).ToList(); + i.item_quota_status_submit_to = (from x in emp.GetAllEmployee() select x).ToList(); + + return i; + } + public eva_adjust_quota_update_statusWithSelectionViewModel GetBlankItem() + { + var i = new eva_adjust_quota_update_statusWithSelectionViewModel(); + i.item_quota_status = (from x in ext.GetAgreeDisagree4() select x).ToList(); + i.item_quota_status_by = (from x in emp.GetAllEmployee() select x).ToList(); + i.item_quota_status_submit_to = (from x in emp.GetAllEmployee() select x).ToList(); + + return i; + } + + public List GetListByquota_status_note(string quota_status_note) + { + var model = new eva_adjust_quota_update_statusSearchModel(); + model.quota_status_note = quota_status_note; + return GetListBySearch(model); + } + + public List GetListBySearch(eva_adjust_quota_update_statusSearchModel model) + { + var data = ( + from m_eva_adjust_quota_update_status in _repository.Context.eva_adjust_postponement + + join fk_external_linkage1 in ext.GetAgreeDisagree4() on m_eva_adjust_quota_update_status.quota_status equals fk_external_linkage1.external_code + into external_linkageResult1 + from fk_external_linkageResult1 in external_linkageResult1.DefaultIfEmpty() + + join fk_external_linkage3 in emp.GetAllEmployee() on m_eva_adjust_quota_update_status.quota_status_by equals fk_external_linkage3.id + into external_linkageResult3 + from fk_external_linkageResult3 in external_linkageResult3.DefaultIfEmpty() + + + where + 1 == 1 + && (string.IsNullOrEmpty(model.quota_status_note) || m_eva_adjust_quota_update_status.quota_status_note.Contains(model.quota_status_note)) + + + orderby m_eva_adjust_quota_update_status.created descending + select new eva_adjust_quota_update_statusViewModel() + { + id = m_eva_adjust_quota_update_status.id, + quota_status = m_eva_adjust_quota_update_status.quota_status, + quota_status_date = m_eva_adjust_quota_update_status.quota_status_date, + quota_status_by = m_eva_adjust_quota_update_status.quota_status_by, + quota_status_note = m_eva_adjust_quota_update_status.quota_status_note, + + quota_status_external_linkage_external_name = fk_external_linkageResult1.external_name, + quota_status_by_external_linkage_external_name = fk_external_linkageResult3.fullname, + + isActive = m_eva_adjust_quota_update_status.isActive, + Created = m_eva_adjust_quota_update_status.created, + Updated = m_eva_adjust_quota_update_status.updated + } + ).Take(1000).ToList(); + + return data; + } + + #endregion + + #region Manipulation Functions + + + public int GetNewPrimaryKey() + { + int? newkey = 0; + + var x = (from i in _repository.Context.eva_adjust_postponement + orderby i.id descending + select i).Take(1).ToList(); + + if(x.Count > 0) + { + newkey = x[0].id + 1; + } + + return newkey.Value; + } + + + public eva_adjust_quota_update_statusViewModel Update(int id, eva_adjust_quota_update_statusInputModel model, bool is_force_save, int? updateby) + { + var existingEntity = _repository.Get(id); + if (existingEntity != null) + { + existingEntity.quota_status = model.quota_status; + existingEntity.quota_status_date = DateTime.Now; + existingEntity.quota_status_by = updateby; + existingEntity.quota_status_note = model.quota_status_note; + + var updated = _repository.Update(id, existingEntity); + return Get(updated.id); + } + else + throw new NotificationException("No data to update"); + } + + public eva_adjust_quota_update_statusViewModel SetAsActive(int id) + { + var updated = _repository.SetAsActive(id); + + return Get(updated.id); + } + public eva_adjust_quota_update_statusViewModel SetAsInactive(int id) + { + var updated = _repository.SetAsInActive(id); + + return Get(updated.id); + } + public void Delete(int id) + { + _repository.Delete(id); + + return; + } + + private Dictionary GetLookupForLog() + { + var i = new Dictionary(); + + + i.Add("quota_status", "สถานะการปรับเลื่อนเงินเดือน"); + i.Add("quota_status_external_linkage_external_name", "สถานะการปรับเลื่อนเงินเดือน"); + i.Add("quota_status_date", "วันที่"); + i.Add("txt_quota_status_date", "วันที่"); + i.Add("quota_status_by", "ปรับสถานะโดย"); + i.Add("quota_status_by_external_linkage_external_name", "ปรับสถานะโดย"); + i.Add("quota_status_note", "หมายเหตุ"); + + return i; + } + + #endregion + + #region Match Item + + #endregion + + #endregion + } +} \ No newline at end of file diff --git a/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusViewModel.cs b/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusViewModel.cs new file mode 100644 index 0000000..d36eb29 --- /dev/null +++ b/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusViewModel.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Threading.Tasks; +using TTSW.EF; +using TTSW.Utils; +using TTSW.Constant; +using TTSW.Common; + +namespace TodoAPI2.Models +{ + public class eva_adjust_quota_update_statusViewModel : BaseViewModel2 + { + + public string quota_status { get; set; } + + public DateTime? quota_status_date { get; set; } + + public string txt_quota_status_date { get { return MyHelper.GetDateStringForReport(this.quota_status_date); } } + + public int? quota_status_by { get; set; } + + public string quota_status_note { get; set; } + + public int? quota_status_submit_to { get; set; } + + public string quota_status_external_linkage_external_name { get; set; } + public string quota_status_by_external_linkage_external_name { get; set; } + + public string quota_status_submit_to_external_linkage_external_name { get; set; } + + } +} \ No newline at end of file diff --git a/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusWithSelectionViewModel.cs b/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusWithSelectionViewModel.cs new file mode 100644 index 0000000..2a598cb --- /dev/null +++ b/Models/eva_adjust_quota_update_status/eva_adjust_quota_update_statusWithSelectionViewModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace TodoAPI2.Models +{ + public class eva_adjust_quota_update_statusWithSelectionViewModel: eva_adjust_quota_update_statusViewModel + { + public List item_quota_status { get; set; } + public List item_quota_status_by { get; set; } + public List item_quota_status_submit_to { get; set; } + } +} + diff --git a/Models/external_linkage/external_linkageService.cs b/Models/external_linkage/external_linkageService.cs index bf41c9d..509abbb 100644 --- a/Models/external_linkage/external_linkageService.cs +++ b/Models/external_linkage/external_linkageService.cs @@ -315,7 +315,7 @@ namespace TodoAPI2.Models var k = new external_linkageViewModel(); k.external_id = 1; k.external_code = ""; - k.external_name = "อยู่ระหว่างพิจารณา"; + k.external_name = "ระหว่างพิจารณา"; result.Add(k); var i = new external_linkageViewModel(); @@ -324,11 +324,11 @@ namespace TodoAPI2.Models i.external_name = "อนุมัติและส่งต่อ"; result.Add(i); - var j = new external_linkageViewModel(); - j.external_id = 3; - j.external_code = "N"; - j.external_name = "ตีกลับ"; - result.Add(j); + //var j = new external_linkageViewModel(); + //j.external_id = 3; + //j.external_code = "N"; + //j.external_name = "ตีกลับ"; + //result.Add(j); return result; } diff --git a/Models/rep_eva01/rep_eva01ReportRequestModel.cs b/Models/rep_eva01/rep_eva01ReportRequestModel.cs index 8ea34fd..2022916 100644 --- a/Models/rep_eva01/rep_eva01ReportRequestModel.cs +++ b/Models/rep_eva01/rep_eva01ReportRequestModel.cs @@ -16,6 +16,8 @@ namespace TodoAPI2.Models public string filetype { get; set; } public string contentType { get { return MyHelper.GetContentType(filetype); } } + + public string print_dt { get; set; } } } diff --git a/Models/rep_eva02/rep_eva02ReportRequestModel.cs b/Models/rep_eva02/rep_eva02ReportRequestModel.cs index 612a927..133238e 100644 --- a/Models/rep_eva02/rep_eva02ReportRequestModel.cs +++ b/Models/rep_eva02/rep_eva02ReportRequestModel.cs @@ -16,6 +16,8 @@ namespace TodoAPI2.Models public string filetype { get; set; } public string contentType { get { return MyHelper.GetContentType(filetype); } } + + public string print_dt { get; set; } } } diff --git a/Models/rep_eva03/rep_eva03ReportRequestModel.cs b/Models/rep_eva03/rep_eva03ReportRequestModel.cs index 15516ce..542d3dd 100644 --- a/Models/rep_eva03/rep_eva03ReportRequestModel.cs +++ b/Models/rep_eva03/rep_eva03ReportRequestModel.cs @@ -16,6 +16,8 @@ namespace TodoAPI2.Models public string filetype { get; set; } public string contentType { get { return MyHelper.GetContentType(filetype); } } + + public string print_dt { get; set; } } } diff --git a/Models/rep_eva_limit_frame_plan/rep_eva_limit_frame_planReportRequestModel.cs b/Models/rep_eva_limit_frame_plan/rep_eva_limit_frame_planReportRequestModel.cs index 5238fc6..05d03f2 100644 --- a/Models/rep_eva_limit_frame_plan/rep_eva_limit_frame_planReportRequestModel.cs +++ b/Models/rep_eva_limit_frame_plan/rep_eva_limit_frame_planReportRequestModel.cs @@ -16,6 +16,8 @@ namespace TodoAPI2.Models public string filetype { get; set; } public string contentType { get { return MyHelper.GetContentType(filetype); } } + + public string print_dt { get; set; } } } diff --git a/Models/rep_eva_self_review/rep_eva_self_reviewReportRequestModel.cs b/Models/rep_eva_self_review/rep_eva_self_reviewReportRequestModel.cs index b104b59..848e7d7 100644 --- a/Models/rep_eva_self_review/rep_eva_self_reviewReportRequestModel.cs +++ b/Models/rep_eva_self_review/rep_eva_self_reviewReportRequestModel.cs @@ -26,6 +26,8 @@ namespace TodoAPI2.Models public string x2 { get; set; } public string thedesc { get; set; } + + public string print_dt { get; set; } } } diff --git a/Models/rep_eva_self_review_all/rep_eva_self_review_allReportRequestModel.cs b/Models/rep_eva_self_review_all/rep_eva_self_review_allReportRequestModel.cs index 44829e6..54f6d93 100644 --- a/Models/rep_eva_self_review_all/rep_eva_self_review_allReportRequestModel.cs +++ b/Models/rep_eva_self_review_all/rep_eva_self_review_allReportRequestModel.cs @@ -16,6 +16,8 @@ namespace TodoAPI2.Models public string filetype { get; set; } public string contentType { get { return MyHelper.GetContentType(filetype); } } + + public string print_dt { get; set; } } } diff --git a/Models/rep_summary_a01/rep_summary_a01ReportRequestModel.cs b/Models/rep_summary_a01/rep_summary_a01ReportRequestModel.cs index bd6407e..093a0a7 100644 --- a/Models/rep_summary_a01/rep_summary_a01ReportRequestModel.cs +++ b/Models/rep_summary_a01/rep_summary_a01ReportRequestModel.cs @@ -16,6 +16,8 @@ namespace TodoAPI2.Models public string filetype { get; set; } public string contentType { get { return MyHelper.GetContentType(filetype); } } + + public string print_dt { get; set; } } } diff --git a/Models/rpt_payroll_summary/rpt_payroll_summaryReportRequestModel.cs b/Models/rpt_payroll_summary/rpt_payroll_summaryReportRequestModel.cs index 805683b..faf34c3 100644 --- a/Models/rpt_payroll_summary/rpt_payroll_summaryReportRequestModel.cs +++ b/Models/rpt_payroll_summary/rpt_payroll_summaryReportRequestModel.cs @@ -16,6 +16,8 @@ namespace TodoAPI2.Models public string filetype { get; set; } public string contentType { get { return MyHelper.GetContentType(filetype); } } + + public string print_dt { get; set; } } } diff --git a/Startup.cs b/Startup.cs index 3d0327d..13d74d8 100644 --- a/Startup.cs +++ b/Startup.cs @@ -347,6 +347,8 @@ namespace Test01 services.AddScoped(); + services.AddScoped(); + #endregion services.TryAddSingleton(); @@ -661,6 +663,10 @@ namespace Test01 cfg.CreateMap(); cfg.CreateMap(); cfg.CreateMap(); + + cfg.CreateMap(); + cfg.CreateMap(); + cfg.CreateMap(); }); #endregion diff --git a/Views/eva_adjust_postponement_normalView/eva_adjust_postponement_normal_d.cshtml b/Views/eva_adjust_postponement_normalView/eva_adjust_postponement_normal_d.cshtml index 491fdce..e94eead 100644 --- a/Views/eva_adjust_postponement_normalView/eva_adjust_postponement_normal_d.cshtml +++ b/Views/eva_adjust_postponement_normalView/eva_adjust_postponement_normal_d.cshtml @@ -33,7 +33,7 @@
@@ -153,7 +153,9 @@
- + + +
@@ -227,7 +229,10 @@ if (id) { eva_adjust_postponement_normal_SetEditForm(id); eva_adjust_postponement_detail_normal_02_InitialForm(id); - eva_adjust_postponement_update_status_InitialForm(); + //eva_adjust_postponement_update_status_InitialForm(); + + eva_adjust_postponement_update_status_SetEditForm(getUrlParameter('id'), false); + } else { eva_adjust_postponement_normal_SetCreateForm(); } diff --git a/Views/eva_adjust_postponement_quotaView/eva_adjust_postponement_quota_d.cshtml b/Views/eva_adjust_postponement_quotaView/eva_adjust_postponement_quota_d.cshtml index 7bb880e..6c2b829 100644 --- a/Views/eva_adjust_postponement_quotaView/eva_adjust_postponement_quota_d.cshtml +++ b/Views/eva_adjust_postponement_quotaView/eva_adjust_postponement_quota_d.cshtml @@ -5,6 +5,54 @@ Layout = "_LayoutDirect"; } + + +