Files
ChunilENG/Assets/Scripts/UI/Panel_WorkTimeAnalysis.cs
2025-08-22 11:15:22 +09:00

267 lines
9.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using WI;
using UnityEngine.UI;
using TMPro;
using System;
using System.Globalization;
namespace CHN
{
public class PreviousWorkTimeData
{
public string startDate;
public string endDate;
public WorkItemCodeData itemCodeDatas;
public string workItemCode;
public int workItemCodeIndex;
}
public class Panel_WorkTimeAnalysis : PanelBase, ISingle
{
public Dictionary<string, PreviousWorkTimeData> workTimeDatas = new Dictionary<string, PreviousWorkTimeData>();
private Button Button_StartDay;
private Button Button_EndDay;
private TextMeshProUGUI Text_StartDay;
private TextMeshProUGUI Text_EndDay;
private CustomTMPDropdown Dropdown_WorkOrderNumber;
private Image Image_WorkOrderNumberLoading;
private Button Button_Search;
private RectTransform Panel_NotData;
private TextMeshProUGUI ITEMCD;
private UI_Calendar ui_Calendar;
private RectTransform ChartData;
public UI_BarChart barChart;
private WorkItemCodeData itemCodeData;
public Action<string, string, string, string> onSearchData;
public Action<string> onClose;
public float fadeTime;
public string todayDate;
public string startDate;
public string endDate;
public string facilityCode;
public Action<string, string, string> onDateData;
public override void AfterAwake()
{
ui_Calendar = transform.GetComponentInChildren<UI_Calendar>(true);
ui_Calendar.onSelectDate += SetDayData;
barChart = transform.GetComponentInChildren<UI_BarChart>();
Button_StartDay.onClick.AddListener(OnClickStartDayBtn);
Button_EndDay.onClick.AddListener(OnClickEndDayBtn);
Button_Search.onClick.AddListener(OnClickSearchBtn);
ui_Calendar.Close();
todayDate = DateTime.Now.ToString("yyyyMMdd");
Text_StartDay.text = DateTime.Now.ToString("yyyy-MM-dd");
Text_EndDay.text = DateTime.Now.ToString("yyyy-MM-dd");
ChartData.gameObject.SetActive(false);
Dropdown_WorkOrderNumber.ClearOptions();
}
public void Open()
{
gameObject.SetActive(true);
gameObject.transform.SetAsLastSibling();
}
public void Close()
{
ui_Calendar.Close();
gameObject.SetActive(false);
}
private void OnClickStartDayBtn()
{
if (Image_WorkOrderNumberLoading.gameObject.activeSelf)
return;
ui_Calendar.Open(Text_StartDay);
}
private void OnClickEndDayBtn()
{
if (Image_WorkOrderNumberLoading.gameObject.activeSelf)
return;
ui_Calendar.Open(Text_EndDay);
}
private void SetDayData(TextMeshProUGUI targetText)
{
Dropdown_WorkOrderNumber.ClearOptions();
if (targetText == Text_StartDay)
{
var startDateData = Convert.ToDateTime(targetText.text);
startDate = startDateData.ToString("yyyyMMdd");
var endDateData = Convert.ToDateTime(Text_EndDay.text);
endDate = endDateData.ToString("yyyyMMdd");
}
else if (targetText == Text_EndDay)
{
var endDateData = Convert.ToDateTime(targetText.text);
endDate = endDateData.ToString("yyyyMMdd");
var startDateData = Convert.ToDateTime(Text_StartDay.text);
startDate = startDateData.ToString("yyyyMMdd");
}
if (!startDate.Equals(string.Empty) && !endDate.Equals(string.Empty))
{
Dropdown_WorkOrderNumber.ClearOptions();
DateTime.TryParseExact(startDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var startDateData);
DateTime.TryParseExact(endDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var endDateData);
Image_WorkOrderNumberLoading.gameObject.SetActive(true);
if (DateTime.Compare(startDateData, endDateData) == 1)
{
Image_WorkOrderNumberLoading.gameObject.SetActive(false);
Dropdown_WorkOrderNumber.captionText.SetText("-");
return;
}
onDateData?.Invoke(startDate, endDate, facilityCode);
}
}
public void SetFacilityCode(SimpleField simple, Machine machine)
{
facilityCode = machine.code;
if (workTimeDatas.ContainsKey(facilityCode))
{
this.startDate = workTimeDatas[facilityCode].startDate;
this.endDate = workTimeDatas[facilityCode].endDate;
ui_Calendar.SetCalendarData(Text_StartDay, workTimeDatas[facilityCode].startDate);
ui_Calendar.SetCalendarData(Text_EndDay, workTimeDatas[facilityCode].endDate);
DateTime startDate = Convert.ToDateTime(Text_StartDay.text);
DateTime endDate = Convert.ToDateTime(Text_EndDay.text);
endDate = endDate.AddDays(+1);
string startDateString = startDate.ToString("yyyy-MM-ddTHH:mm:ssZ");
string endDateString = endDate.ToString("yyyy-MM-ddTHH:mm:ssZ");
SetWorkItemCodeDropDown(workTimeDatas[facilityCode].itemCodeDatas);
Dropdown_WorkOrderNumber.value = workTimeDatas[facilityCode].workItemCodeIndex;
var workItemCode = Dropdown_WorkOrderNumber.options[Dropdown_WorkOrderNumber.value].text;
onSearchData?.Invoke(startDateString, endDateString, facilityCode, workItemCode);
}
else
{
startDate = "";
endDate = "";
ui_Calendar.SetCalendarData(Text_StartDay, todayDate);
ui_Calendar.SetCalendarData(Text_EndDay, todayDate);
Dropdown_WorkOrderNumber.ClearOptions();
ChartData.gameObject.SetActive(false);
Panel_NotData.gameObject.SetActive(false);
}
}
public void SetWorkItemCodeDropDown(WorkItemCodeData itemCodeData)
{
this.itemCodeData = itemCodeData;
Dropdown_WorkOrderNumber.ClearOptions();
List<string> data = new List<string>();
HashSet<string> deintercatableWorkno = new HashSet<string>();
foreach (var workOrderNumber in this.itemCodeData.data)
{
data.Add(workOrderNumber.wordno);
if (!workOrderNumber.isActive)
{
deintercatableWorkno.Add(workOrderNumber.wordno);
}
}
data.Add("-- 작업 지시 번호를 선택하세요 --");
Dropdown_WorkOrderNumber.SetHideAndDeinteractableItems(data[data.Count - 1], deintercatableWorkno);
List<TMP_Dropdown.OptionData> optionList = new List<TMP_Dropdown.OptionData>();
foreach (string str in data)
{
optionList.Add(new TMP_Dropdown.OptionData(str));
}
Dropdown_WorkOrderNumber.AddOptions(optionList);
Dropdown_WorkOrderNumber.value = data.Count - 1;
Image_WorkOrderNumberLoading.gameObject.SetActive(false);
}
private void OnClickSearchBtn()
{
DateTime startDate = Convert.ToDateTime(Text_StartDay.text);
DateTime endDate = Convert.ToDateTime(Text_EndDay.text);
endDate = endDate.AddDays(+1);
string startDateString = startDate.ToString("yyyy-MM-ddTHH:mm:ssZ");
string endDateString = endDate.ToString("yyyy-MM-ddTHH:mm:ssZ");
string MCHCD = facilityCode;
string WO = Dropdown_WorkOrderNumber.options[Dropdown_WorkOrderNumber.value].text;
onSearchData?.Invoke(startDateString, endDateString, MCHCD, WO);
}
public void SetWorkTimeData(List<BarChartData> barChartData)
{
if (barChartData.Count == 0)
{
Panel_NotData.gameObject.SetActive(true);
ChartData.gameObject.SetActive(false);
}
else
{
Panel_NotData.gameObject.SetActive(false);
ChartData.gameObject.SetActive(true);
}
if (barChartData.Count > 0)
{
ITEMCD.text = barChartData[0].itemcd;
}
if (!workTimeDatas.ContainsKey(facilityCode))
{
var newWorkConditionData = new PreviousWorkTimeData();
newWorkConditionData.startDate = startDate;
newWorkConditionData.endDate = endDate;
newWorkConditionData.itemCodeDatas = itemCodeData;
newWorkConditionData.workItemCode = Dropdown_WorkOrderNumber.options[Dropdown_WorkOrderNumber.value].text;
newWorkConditionData.workItemCodeIndex = Dropdown_WorkOrderNumber.value;
workTimeDatas.Add(facilityCode, newWorkConditionData);
}
else
{
var newWorkConditionData = new PreviousWorkTimeData();
newWorkConditionData.startDate = startDate;
newWorkConditionData.endDate = endDate;
newWorkConditionData.itemCodeDatas = itemCodeData;
newWorkConditionData.workItemCode = Dropdown_WorkOrderNumber.options[Dropdown_WorkOrderNumber.value].text;
newWorkConditionData.workItemCodeIndex = Dropdown_WorkOrderNumber.value;
workTimeDatas[facilityCode] = newWorkConditionData;
}
barChart.SetChartData(barChartData);
}
}
}