using System.Collections; using System.Collections.Generic; using UnityEngine; using WI; using UnityEngine.UI; using TMPro; using System; using static System.Windows.Forms.VisualStyles.VisualStyleElement.Menu; using System.Globalization; using System.Linq; namespace CHN { public class PreviousWorkConditionData { public string startDate; public string endDate; public WorkItemCodeData itemCodeDatas; public string workItemCode; public int workItemCodeIndex; } public class Panel_WorkConditionAnalysis : PanelBase, ISingle { public Dictionary workConditionDatas = 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 TMP_Dropdown Dropdown_DataColumn; private UI_Calendar ui_Calendar; public UI_GraphChart mainChart; public UI_GraphChart[] subCharts; private RectTransform ChartDatas; private RectTransform SubCharts; public Action onSearchData; public Action onChangedDropdownValue; public Dictionary dropdownValues = new Dictionary(); public WorkConditionsData data; public WorkItemCodeData itemCodeData; public Action onClose; public float fadeTime; public string todayDate; 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; mainChart = transform.GetComponentsInChildren().Where(a => a.isMainChart).FirstOrDefault(); subCharts = SubCharts.GetComponentsInChildren(); 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"); ChartDatas.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) { if(targetText == Text_StartDay) { var startDateData = Convert.ToDateTime(targetText.text); startDate = startDateData.ToString("yyyyMMdd"); } else if(targetText == Text_EndDay) { var endDateData = Convert.ToDateTime(targetText.text); endDate = endDateData.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 (workConditionDatas.ContainsKey(facilityCode)) { this.startDate = workConditionDatas[facilityCode].startDate; this.endDate = workConditionDatas[facilityCode].endDate; ui_Calendar.SetCalendarData(Text_StartDay, workConditionDatas[facilityCode].startDate); ui_Calendar.SetCalendarData(Text_EndDay, workConditionDatas[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(workConditionDatas[facilityCode].itemCodeDatas); Dropdown_WorkOrderNumber.value = workConditionDatas[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(); ChartDatas.gameObject.SetActive(false); Panel_NotData.gameObject.SetActive(false); } } 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) { data.Add(workOrderNumber.wordno); if (!workOrderNumber.isActive) { deintercatableWorkno.Add(workOrderNumber.wordno); } } data.Add("-- ÀÛ¾÷ Áö½Ã ¹øÈ£¸¦ ¼±ÅÃÇϼ¼¿ä --"); Dropdown_WorkOrderNumber.SetHideAndDeinteractableItems(data[data.Count - 1], deintercatableWorkno); 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() { 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 SetWorkConditionsData(WorkConditionsData workConditionsData) { if (workConditionsData.data.count == "0") { Panel_NotData.gameObject.SetActive(true); ChartDatas.gameObject.SetActive(false); } else { Panel_NotData.gameObject.SetActive(false); ChartDatas.gameObject.SetActive(true); } data = workConditionsData; if (data.data.rows.Length > 0) { ITEMCD.text = data.data.rows[0].ITEMCD; } if (!workConditionDatas.ContainsKey(facilityCode)) { var newWorkConditionData = new PreviousWorkConditionData(); newWorkConditionData.startDate = startDate; newWorkConditionData.endDate = endDate; newWorkConditionData.itemCodeDatas = itemCodeData; newWorkConditionData.workItemCode = Dropdown_WorkOrderNumber.options[Dropdown_WorkOrderNumber.value].text; newWorkConditionData.workItemCodeIndex = Dropdown_WorkOrderNumber.value; workConditionDatas.Add(facilityCode, newWorkConditionData); } else { var newWorkConditionData = new PreviousWorkConditionData(); newWorkConditionData.startDate = startDate; newWorkConditionData.endDate = endDate; newWorkConditionData.itemCodeDatas = itemCodeData; newWorkConditionData.workItemCode = Dropdown_WorkOrderNumber.options[Dropdown_WorkOrderNumber.value].text; newWorkConditionData.workItemCodeIndex = Dropdown_WorkOrderNumber.value; workConditionDatas[facilityCode] = newWorkConditionData; } SetDataColumnDropDown(); OnDropdownValueChanged(0); } public void SetChartData(Dictionary mainChart) { var value = Dropdown_DataColumn.value; var optionName = Dropdown_DataColumn.options[value].text; this.mainChart.SetChartData(optionName, mainChart[optionName]); } public void SetSubChartDatas(Dictionary subCharts) { var subChartNames = new List(); var subChartValue = new List(); foreach (var option in Dropdown_DataColumn.options) { var optionName = option.text; if (mainChart.graphName != optionName) { subChartNames.Add(optionName); } } for (int i = 0; i < subCharts.Count; i++) { this.subCharts[i].SetChartData(subChartNames[i], subCharts[subChartNames[i]]); this.subCharts[i].onClickChart += OnClickChart; } } private void SetDataColumnDropDown() { dropdownValues.Clear(); Dropdown_DataColumn.ClearOptions(); List optionList = new List(); optionList.Add(new TMP_Dropdown.OptionData("º¸¾Ð (Peak)")); optionList.Add(new TMP_Dropdown.OptionData("ÁÖº¯ ½Àµµ")); optionList.Add(new TMP_Dropdown.OptionData("ÁÖº¯ ¿Âµµ")); optionList.Add(new TMP_Dropdown.OptionData("½ÎÀÌŬ ŸÀÓ")); for (int i = 0; i < optionList.Count; i++) { dropdownValues.Add(optionList[i].text, i); } Dropdown_DataColumn.AddOptions(optionList); Dropdown_DataColumn.onValueChanged.AddListener(OnDropdownValueChanged); Dropdown_DataColumn.value = 0; } private void OnClickChart(string graphName) { Dropdown_DataColumn.value = dropdownValues[graphName]; } private void OnDropdownValueChanged(int arg0) { var optionName = Dropdown_DataColumn.options[arg0].text; onChangedDropdownValue?.Invoke(optionName); } } }