diff --git a/Models/eva_create_evaluation_detail_status/eva_create_evaluation_detail_statusService.cs b/Models/eva_create_evaluation_detail_status/eva_create_evaluation_detail_statusService.cs index 88bddfb..7b56297 100644 --- a/Models/eva_create_evaluation_detail_status/eva_create_evaluation_detail_statusService.cs +++ b/Models/eva_create_evaluation_detail_status/eva_create_evaluation_detail_statusService.cs @@ -14,6 +14,11 @@ using System.Net; using TTSW.Configure; using Microsoft.Extensions.Options; using System.Data; +using Npgsql; +using NpgsqlTypes; +using Microsoft.Extensions.Configuration; +using Newtonsoft.Json; +using System.Text; namespace TodoAPI2.Models { @@ -22,12 +27,17 @@ namespace TodoAPI2.Models private IBaseRepository2 _repository; private IMyDatabase db; private Iexternal_linkageService ext; + private Iexternal_employeeService emp; + private IConfiguration Configuration { get; set; } - public eva_create_evaluation_detail_statusService(IBaseRepository2 repository, IMyDatabase mydb, Iexternal_linkageService inext) + public eva_create_evaluation_detail_statusService(IBaseRepository2 repository, + IMyDatabase mydb, Iexternal_linkageService inext, Iexternal_employeeService inemp, IConfiguration configuration) { _repository = repository; db = mydb; ext = inext; + emp = inemp; + Configuration = configuration; } #region Private Functions @@ -160,8 +170,6 @@ namespace TodoAPI2.Models where k.id == existingEntity.create_evaluation_id select k).FirstOrDefault(); - // Do notification here - if (existingEntity != null) { existingEntity.create_evaluation_id = model.create_evaluation_id; @@ -173,39 +181,66 @@ namespace TodoAPI2.Models if (current_eva.employee_id == existingEntity.chief) // หัวหน้าและผู้ประเมินสูงสุด เป็นคนคนเดียวกัน { - if(existingEntity.status_chief == "Y") existingEntity.status_supervisor = existingEntity.status_chief; + if (existingEntity.status_chief == "Y") existingEntity.status_supervisor = existingEntity.status_chief; } + int? noti_to_employee_id = null; + int? owner_eva_employee_id = existingEntity.employee_id; + string noti_message = "กรุณาตรวจสอบแบบประเมินของ {0}"; + string noti_url = "/eva/eva_create_evaluation_detail_processView/eva_create_evaluation_detail_process_d2?id=" + existingEntity.id.ToString(); + if (model.status_mode == "next0") { existingEntity.status_self_click_date = MyHelper.RemoveTimeFromDate(DateTime.Now); + noti_to_employee_id = existingEntity.chief; + noti_message = "กรุณาตรวจสอบแบบประเมินของ {0}"; + noti_url = "/eva/eva_create_evaluation_detail_processView/eva_create_evaluation_detail_process_d?id=" + existingEntity.id.ToString(); } else if (model.status_mode == "next1") { existingEntity.status_chief_click_date = MyHelper.RemoveTimeFromDate(DateTime.Now); + if (current_eva.employee_id == existingEntity.chief) // หัวหน้าและผู้ประเมินสูงสุด เป็นคนคนเดียวกัน + { + noti_to_employee_id = current_eva.supervisor1_id; + } + else + { + noti_to_employee_id = current_eva.employee_id; + } } else if (model.status_mode == "back1") { existingEntity.status_chief_click_date = MyHelper.RemoveTimeFromDate(DateTime.Now); existingEntity.status_self_click_date = null; + noti_to_employee_id = existingEntity.employee_id; + noti_message = "ข้อตกลงการประเมินของคุณ ({0}) ถูกตีกลับ"; + noti_url = "/eva/eva_create_evaluation_detail_agreementView/eva_create_evaluation_detail_agreement_d?id=" + existingEntity.id.ToString(); } else if (model.status_mode == "next2") { existingEntity.status_supervisor_click_date = MyHelper.RemoveTimeFromDate(DateTime.Now); + noti_to_employee_id = current_eva.supervisor1_id; } else if (model.status_mode == "back2") { existingEntity.status_supervisor_click_date = MyHelper.RemoveTimeFromDate(DateTime.Now); existingEntity.status_chief_click_date = null; + noti_to_employee_id = existingEntity.chief; + noti_message = "แบบประเมินของ {0} ถูกตีกลับ"; + noti_url = "/eva/eva_create_evaluation_detail_agreementView/eva_create_evaluation_detail_agreement_d?id=" + existingEntity.id.ToString(); } else if (model.status_mode == "next3") { existingEntity.status_supervisor1A_click_date = MyHelper.RemoveTimeFromDate(DateTime.Now); + noti_to_employee_id = current_eva.supervisor2_id; } else if (model.status_mode == "back3") { existingEntity.status_supervisor1A_click_date = MyHelper.RemoveTimeFromDate(DateTime.Now); existingEntity.status_supervisor_click_date = null; + noti_to_employee_id = current_eva.employee_id; + noti_message = "แบบประเมินของ {0} ถูกตีกลับ"; + noti_url = "/eva/eva_create_evaluation_detail_agreementView/eva_create_evaluation_detail_agreement_d2?id=" + existingEntity.id.ToString(); } else if (model.status_mode == "next4") { @@ -215,8 +250,13 @@ namespace TodoAPI2.Models { existingEntity.status_supervisor2A_click_date = MyHelper.RemoveTimeFromDate(DateTime.Now); existingEntity.status_supervisor1A_click_date = null; + noti_to_employee_id = current_eva.supervisor1_id; + noti_message = "แบบประเมินของ {0} ถูกตีกลับ"; + noti_url = "/eva/eva_create_evaluation_detail_agreementView/eva_create_evaluation_detail_agreement_d2?id=" + existingEntity.id.ToString(); } + SendNotification(noti_to_employee_id, owner_eva_employee_id, existingEntity.id, noti_message, noti_url); + var updated = _repository.Update(id, existingEntity); return Get(updated.id); } @@ -224,6 +264,38 @@ namespace TodoAPI2.Models throw new NotificationException("No data to update"); } + private void SendNotification(int? noti_to_employee_id, int? owner_eva_employee_id, int? detail_id, string noti_message, string noti_url) + { + if (!noti_to_employee_id.HasValue || !owner_eva_employee_id.HasValue || !detail_id.HasValue) return; + + var all_emp = emp.GetAllEmployee(); + int? noti_to_user_id = (from i in all_emp + where i.id == noti_to_employee_id + select i.user_id).FirstOrDefault(); + var owner_info = (from i in all_emp + where i.id == owner_eva_employee_id + select i).FirstOrDefault(); + string sql = $@" +insert into notifications(id,type,notifiable_type,notifiable_id,data) +values('{Guid.NewGuid().ToString()}','App\Notifications\WorkflowNotification','App\Models\User',{noti_to_user_id.ToString()},@data) +"; + DataOfNotification d = new DataOfNotification(); + d.title = noti_message.Replace("{0}", owner_info.fullname); + d.body = noti_message.Replace("{0}", owner_info.fullname); + d.url = noti_url; + + NpgsqlParameter data = new NpgsqlParameter(); + data.DbType = DbType.String; + data.Direction = ParameterDirection.Input; + data.ParameterName = "data"; + data.Value = JsonConvert.SerializeObject(d); + + List para = new List(); + para.Add(data); + + db.ExecuteNonQueryNpgsql(sql, para); + } + public string UpdateMultiple(List model) { foreach (var i in model) @@ -240,7 +312,6 @@ namespace TodoAPI2.Models existingEntity.status_supervisor1A = i.status_supervisor1A; existingEntity.status_supervisor2A = i.status_supervisor2A; - _repository.UpdateWithoutCommit(i.id.Value, existingEntity); } } @@ -290,4 +361,11 @@ namespace TodoAPI2.Models #endregion } + + public class DataOfNotification + { + public string title { get; set; } + public string body { get; set; } + public string url { get; set; } + } } \ No newline at end of file