Files
ChunilENG/Assets/Scripts/UI/Panel_WorkConditionAnalysis.cs
정영민 cdb30f1e84 UI 수정
2025-04-09 11:08:50 +09:00

276 lines
9.4 KiB
C#

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 enum DataColumn
{
,
,
,
}
public class Panel_WorkConditionAnalysis : PanelBase, ISingle
{
private Button Button_StartDay;
private Button Button_EndDay;
private TextMeshProUGUI Text_StartDay;
private TextMeshProUGUI Text_EndDay;
private TMP_Dropdown Dropdown_Facility;
private TMP_Dropdown Dropdown_WorkOrderNumber;
//private TMP_InputField InputField_WorkOrderNumber;
private Button Button_Search;
private Button Button_Close;
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<string, string, string, string> onSearchData;
public Action<string> onChangedDropdownValue;
public Dictionary<string, int> dropdownValues = new Dictionary<string, int>();
public WorkConditionsData data;
public Action<string> onClose;
public Panel_Effect effect;
public float fadeTime;
public string startDate;
public string endDate;
public Action<string, string, string> onDateData;
public Action<string, string> onFacilityCodeData;
public override void AfterAwake()
{
ui_Calendar = transform.GetComponentInChildren<UI_Calendar>(true);
ui_Calendar.onSelectDate += SetDayData;
mainChart = transform.GetComponentsInChildren<UI_GraphChart>().Where(a => a.isMainChart).FirstOrDefault();
subCharts = SubCharts.GetComponentsInChildren<UI_GraphChart>();
Button_Close.onClick.AddListener(OnClickCloseButton);
Button_StartDay.onClick.AddListener(OnClickStartDayBtn);
Button_EndDay.onClick.AddListener(OnClickEndDayBtn);
Button_Search.onClick.AddListener(OnClickSearchBtn);
ui_Calendar.Close();
Text_StartDay.text = DateTime.Now.ToString("yyyy-MM-dd");
Text_EndDay.text = DateTime.Now.ToString("yyyy-MM-dd");
ChartDatas.gameObject.SetActive(false);
gameObject.transform.localScale = Vector3.zero;
Dropdown_Facility.ClearOptions();
Dropdown_WorkOrderNumber.ClearOptions();
}
public void Open()
{
effect.ActivePanel();
gameObject.SetActive(true);
gameObject.transform.SetAsLastSibling();
StopAllCoroutines();
StartCoroutine(ScaleUp());
}
public void Close()
{
effect.DeactivePanel();
ui_Calendar.Close();
gameObject.SetActive(false);
gameObject.transform.localScale = Vector3.zero;
}
public void OnClickCloseButton()
{
onClose?.Invoke("작업 조건 분석");
}
private void OnClickStartDayBtn()
{
ui_Calendar.Open(Text_StartDay);
}
private void OnClickEndDayBtn()
{
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))
{
onDateData?.Invoke("작업 조건 분석", startDate, endDate);
}
}
public void SetFacilityDropDown(WorkConditionFacilityData facilityData)
{
Dropdown_Facility.ClearOptions();
string[] data = facilityData.data;
List<TMP_Dropdown.OptionData> optionList = new List<TMP_Dropdown.OptionData>();
foreach (string str in data)
{
optionList.Add(new TMP_Dropdown.OptionData(str));
}
Dropdown_Facility.AddOptions(optionList);
Dropdown_Facility.value = 0;
onFacilityCodeData?.Invoke("작업 조건 분석", Dropdown_Facility.options[Dropdown_Facility.value].text);
}
public void SetWorkItemCodeDropDown(WorkItemCodeData itemCodeData)
{
Dropdown_WorkOrderNumber.ClearOptions();
List<string> data = new List<string>();
foreach(var workOrderNumber in itemCodeData.data)
{
data.Add(workOrderNumber.wordno);
}
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 = 0;
}
private void OnClickSearchBtn()
{
DateTime startDate = Convert.ToDateTime(Text_StartDay.text);
DateTime endDate = Convert.ToDateTime(Text_EndDay.text);
string startDateString = startDate.ToString("yyyy-MM-ddTHH:mm:ssZ");
string endDateString = endDate.ToString("yyyy-MM-ddTHH:mm:ssZ");
string MCHCD = Dropdown_Facility.options[Dropdown_Facility.value].text;
string WO = Dropdown_WorkOrderNumber.options[Dropdown_WorkOrderNumber.value].text;
onSearchData?.Invoke(startDateString, endDateString, MCHCD, WO);
}
//public void SetChartLabels(List<string> chartLabels)
//{
// mainChart.SetChartLabels(chartLabels);
//}
public void SetWorkConditionsData(WorkConditionsData workConditionsData)
{
if (workConditionsData.data.count == "0")
{
Panel_NotData.gameObject.SetActive(true);
ChartDatas.gameObject.SetActive(false);
return;
}
Panel_NotData.gameObject.SetActive(false);
ChartDatas.gameObject.SetActive(true);
data = workConditionsData;
if (data.data.rows.Length > 0)
{
ITEMCD.text = data.data.rows[0].ITEMCD;
}
SetDataColumnDropDown();
OnDropdownValueChanged(0);
}
public void SetChartData(Dictionary<string, GraphChartData> mainChart)
{
var value = Dropdown_DataColumn.value;
var optionName = Dropdown_DataColumn.options[value].text;
this.mainChart.SetChartData(optionName, mainChart[optionName]);
}
public void SetSubChartDatas(Dictionary<string, GraphChartData> subCharts)
{
var subChartNames = new List<string>();
var subChartValue = new List<int>();
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<TMP_Dropdown.OptionData> optionList = new List<TMP_Dropdown.OptionData>();
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);
}
IEnumerator ScaleUp()
{
float timer = 0f;
float percent = 0f;
while (percent < 1)
{
timer += Time.deltaTime;
percent = timer / fadeTime;
transform.localScale = Vector3.Lerp(transform.localScale, Vector3.one, percent);
yield return null;
}
}
}
}