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 PreviousWorkTimeData(string startDate, string endDate, WorkItemCodeData itemCodeDatas, string workItemCode, int workItmemCodeIndex) { this.startDate = startDate; this.endDate = endDate; this.itemCodeDatas = itemCodeDatas; this.workItemCode = workItemCode; this.workItemCodeIndex = workItmemCodeIndex; } } public class Panel_WorkTimeAnalysis : PanelBase, ISingle { public Dictionary workTimeDatas = new Dictionary(); 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 onSearchData; public Action onClose; public float fadeTime; public string startDate; public string endDate; public string facilityCode; public Action onDateData; public override void AfterAwake() { ui_Calendar = transform.GetComponentInChildren(true); ui_Calendar.onSelectDate += SetDayData; barChart = transform.GetComponentInChildren(); Button_StartDay.onClick.AddListener(OnClickStartDayBtn); Button_EndDay.onClick.AddListener(OnClickEndDayBtn); Button_Search.onClick.AddListener(OnClickSearchBtn); ui_Calendar.Close(); Text_StartDay.text = DateTime.Now.AddMonths(-1).ToString("yyyy-MM-dd"); Text_EndDay.text = DateTime.Now.AddDays(-1).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(); startDate = Convert.ToDateTime(Text_StartDay.text).ToString("yyyyMMdd"); endDate = Convert.ToDateTime(Text_EndDay.text).ToString("yyyyMMdd"); if (!startDate.Equals(string.Empty) && !endDate.Equals(string.Empty)) { Dropdown_WorkOrderNumber.ClearOptions(); DateTime.TryParseExact(startDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var start); DateTime.TryParseExact(endDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var end); Image_WorkOrderNumberLoading.gameObject.SetActive(true); if (DateTime.Compare(start, end) == 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 { Dropdown_WorkOrderNumber.ClearOptions(); ChartData.gameObject.SetActive(false); Panel_NotData.gameObject.SetActive(false); SetDayData(Text_StartDay); } } public void SetWorkItemCodeDropDown(WorkItemCodeData itemCodeData) { this.itemCodeData = itemCodeData; Dropdown_WorkOrderNumber.ClearOptions(); List data = new List(); //HashSet deintercatableWorkno = new HashSet(); foreach (var workOrderNumber in this.itemCodeData.data) { if (workOrderNumber.isActive) { data.Add(workOrderNumber.wordno); } } data.Add("-- ÀÛ¾÷ Áö½Ã ¹øÈ£¸¦ ¼±ÅÃÇϼ¼¿ä --"); Dropdown_WorkOrderNumber.SetHideAndDeinteractableItems(data[data.Count - 1]); List optionList = new List(); 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() { if (Dropdown_WorkOrderNumber.value == Dropdown_WorkOrderNumber.options.Count - 1) return; 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) { var notDataAlarmActive = barChartData.Count == 0; var chartDataActive = barChartData.Count != 0; Panel_NotData.gameObject.SetActive(notDataAlarmActive); ChartData.gameObject.SetActive(chartDataActive); if (barChartData.Count > 0) { ITEMCD.text = barChartData[0].itemcd; } var dropdown = Dropdown_WorkOrderNumber; var dropdownValue = dropdown.value; var dropdownText = dropdown.options[dropdownValue].text; if (!workTimeDatas.ContainsKey(facilityCode)) { var newWorkConditionData = new PreviousWorkTimeData(startDate, endDate, itemCodeData, dropdownText, dropdownValue); workTimeDatas.Add(facilityCode, newWorkConditionData); } else { var updateWorkConditionData = new PreviousWorkTimeData(startDate, endDate, itemCodeData, dropdownText, dropdownValue); workTimeDatas[facilityCode] = updateWorkConditionData; } barChart.SetChartData(barChartData); } } }