using CommonFunc;
using CommonFunc.Tools;
using HandyControl.Tools.Extension;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using XGL.Data;
using XGL.Dats.DBServiceFinishProd;
using XGL.Models.Model;
namespace XGLFinishPro.Views
{
///
/// PieceSalaryCalWin.xaml 的交互逻辑
///
public partial class PieceSalaryCalWin : Window
{
FinishProdDBService prodDBService = new FinishProdDBService();
string _deviceCode = "", _productCode= "",_workOrderCode="",_sapWorkOrderCode="",_productName="", _childprocessCode="", _childprocessName = "";
string _LineCode = "";
string number= "0";
public PieceSalaryCalWin()
{
InitializeComponent();
}
public PieceSalaryCalWin(string productCode,string productName,string deviceCode,string workOrderCode,string sapWorkOrderCode)
{
InitializeComponent();
_LineCode = deviceCode;
_deviceCode = deviceCode;
_productCode = productCode;
_productName = productName;
_workOrderCode = workOrderCode;
_sapWorkOrderCode = sapWorkOrderCode;
}
private void dgWorkOrderInfo_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = (e.Row.GetIndex() + 1).ToString();
}
private void btnConfirm_Click(object sender, RoutedEventArgs e)
{
try
{
List listDetail = new List();
if (lstBoxStep.SelectedItems.Count > 0)
{
foreach (var item in lstBoxStep.SelectedItems)
{
ChildProcess childProcess = new ChildProcess();
childProcess.childprocess_code = (item as ChildProcess).childprocess_code;
childProcess.childprocess_name = (item as ChildProcess).childprocess_name;
listDetail.Add(childProcess);
}
if (lstSelectedStep.Items.Count > 0)
{
//this.lstSelectedStep.Items.Clear();
this.lstSelectedStep.ItemsSource = null;
lstSelectedStep.ItemsSource = listDetail.OrderBy(a => a.childprocess_code);
this.btnSelectStep.IsChecked = false;
}
else
{
lstSelectedStep.ItemsSource = listDetail.OrderBy(a => a.childprocess_code);
this.btnSelectStep.IsChecked = false;
}
}
}
catch (Exception ex)
{
LogHelper.instance.log.Error("计件薪酬选择工序时发生异常:"+ex.Message);
}
}
private void lstSelectedStep_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
this.msgBox.Text = "";
List listDetail = new List();
if (lstSelectedStep.SelectedItems.Count > 0)
{
_childprocessCode = (lstSelectedStep.SelectedItem as ChildProcess).childprocess_code;
_childprocessName = (lstSelectedStep.SelectedItem as ChildProcess).childprocess_name;
}
// DataTable dt = prodDBService.GetUnitPriceInfo();
this.dgUserInfo.ItemsSource = null;
checkedRowsCache.Clear();
//Utils.userList.ForEach(t => t.IsChecked = false);
OnWorkUserList.ForEach(t => t.IsChecked = false);
dataSource = OnWorkUserList;// Utils.userList;
List usernumbers = new List< sys_user >();
if (dataSource.Count!=0)
{
string num= prodDBService.GetUsernumbereData(_workOrderCode);
foreach (var item in dataSource)
{
sys_user usernumber = new sys_user();
usernumber.user_name = item.user_name;
usernumber.nick_name = item.nick_name;
usernumber.number =Convert.ToInt32(num).ToString();
usernumbers.Add(usernumber);
}
}
this.dgUserInfo.ItemsSource = usernumbers;
}
private void dgUserInfo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// 处理选中行的事件
//foreach (sys_user selectedItem in e.AddedItems)
//{
// // 在这里执行你的操作,YourDataType 是你的数据类型
// // selectedItem 包含当前选中行的数据
// selectedItem.IsChecked = true;
// int i = dgUserInfo.Items.IndexOf(selectedItem);
// (dgUserInfo.Items[i] as sys_user).IsChecked = true;
//}
}
private void CheckBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// 阻止事件继续传播,以防止默认行为
e.Handled = true;
}
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
CheckBox CBCheck = (CheckBox)sender;
try
{
List UsersList = dgUserInfo.SelectedItems as List;
if (UsersList != null)
{
foreach (sys_user item in UsersList)
{
if (item.IsChecked == true)
{ item.IsChecked = false; }
else
{ item.IsChecked = true; }
}
}
dgUserInfo.Items.Refresh();
}
catch (Exception ex)
{
}
}
//从上下班的名单中找
List OnWorkUserList = new List();
//作为选中行的缓存
List checkedRowsCache = new List();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//新增将LineCode改为SAPCode的功能;20240325
DataSet ds = prodDBService.GetSapCode(_deviceCode);
if (ds == null)
{
CustomMessageBox.Show("请维护该线体对应的SAP编码!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
return;
}
_deviceCode = ds.Tables[0].Rows[0][0].ToString();
this.lstSelectedStep.ItemsSource = GetStepData();
GetUserData();
GetData();
}
private void GetUserData()
{
OnWorkUserList = prodDBService.GetOnWorkUserList(_LineCode,LoginUser.WorkDate);
if (OnWorkUserList == null || OnWorkUserList.Count <= 0)
{
CustomMessageBox.Show("没有找到上班的人员信息!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
return;
}
}
private void GetData()
{
DataTable dt = prodDBService.GetUnitPriceData(_deviceCode ,LoginUser.WorkDate);
if (dt == null)
{
this.dgCreatedUserInfo.ItemsSource = null;
}
else
{
this.dgCreatedUserInfo.ItemsSource = null;
this.dgCreatedUserInfo.ItemsSource = dt.DefaultView;
}
}
private void btnCloseWin_Click(object sender, RoutedEventArgs e)
{
if (CustomMessageBox.Show("确定要关闭此窗口吗?", CustomMessageBoxButton.OKCancel, CustomMessageBoxIcon.Question) == CustomMessageBoxResult.Cancel)
return;
this.Close();
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
}
List dataSource = new List();
private void Button_Click(object sender, RoutedEventArgs e)
{
if (dgCreatedUserInfo.SelectedItem != null)
{
DataRowView selectedItem = dgCreatedUserInfo.SelectedItem as DataRowView;
var bol = prodDBService.Updateremuneration(selectedItem["workorder_code_sap"].ToString(), selectedItem["nick_name"].ToString(), selectedItem["attr1"].ToString(), selectedItem["childprocess_code"].ToString());
GetData();
}
else
{
Console.WriteLine("未选择任何项。");
}
}
private void cb_selectAll_Click(object sender, RoutedEventArgs e)
{
try
{
// 获取点击的 CheckBox
CheckBox checkBox = sender as CheckBox;
// 检查是否成功获取到 CheckBox
if (checkBox != null)
{
// 遍历 DataGrid 的所有行
foreach (sys_user item in dgUserInfo.ItemsSource)
{
// 设置每行的 IsChecked 属性为全选 CheckBox 的 IsChecked 属性的值
item.IsChecked = checkBox.IsChecked ?? false;
}
}
}
catch (Exception ex)
{
}
}
///
/// 全选/取消全选
///
///
///
private void cb_all_Click(object sender, RoutedEventArgs e)
{
CheckBox cb = sender as CheckBox;
bool isChecked = cb.IsChecked == true;
foreach (var item in dgUserInfo.Items)
{
sys_user curRow = item as sys_user;
curRow.IsChecked = isChecked;
if (isChecked)
{
if (!checkedRowsCache.Contains(curRow))
{
checkedRowsCache.Add(curRow);
}
}
else
{
if (checkedRowsCache.Contains(curRow))
{
checkedRowsCache.Remove(curRow);
}
}
}
dgUserInfo.Items.Refresh();
}
private void dgUserInfo_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (alluser.IsChecked == true)
{
DataGrid dataGrid = sender as DataGrid;
if (e.EditAction == DataGridEditAction.Commit)
{
var editedElement = e.EditingElement as TextBox;
if (editedElement != null)
{
string newValue = editedElement.Text;
var binding = (e.Column as DataGridBoundColumn)?.Binding as Binding;
if (binding != null)
{
string propertyName = binding.Path.Path;
// 延迟调用更新方法,确保编辑状态完成
Dispatcher.BeginInvoke(new Action(() =>
{
UpdateAllRows(propertyName, newValue);
}), System.Windows.Threading.DispatcherPriority.Background);
}
}
}
}
}
private void UpdateAllRows(string propertyName, string newValue)
{
foreach (var item in dgUserInfo.Items)
{
var property = item.GetType().GetProperty(propertyName);
if (property != null)
{
property.SetValue(item, Convert.ChangeType(newValue, property.PropertyType));
}
}
dgUserInfo.Items.Refresh();
}
private void cb_child_Click(object sender, RoutedEventArgs e)
{
CheckBox cb = e.Source as CheckBox;
bool isChecked;
isChecked = cb.IsChecked == true ? true : false;
sys_user curRow = (dgUserInfo.CurrentItem as sys_user);
if (isChecked)
{
//this.chkPrintBatch.IsChecked = false;
foreach (var item in dgUserInfo.Items)
{
// DataGridTemplateColumn templeColumn = dgUserInfo.Columns[0] as DataGridTemplateColumn;
// FrameworkElement fwElement = dgUserInfo.Columns[0].GetCellContent(item);
// CheckBox cBox = templeColumn.CellTemplate.FindName("cb_child", fwElement) as CheckBox;
// //循环的行
// //DataRow tempRow = (item as DataRowView).Row;
// cBox.IsChecked = false;
}
checkedRowsCache.Add(curRow);
cb.IsChecked = true;
curRow.IsChecked = true;
}
else
{
checkedRowsCache.Remove(curRow);
cb.IsChecked = false;
curRow.IsChecked = false;
}
}
private void btnQueryUser_Click(object sender, RoutedEventArgs e)
{
string queryP = this.txtP.Text.Trim();
if (string.IsNullOrEmpty(queryP))
{
this.dgUserInfo.ItemsSource = OnWorkUserList;//Utils.userList;
return;
}
this.dgUserInfo.ItemsSource = null;
var queryList = OnWorkUserList.Where(t => t.nick_name.Contains(queryP) || t.user_name.Contains(queryP));//Utils.userList.Where(t => t.nick_name.Contains(queryP) || t.user_name.Contains(queryP));
this.dgUserInfo.ItemsSource = queryList;
}
private void txtP_TextChanged(object sender, TextChangedEventArgs e)
{
btnQueryUser_Click(null,null);
}
private void btnUserConfirm_Click(object sender, RoutedEventArgs e)
{
try
{
if (checkedRowsCache.Count == 0)
{
CustomMessageBox.Show("请选择人员", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
return;
}
if (dgUserInfo.SelectedIndex != -1)
{
number = (dgUserInfo.SelectedItem as sys_user).number;
}
if (CustomMessageBox.Show("确定要生成该工序的数据吗?", CustomMessageBoxButton.OKCancel, CustomMessageBoxIcon.Question) == CustomMessageBoxResult.Cancel)
return;
List CreateUnitPriceSqlList = new List();
if (prodDBService.IsExistData(_workOrderCode, _childprocessCode, _deviceCode))
{
string delSql = prodDBService.GetDelUnitPriceData(_workOrderCode, _childprocessCode, _deviceCode);
CreateUnitPriceSqlList.Add(delSql);
//prodDBService.DelUnitPriceData(_workOrderCode, _childprocessCode, _deviceCode);
}
string sapCode = _deviceCode;//ds.Tables[0].Rows[0][0].ToString();
foreach (sys_user item in checkedRowsCache)
{
if (item.number.IsNullOrEmpty())
{
item.number = "0";
}
string sql = prodDBService.GetCreateUnitPriceInfo(item, _workOrderCode, _sapWorkOrderCode, _productCode, _productName, _childprocessCode, _childprocessName, sapCode, item.number,LoginUser.WorkDate);
CreateUnitPriceSqlList.Add(sql);
}
//之前如果已经插入了,先删除,
//暂时不更新工单状态
//string updateSql = prodDBService.GetUpdateUnitPriceSql(_workOrderCode);
//CreateUnitPriceSqlList.Add(updateSql);
if (prodDBService.ExecuteCreateUnitPriceSql(CreateUnitPriceSqlList))
{
GetData();
foreach (sys_user item in dgUserInfo.Items)
{
if (item.IsChecked == true)
{
item.IsChecked = false;
}
}
}
else
{
CustomMessageBox.Show("插入失败,请重试!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
}
}
catch (Exception ex)
{
CustomMessageBox.Show("插入失败:"+ex.Message, CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
LogHelper.instance.log.Error("写入计件薪酬数据时发生异常:"+ex.Message);
}
}
private void btnSelectStep_Click(object sender, RoutedEventArgs e)
{
List list = new List();
DataTable dt = prodDBService.GetProductStepListInfo(_deviceCode, _productCode);
if (dt == null)
{
lstBoxStep.ItemsSource = null;
lstBoxStep.Items.Clear();
}
else
{
foreach (DataRow item in dt.Rows)
{
list.Add(new ChildProcess()
{
childprocess_code = item["childprocess_code"].ToString(),
childprocess_name = item["childprocess_name"].ToString()
});
}
lstBoxStep.ItemsSource = null;
lstBoxStep.Items.Clear();
lstBoxStep.ItemsSource = list;//dt.DefaultView;
}
}
private List GetStepData()
{
List list = new List();
DataTable dt = prodDBService.GetProductStepListInfo(_deviceCode, _productCode);
if (dt == null)
{
CustomMessageBox.Show("请配置工序数据之后再试!!!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Question);
lstBoxStep.ItemsSource = null;
lstBoxStep.Items.Clear();
}
else
{
foreach (DataRow item in dt.Rows)
{
list.Add(new ChildProcess()
{
childprocess_code = item["childprocess_code"].ToString(),
childprocess_name = item["childprocess_name"].ToString()
});
}
}
return list;
}
}
public class ChildProcess
{
public string childprocess_code { get; set; }
public string childprocess_name { get; set; }
}
public class remuneration
{
public string workorder_code_sap { get; set; }
public string nick_name { get; set; }
public DateTime create_time { get; set; }
}
}