397 lines
19 KiB
C#
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();
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|