StableVersion4.3/HL_FristAidPlatform_PreHosp.../Form_Roster.cs

397 lines
19 KiB
C#

using DevExpress.Utils;
using DevExpress.Utils.Menu;
using DevExpress.XtraScheduler;
using DevExpress.XtraScheduler.Commands;
using DevExpress.XtraScheduler.Drawing;
using DevExpress.XtraScheduler.Services;
using DevExpress.XtraScheduler.Xml;
using HL_FristAidPlatform_DTO;
using HL_FristAidPlatform_Public;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace HL_FristAidPlatform_PreHospitalEmergency
{
public partial class Form_Roster : Form
{
public Form_Roster()
{
InitializeComponent();
}
private void schedulerControl1_Click(object sender, EventArgs e)
{
//MessageBox.Show("点击事件");
}
private void Form_Roster_Load(object sender, EventArgs e)
{
try
{
#region 设置默认样式
//schedulerControl1.OptionsCustomization.AllowAppointmentCreate = UsedAppointmentType.None;
//schedulerControl1.OptionsCustomization.AllowAppointmentDelete = UsedAppointmentType.None;
//schedulerControl1.OptionsCustomization.AllowAppointmentEdit = UsedAppointmentType.None;
//schedulerControl1.OptionsCustomization.AllowAppointmentDrag = UsedAppointmentType.None;
schedulerControl1.OptionsCustomization.AllowAppointmentMultiSelect = false;
schedulerControl1.OptionsRangeControl.AllowChangeActiveView = false;
schedulerControl1.MonthView.CompressWeekend = false;
schedulerControl1.OptionsBehavior.ShowRemindersForm = false;
//schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO.Add(new Appointment());
//schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].AllDay = false;
//schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].LabelId = 2;
//schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].Location = "Title";
//schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].Start = DateTime.Now;
//schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].End = DateTime.Now.AddHours(1);
//schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].Subject = "Subject";
//schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].StatusId = 1;
//schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].Description = "描述";
#endregion
//3.自定义Tooltip
//ToolTipController toolTipController1 = new ToolTipController();
//toolTipController1.AllowHtmlText = true;
//toolTipController1.ShowBeak = true;
//toolTipController1.BeforeShow += new ToolTipControllerBeforeShowEventHandler(toolTipController1_BeforeShow);
//schedulerControl1.ToolTipController = this.toolTipController1;//与schedule绑定
schedulerControl1.Start = DateTime.Now;
schedulerControl1.DataStorage.Appointments.ResourceSharing = true;
DataBind();
}
catch (Exception ex)
{
PublicClass.WriteErrorLog(this.Text, ex.Message);
}
}
//2.右键菜单--自定义
//从数据库加载资源信息
private void DataBind()
{
try
{
string url = string.Format("api/service/T_Service_FristAid_UserAppointment?pageIndex={0}&pageSize={1}", 1, 100);
DataSet ds = DBHelpClass.GetDataSet(url);
DataTable ResultDT = ds.Tables["Data"];
schedulerDataStorage1.Appointments.Mappings.AppointmentId = "ID";
schedulerDataStorage1.Appointments.Mappings.AllDay = "AllDay";
schedulerDataStorage1.Appointments.Mappings.Description = "UserDescription";
schedulerDataStorage1.Appointments.Mappings.End = "EndDate";
schedulerDataStorage1.Appointments.Mappings.Label = "Label";
schedulerDataStorage1.Appointments.Mappings.Location = "Location";
if (schedulerControl1.ResourceSharing)
{
schedulerDataStorage1.Appointments.Mappings.ResourceId = "ResourceIds";
}
else
{
schedulerDataStorage1.Appointments.Mappings.ResourceId = "ResourceId";
}
schedulerDataStorage1.Appointments.Mappings.RecurrenceInfo = "RecurrenceInfo";
schedulerDataStorage1.Appointments.Mappings.ReminderInfo = "ReminderInfo";
schedulerDataStorage1.Appointments.Mappings.Start = "StartDate";
schedulerDataStorage1.Appointments.Mappings.Status = "UserStatus";
schedulerDataStorage1.Appointments.Mappings.Subject = "UserSubject";
schedulerDataStorage1.Appointments.Mappings.Type = "UserType";
schedulerDataStorage1.Appointments.DataSource = ResultDT;
string urlAPP = string.Format("api/service/T_Service_FristAid_AppAppointment?pageIndex={0}&pageSize={1}", 1, 100);
DataSet dataSet= DBHelpClass.GetDataSet(urlAPP);
DataTable ResultDTAPP = dataSet.Tables["Data"];
schedulerDataStorage1.Resources.Mappings.Id = "ResourceId";
schedulerDataStorage1.Resources.Mappings.Caption = "ResourceName";
schedulerDataStorage1.Resources.Mappings.Color = "Color";
schedulerDataStorage1.Resources.Mappings.Image = "APPImage";
schedulerDataStorage1.Resources.DataSource = ResultDTAPP;
schedulerControl1.RefreshData();//必须,每次修改需要刷新数据源,否则界面需要重新刷新
}
catch (Exception e)
{
PublicClass.WriteErrorLog(this.Name, e.Message);
}
}
private void schedulerControl1_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
{
//对日程的右键菜单进行修改
SchedulerControl control = schedulerControl1;
if (e.Menu.Id == SchedulerMenuItemId.DefaultMenu)
{
//隐藏【视图更改为】菜单
SchedulerPopupMenu itemChangeViewTo = e.Menu.GetPopupMenuById(SchedulerMenuItemId.SwitchViewMenu);
itemChangeViewTo.Visible = true;
//删除【新建所有当天事件】菜单
e.Menu.RemoveMenuItem(SchedulerMenuItemId.NewAllDayEvent);
//设置【新建定期日程安排】菜单为不可用
e.Menu.RemoveMenuItem(SchedulerMenuItemId.NewRecurringAppointment);
//设置【新建定期日程安排】菜单为不可用
SchedulerMenuItem forItem = e.Menu.GetMenuItemById(SchedulerMenuItemId.NewRecurringEvent);
if (forItem != null) forItem.Caption = "新建循环排班";
//改名【新建日程安排】菜单为自定义名称
SchedulerMenuItem item = e.Menu.GetMenuItemById(SchedulerMenuItemId.NewAppointment);
if (item != null) item.Caption = "新建排班";
//创建一个新项,用内置的命令
ISchedulerCommandFactoryService service =
(ISchedulerCommandFactoryService)control.GetService(typeof(ISchedulerCommandFactoryService));
SchedulerCommand cmd = service.CreateCommand(SchedulerCommandId.PrintPreview);//打印预览
SchedulerMenuItemCommandWinAdapter menuItemCommandAdapter = new SchedulerMenuItemCommandWinAdapter(cmd);
DXMenuItem menuItem = (DXMenuItem)menuItemCommandAdapter.CreateMenuItem(DXMenuItemPriority.Normal);
menuItem.BeginGroup = true;
e.Menu.Items.Add(menuItem);
////创建一个新的自定义事件菜单
//DXMenuItem menuTest = new SchedulerMenuItem("排班");
//menuTest.Click += menuItem2_Click;
//menuTest.BeginGroup = true;
//e.Menu.Items.Add(menuTest);
}
}
private void schedulerControl1_CustomDrawAppointment(object sender, DevExpress.XtraScheduler.CustomDrawObjectEventArgs e)
{
//try
//{
// if (e.ObjectInfo.GetType() != typeof(AppointmentViewInfo) && e.ObjectInfo.GetType() != typeof(HorizontalAppointmentViewInfo))
// return;
// AppointmentViewInfo viewInfo = e.ObjectInfo as AppointmentViewInfo;
// Appointment app = viewInfo.Appointment as Appointment;
// if (app == null)
// return;
// e.Cache.DrawString((viewInfo.Appointment, viewInfo.Appearance.Font, viewInfo.Bounds.Width).ToString(),
// viewInfo.Appearance.Font, new SolidBrush(viewInfo.Appearance.ForeColor),
// viewInfo.Bounds,
// viewInfo.Appearance.TextOptions.GetStringFormat());//超出部分,做处理
// e.Handled = true;//不会执行默认操作
//}
//catch (Exception ex)
//{
// throw ex;
//}
}
//重绘Header部分
private void schedulerControl1_CustomDrawDayHeader(object sender, DevExpress.XtraScheduler.CustomDrawObjectEventArgs e)
{
//try
//{
// if (e.ObjectInfo.GetType() != typeof(MonthViewTimeCellHeader))
// return;
// MonthViewTimeCellHeader header = (MonthViewTimeCellHeader)e.ObjectInfo;
// SelectableIntervalViewInfo viewInfo = e.ObjectInfo as SelectableIntervalViewInfo;
// Brush br = GetBrush(header.Interval.Start, DateTime.Now);
// if (viewInfo.Selected)
// {
// br = new SolidBrush(Color.Bisque); //设置被选中时颜色
// }
// e.Cache.FillRectangle(br, new Rectangle(e.Bounds.X + 1, e.Bounds.Y, e.Bounds.Width - 2, e.Bounds.Height - 1));//填充header部分
// StringFormat sf = header.Appearance.HeaderCaption.TextOptions.GetStringFormat(TextOptions.DefaultOptionsCenteredWithEllipsis);
// e.Cache.DrawString(header.Interval.Start.ToString("MM月dd日"), schedulerControl1.MonthView.Appearance.HeaderCaption.Font, Brushes.Green, e.Bounds, sf);//自定义日期格式
// e.Handled = true;
//}
//catch (Exception ex)
//{
// throw ex;
//}
}
private void schedulerControl1_CustomDrawTimeCell(object sender, DevExpress.XtraScheduler.CustomDrawObjectEventArgs e)
{
//try
//{
// if (e.ObjectInfo.GetType() != typeof(MonthSingleWeekCell))
// return;
// MonthSingleWeekCell cell = ((MonthSingleWeekCell)(e.ObjectInfo));
// SelectableIntervalViewInfo selcell = e.ObjectInfo as SelectableIntervalViewInfo;
// Brush br = GetBrush(cell.Interval.Start, DateTime.Now);
// if (selcell.Selected)
// {
// br = new SolidBrush(Color.Green);
// }
// e.Cache.FillRectangle(br, new Rectangle(e.Bounds.X + 1, e.Bounds.Y, e.Bounds.Width - 2, e.Bounds.Height - 1));//填充图示2部分
// e.Handled = true;
//}
//catch (Exception ex)
//{
// throw ex;
//}
}
//自定义颜色
public static Brush GetBrush(DateTime inDate, DateTime currentYerestday)
{
Brush result = null;
if (inDate <= currentYerestday)
{
result = Brushes.LightGray;
}
else if (inDate > currentYerestday && inDate < currentYerestday.AddHours(24))
{
result = Brushes.LightBlue;
}
else
{
result = Brushes.LightGreen;
}
return result;
}
//新增
private void Storage_AppointmentInserting(object sender, PersistentObjectCancelEventArgs e)
{
Appointment apt = e.Object as Appointment;
T_Service_FristAid_UserAppointmentDTO info = ConvertToAppoint(apt);
List<T_Service_FristAid_UserAppointmentDTO> list = new List<T_Service_FristAid_UserAppointmentDTO>();
list.Add(info);
string url = "api/service/T_Service_FristAid_UserAppointment";
ClientFactory<T_Service_FristAid_UserAppointmentDTO> httpClient = new HttpClientFactory<T_Service_FristAid_UserAppointmentDTO>();
Client<T_Service_FristAid_UserAppointmentDTO> client = httpClient.VisitFactory();
ListEntity<T_Service_FristAid_UserAppointmentDTO> t = client.Post(url, list);
e.Cancel = !t.Success;
if (t.Success)
{
DataBind();
}
}
//修改
private void Storage_AppointmentChanging(object sender, PersistentObjectCancelEventArgs e)
{
Appointment apt = e.Object as Appointment;
T_Service_FristAid_UserAppointmentDTO info = ConvertToAppoint(apt);
List<T_Service_FristAid_UserAppointmentDTO> list = new List<T_Service_FristAid_UserAppointmentDTO>();
list.Add(info);
string url = "api/service/T_Service_FristAid_UserAppointment/Update";
ClientFactory<T_Service_FristAid_UserAppointmentDTO> httpClient = new HttpClientFactory<T_Service_FristAid_UserAppointmentDTO>();
Client<T_Service_FristAid_UserAppointmentDTO> client = httpClient.VisitFactory();
ListEntity<T_Service_FristAid_UserAppointmentDTO> t = client.Post(url, list);
e.Cancel = !t.Success;
}
//删除
private void Storage_AppointmentDeleting(object sender, PersistentObjectCancelEventArgs e)
{
Appointment apt = e.Object as Appointment;
if (apt != null && apt.Id != null)
{
if (MessageBox.Show("您确认要删除该记录吗?") == DialogResult.OK)
{
string url = "api/service/T_Service_FristAid_UserAppointment?ids=" + apt.Id;
ClientFactory<T_Service_FristAid_UserAppointmentDTO> httpClient = new HttpClientFactory<T_Service_FristAid_UserAppointmentDTO>();
Client<T_Service_FristAid_UserAppointmentDTO> client = httpClient.VisitFactory();
var t = client.Delete(url);
e.Cancel = !t;
}
}
}
private T_Service_FristAid_UserAppointmentDTO ConvertToAppoint(Appointment apt)
{
T_Service_FristAid_UserAppointmentDTO userAppointmentInfo = new T_Service_FristAid_UserAppointmentDTO();
try
{
if (!string.IsNullOrEmpty(apt.Id + ""))
{
userAppointmentInfo.ID = int.Parse(apt.Id + "");
}
userAppointmentInfo.AllDay = apt.AllDay;
switch (apt.Type.ToString())
{
case "Pattern":
userAppointmentInfo.UserType = 1;//int.Parse(AppointmentType.Pattern.ToString());
break;
case "Normal":
userAppointmentInfo.UserType = 0;//.Parse(AppointmentType.Normal.ToString());
break;
case "Occurrence":
userAppointmentInfo.UserType = 2;// int.Parse(AppointmentType.Occurrence.ToString());
break;
case "ChangedOccurrence":
userAppointmentInfo.UserType = 3;// int.Parse(AppointmentType.ChangedOccurrence.ToString());
break;
case "DeletedOccurrence":
userAppointmentInfo.UserType = 4;// int.Parse(AppointmentType.DeletedOccurrence.ToString());
break;
default:
userAppointmentInfo.UserType = 0;// int.Parse(AppointmentType.Normal.ToString());
break;
}
userAppointmentInfo.StartDate = apt.Start;
userAppointmentInfo.EndDate = apt.End;
userAppointmentInfo.QueryStartDate = apt.Start;
userAppointmentInfo.QueryEndDate = apt.Start;
userAppointmentInfo.UserSubject = apt.Subject;
userAppointmentInfo.Location = apt.Location;
userAppointmentInfo.UserDescription = apt.Description;
userAppointmentInfo.UserStatus = int.Parse(apt.StatusKey + "");
userAppointmentInfo.Label = int.Parse(apt.LabelKey + "");
if (apt.ResourceId.ToString() == "DevExpress.XtraScheduler.EmptyResourceId")
{
userAppointmentInfo.ResourceId = 0;
}
else
{
userAppointmentInfo.ResourceId = int.Parse(apt.ResourceId + "");
}
//多人资源的信息
if (apt.ResourceIds != null)
{
AppointmentResourceIdCollectionContextElement item =
new AppointmentResourceIdCollectionContextElement(apt.ResourceIds);
userAppointmentInfo.ResourceIds = item.ValueToString();
//第二种
//AppointmentResourceIdCollectionXmlPersistenceHelper helper = new AppointmentResourceIdCollectionXmlPersistenceHelper(apt.ResourceIds);
//userAppointmentInfo.ResourceIds = helper.ToXml();
}
//日程重复信息
if (apt.RecurrenceInfo != null)
{
userAppointmentInfo.RecurrenceInfo = apt.RecurrenceInfo.ToXml();
}
//提醒信息
if (apt.Reminder != null)
{
userAppointmentInfo.ReminderInfo = ReminderCollectionXmlPersistenceHelper.CreateSaveInstance(apt).ToXml();
}
userAppointmentInfo.TimeZoneId = apt.TimeZoneId;
return userAppointmentInfo;
}
catch (Exception e)
{
PublicClass.WriteErrorLog(this.Name, e.Message);
return userAppointmentInfo;
}
}
private void schedulerControl1_EditAppointmentFormShowing_1(object sender, AppointmentFormEventArgs e)
{
SchedulerControl scheduler = ((SchedulerControl)(sender));
CustomAppointmentForm1 form = new CustomAppointmentForm1(scheduler, e.Appointment, e.OpenRecurrenceForm);
try
{
e.DialogResult = form.ShowDialog();
e.Handled = true;
}
finally
{
form.Dispose();
}
}
}
}