You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

201 lines
7.1 KiB
C#

using GalaSoft.MvvmLight.Command;
using Microsoft.Extensions.DependencyInjection;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service;
using SlnMesnac.WPF.Views;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace SlnMesnac.WPF.ViewModel
{
public class ProductionReportViewModel : INotifyPropertyChanged
{
private ProdPlanInfoService _prodPlanInfoService;
private ProdPlanDetailService _prodPlanDetailService;
private ProdPLanInfo planInfo;
private ProdPlanDetail planDetail;
#region
/// <summary>
/// 按钮文字转换事件
/// </summary>
public event PropertyChangedEventHandler PropertyChanged = delegate { };
//刷新委托
public delegate void RefreshDelegate(ProdPLanInfo pLanInfo);
public static event RefreshDelegate RefreshDelegateEvent;
#endregion
public ProductionReportViewModel()
{
_prodPlanDetailService = App.ServiceProvider.GetService<ProdPlanDetailService>();
_prodPlanInfoService = App.ServiceProvider.GetService<ProdPlanInfoService>();
ConfirmCommand = new RelayCommand(Confirm);
EndPlanCommand = new RelayCommand(EndPlan);
Init();
}
private void Init()
{
planInfo = _prodPlanInfoService.GetRecordStaffAttendancesByConditions("", "", "", "","1").FirstOrDefault();
Refresh();
}
private void Refresh()
{
if (planInfo != null)
{
planDetail = _prodPlanDetailService.GetPlanDetailsByPlanCode(planInfo.PlanCode);
PlanAmountText = planDetail.PlanAmount.ToString();
CompleteAmountText = planDetail.CompleteAmount.ToString();
}
else
{
HintText = "没有正在执行的工单,请执行工单!";
}
}
#region
/// <summary>
/// 计划数量Text
/// </summary>
private string planAmountText;
public string PlanAmountText
{
get { return planAmountText; }
set { planAmountText = value; OnPropertyChanged("PlanAmountText"); }
}
/// <summary>
/// 完成数量Text
/// </summary>
private string completeAmountText;
public string CompleteAmountText
{
get { return completeAmountText; }
set { completeAmountText = value; OnPropertyChanged("CompleteAmountText"); }
}
/// <summary>
/// 新增数量Text
/// </summary>
private string newAmountText;
public string NewAmountText
{
get { return newAmountText; }
set { newAmountText = value; OnPropertyChanged("NewAmountText"); }
}
/// <summary>
/// 提示框
/// </summary>
private string hintText;
public string HintText
{
get { return hintText; }
set { hintText = value; OnPropertyChanged("HintText"); }
}
#endregion
/// <summary>
/// 确认命令
/// </summary>
public ICommand ConfirmCommand { get; private set; }
/// <summary>
/// 确认事件
/// </summary>
private void Confirm()
{
if(EmployeeLoginViewModel.isOnDuty == true)//是否有班组当班,无当班时操作无效
{
string newAmount = NewAmountText;
if (newAmount != null)
{
bool isNum = true;
foreach (char x in newAmount)
{
if (!char.IsNumber(x) && x != '.')
{
isNum = false;
}
}
if (isNum)
{
//将新增产量加到实际产量中
double currentAmountDouble = Convert.ToDouble(planDetail.CompleteAmount);
double newAmountDouble = Convert.ToDouble(newAmount);
double result = currentAmountDouble + newAmountDouble;
planDetail.CompleteAmount = result.ToString();
planInfo.CompleteAmount = result.ToString();
_prodPlanDetailService.Update(planDetail);
_prodPlanInfoService.Update(planInfo);
Refresh();
NewAmountText = null;
HintText = "已提交!";
RefreshDelegateEvent?.Invoke(planInfo);
ExecuteViewModel.isComplete = true;
}
else
{
//提示框提示错误信息
HintText = "输入有误,请输入阿拉伯数字!";
}
}
else
{
HintText = "不能为空!";
}
}
}
/// <summary>
/// 结束工单命令
/// </summary>
public ICommand EndPlanCommand { get; private set; }
private void EndPlan()
{
//判断工单实际产量与目标产量的差距,满足才能执行结束
if(EmployeeLoginViewModel.isOnDuty == true)//是否有班组当班,无当班时操作无效
{
if (planDetail != null && planInfo != null)
{
planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
_prodPlanDetailService.Update(planDetail);
planInfo.PlanStatus = "2";
planInfo.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
double planAmountDouble = Convert.ToDouble(planDetail.PlanAmount);
double completeAmountDouble = Convert.ToDouble(planDetail.CompleteAmount);
if (planAmountDouble == completeAmountDouble)
{
planInfo.CompFlag = "0";//正常完成
}
else if (planAmountDouble > completeAmountDouble)
{
planInfo.CompFlag = "1";//不足目标产量降级处理
}
else
{
planInfo.CompFlag = "2";//超额完成
}
_prodPlanInfoService.Update(planInfo);
}
//关闭窗口
Application.Current.Windows.OfType<ProductionReportWin>().First().Close();
}
}
public void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}