or
using System; |
using System.Collections.Generic; |
using System.Linq; |
using System.Text; |
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 Telerik.Windows.Controls.Charting; |
using AppointmentScheduler; |
using Telerik.Windows.Data; |
using System.Globalization; |
using Telerik.Windows.Controls; |
namespace AppointmentSchedulerUI |
{ |
/// <summary> |
/// Interaction logic for ChartWorkingHours.xaml |
/// </summary> |
public partial class ChartWorkingHours : Window |
{ |
private AppointmentScheduler.AppointmentScheduler m_AppointmentScheduler; |
private Dictionary<string, Employee> m_Employees; |
public ChartWorkingHours(Dictionary<string, Employee> employees, AppointmentScheduler.AppointmentScheduler appointmentScheduler) |
{ |
m_AppointmentScheduler = appointmentScheduler; |
m_Employees = employees; |
InitializeComponent(); |
CountriesBox.ItemsSource = employees.Values; |
m_CB_Year.ItemsSource = new int[]{2009, 2010, 2011, 2012}; |
List<string> monthNames = new List<string>(); |
monthNames.Add("Komplettes Jahr"); |
for (int i=1; i<=12; i++) |
monthNames.Add(CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i)); |
m_CB_Month.ItemsSource = monthNames; |
m_RadChart.DefaultView.ChartLegend.Header = ""; |
m_RadChart.DefaultView.ChartLegendPosition = Dock.Bottom; |
SeriesMapping seriesMapping1 = new SeriesMapping(); |
seriesMapping1.LegendLabel = "Abgerechnete Arbeitsstunden"; |
seriesMapping1.SeriesDefinition = new BarSeriesDefinition(); |
ItemMapping itemMapping1 = new ItemMapping(); |
itemMapping1.DataPointMember = DataPointMember.YValue; |
itemMapping1.FieldName = "WorkedHours"; |
ItemMapping itemMapping2 = new ItemMapping(); |
itemMapping2.DataPointMember = DataPointMember.XCategory; |
itemMapping2.FieldName = "ShortName"; |
seriesMapping1.ItemMappings.Add(itemMapping1); |
seriesMapping1.ItemMappings.Add(itemMapping2); |
m_RadChart.SeriesMappings.Add(seriesMapping1); |
SeriesMapping seriesMapping2= new SeriesMapping(); |
seriesMapping2.LegendLabel = "Bezahlte Arbeitsstunden"; |
seriesMapping2.SeriesDefinition = new BarSeriesDefinition(); |
ItemMapping itemMapping3 = new ItemMapping(); |
itemMapping3.DataPointMember = DataPointMember.YValue; |
itemMapping3.FieldName = "PaidHours"; |
ItemMapping itemMapping4 = new ItemMapping(); |
itemMapping4.DataPointMember = DataPointMember.XCategory; |
itemMapping4.FieldName = "ShortName"; |
seriesMapping2.ItemMappings.Add(itemMapping3); |
seriesMapping2.ItemMappings.Add(itemMapping4); |
m_RadChart.SeriesMappings.Add(seriesMapping2); |
m_CB_Year.SelectedItem = DateTime.Now.Year; |
m_CB_Month.SelectedIndex = 0; |
m_CB_Year.SelectionChanged +=new SelectionChangedEventHandler(TimeSpanModified); |
m_CB_Month.SelectionChanged += new SelectionChangedEventHandler(TimeSpanModified); |
m_RadChart.DefaultView.ChartArea.ItemToolTipOpening += this.ChartItemToolTipOpening; |
UpdateData(); |
} |
private void ChartItemToolTipOpening(ItemToolTip2D tooltip, ItemToolTipEventArgs args) |
{ |
RadChart chart = new RadChart(); |
chart.Height = 200; |
chart.Width = 300; |
chart.DefaultView.ChartLegend.Visibility = System.Windows.Visibility.Collapsed; |
chart.DefaultView.ChartArea.AxisX.LayoutMode = AxisLayoutMode.Inside; |
string axisItemLabel = m_RadChart.DefaultView.ChartArea.AxisX.TickPoints[args.ItemIndex].Label; |
chart.DefaultView.ChartTitle.Content = string.Format("Quarterly Preview: {0}", axisItemLabel); |
chart.DefaultView.ChartArea.AxisY.DefaultLabelFormat = "C"; |
DataSeries series = new DataSeries(); |
series.Definition = new LineSeriesDefinition(); |
series.Definition.ShowItemLabels = false; |
//SeriesExtensions.FillWithSampleData(series, 4, (int)args.DataPoint.YValue); |
string[] quarters = new string[] { "Q1", "Q2", "Q3", "Q4" }; |
for (int i = 0; i < chart.DefaultView.ChartArea.AxisX.TickPoints.Count; i++) |
series[i].XCategory = quarters[i]; |
//for (int i = 0; i < series.Count; i++) |
// quarterlyRevenues[i] = series[i].YValue; |
chart.DefaultView.ChartArea.DataSeries.Add(series); |
tooltip.Content = chart; |
} |
private void UpdateData() |
{ |
int selectedYear = (int)m_CB_Year.SelectedItem; |
string selectedMonthString = (string)m_CB_Month.SelectedItem; |
bool wholeYear = false; |
int selectedMonth = 0; |
if (selectedMonthString == "Komplettes Jahr") |
wholeYear = true; |
else |
selectedMonth = DateTime.ParseExact(selectedMonthString, "MMMM", CultureInfo.CurrentCulture).Month; |
DateTime startTime; |
DateTime endTime; |
if (wholeYear) |
{ |
startTime = new DateTime(selectedYear, 1, 1); |
endTime = new DateTime(selectedYear + 1, 1, 1); |
} |
else |
{ |
startTime = new DateTime(selectedYear, selectedMonth, 1); |
endTime = new DateTime(selectedYear, selectedMonth, 1).AddMonths(1); |
} |
List<ChartData> chartData = new List<ChartData>(); |
foreach (Employee emp in m_Employees.Values) |
{ |
double workedHours = m_AppointmentScheduler.GetWorkedHours(startTime, endTime, emp); |
double paidHours = m_AppointmentScheduler.GetPaidHours(startTime, endTime, emp); |
chartData.Add(new ChartData(emp.FirstName, emp.LastName, workedHours, paidHours)); |
} |
m_RadChart.ItemsSource = chartData; |
} |
private void CheckBox_Checked(object sender, RoutedEventArgs e) |
{ |
CheckBox sourceCheckbox = e.OriginalSource as CheckBox; |
Queue<ChartFilterDescriptor> filtersToRemove = new Queue<ChartFilterDescriptor>(); |
foreach (ChartFilterDescriptor descriptor in m_RadChart.FilterDescriptors) |
{ |
if (descriptor.Value.Equals(sourceCheckbox.Content)) |
filtersToRemove.Enqueue(descriptor); |
} |
foreach (ChartFilterDescriptor descriptor in filtersToRemove) |
m_RadChart.FilterDescriptors.Remove(descriptor); |
} |
private void CheckBox_Unchecked(object sender, RoutedEventArgs e) |
{ |
CheckBox sourceCheckbox = e.OriginalSource as CheckBox; |
m_RadChart.FilterDescriptors.Add(new ChartFilterDescriptor("FullName", typeof(string), FilterOperator.IsNotEqualTo, sourceCheckbox.Content)); |
} |
private void TimeSpanModified(object sender, SelectionChangedEventArgs e) |
{ |
UpdateData(); |
} |
} |
} |
try
{
OpenFileDialog fDialog = (OpenFileDialog)sender;
switch (System.IO.Path.GetExtension(fDialog.FileName))
{
case ".docx":
docProvider = new DocxFormatProvider();
break;
case ".rtf":
docProvider = new RtfFormatProvider();
break;
case ".txt":
docProvider = new TxtFormatProvider();
break;
case ".html":
docProvider = new HtmlFormatProvider();
break;
default:
break;
}
using (FileStream fStream = new FileStream(fDialog.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
rDoc = docProvider.Import(fStream);
}
rDoc.LayoutMode = DocumentLayoutMode.Paged;
emailForm1.Document = rDoc;
}
protected
void
SubmitEmail(
object
sender, RoutedEventArgs e)
{
MailMessage message =
new
MailMessage();
byte
[] emailBytes =
null
;
string
bodyText =
string
.Empty;
SmtpClient mailServer =
new
SmtpClient(
"mail.pentegra.com"
);
mailServer.UseDefaultCredentials =
true
;
this
.emailForm1.Document.MailMergeDataSource.ItemsSource = mergeFields;
//here's where I change the formatprovider from docx to rtf. if I use docx, the email text comes out as a bunch of symbols
docProvider =
new
RtfFormatProvider();
//this is just a datatable with a list of emails that gets iterated through to send the emails.
for
(
int
i = 0; i < _dtMerge.Rows.Count; i++)
{
message =
new
MailMessage();
foreach
(
string
s
in
lstAttachments)
{
message.Attachments.Add(
new
Attachment(s));
}
message.From = _fromAddress;
emailForm1.Document.MailMergeDataSource.MoveToIndex(i);
emailBytes = docProvider.Export(emailForm1.Document.MailMergeCurrentRecord());
//I convert the byte array into the email body test here.
StringBuilder sb =
new
StringBuilder();
using
(StreamReader sReader =
new
StreamReader(mStream))
{
while
(!(sReader.EndOfStream))
{
sb.Append(sReader.ReadLine() + Environment.NewLine);
}
}
bodyText = sb.ToString();
message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(bodyText,
null
,
"text/html"
));
message.To.Clear();
message.To.Add(
new
MailAddress(
"x@xx.com"
));
mailServer.Send(message);
}