Procházet zdrojové kódy

PRS DESKTOP - email templates

Nick-PRSDigital@bitbucket.org před 2 roky
rodič
revize
6edbe8b5d5

+ 1 - 2
prs.classes/Entities/Job/Requisitions/JobRequisitionItem.cs

@@ -71,8 +71,7 @@ namespace Comal.Classes
 
         [EnumLookupEditor(typeof(JobRequisitionItemStatus))]      
         public JobRequisitionItemStatus Status { get; set; }
-
-        [NullEditor(Visible = Visible.Optional)] //currently no way to disable editor but we need the columns
+       
         public PurchaseOrderItemLink PurchaseOrderItem { get; set; }
 
         [NullEditor]

+ 89 - 53
prs.desktop/MainWindow.xaml.cs

@@ -521,8 +521,7 @@ namespace PRSDesktop
                     () =>
                     {
                         ReportUtils.ExportDefinitions.Clear();
-                        ReportUtils.ExportDefinitions.Add(new ReportExportDefinition("Email Report", PRSDesktop.Resources.email, ReportExportType.PDF,
-                            DoEmailReport));
+                        ReportUtils.ExportDefinitions.AddRange(AddTemplateDefinitions());
 
                         //DockManager.SidePanelSize = OutstandingDailyReports(false) ? 0.00F : 30.00F;
 
@@ -854,7 +853,7 @@ namespace PRSDesktop
                         AddSetupAction(HumanResourcesTab, "Activities", ActivityMenu_Click, PRSDesktop.Resources.quality,
                             Security.CanView<Activity>());
                         AddSetupAction(HumanResourcesTab, "Qualifications", QualificationMenu_Click, PRSDesktop.Resources.certificate,
-                            Security.CanView<Qualification>());                        
+                            Security.CanView<Qualification>());
                         AddSetupAction(HumanResourcesTab, "Rosters", RosterMenu_Click, PRSDesktop.Resources.assignments,
                             Security.CanView<EmployeeRoster>());
 
@@ -1075,6 +1074,80 @@ namespace PRSDesktop
             );
         }
 
+        private IEnumerable<ReportExportDefinition> AddTemplateDefinitions()
+        {
+            if (CurrentPanel == null)
+                return new List<ReportExportDefinition>() { new ReportExportDefinition("Email Report", PRSDesktop.Resources.email, ReportExportType.PDF,
+                            DoEmailReport)};
+            var model = CurrentPanel.DataModel(Selection.Selected);
+            var templates = new Client<DataModelTemplate>().Query(new Filter<DataModelTemplate>(x => x.Model).IsEqualTo(model.Name)
+                .And(x => x.Visible).IsEqualTo(true));
+
+            if (templates.Rows.Any())
+            {
+                List<ReportExportDefinition> list = new List<ReportExportDefinition>();
+                foreach (CoreRow row in templates.Rows)
+                {
+                    Action<DataModel, byte[]> action = new Action<DataModel, byte[]>((model, data) =>
+                    {
+                        DoEmailAction(model, data, row.Get<DataModelTemplate, string>(x => x.Name));
+                    });
+                    list.Add(new ReportExportDefinition("Email Report", CreateControl(row.Get<DataModelTemplate, string>(x => x.Name)), ReportExportType.PDF, action));
+                }
+                return list;
+            }
+            else
+                return new List<ReportExportDefinition>() { new ReportExportDefinition("Email Report", PRSDesktop.Resources.email, ReportExportType.PDF,
+                            DoEmailReport)};
+        }
+
+        private ContentControl CreateControl(string caption)
+        {
+            Frame frame = new Frame();
+            frame.Padding = new Thickness(0);
+            frame.Margin = new Thickness(0);
+
+            Grid grid = new Grid();
+            grid.Margin = new Thickness(0);
+            grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(4, GridUnitType.Star) });
+            grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });         
+
+            var img = GetImage(PRSDesktop.Resources.email);
+            img.SetValue(Grid.RowProperty, 0);
+            img.Margin = new Thickness(0);
+            grid.Children.Add(img);
+
+            var lbl = new System.Windows.Controls.Label();
+            lbl.Content = caption;
+            lbl.Margin = new Thickness(0);
+            lbl.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Center;
+            lbl.SetValue(Grid.RowProperty, 1);
+            
+            grid.Children.Add(lbl);
+
+            frame.Content = grid;
+
+            return frame;
+        }
+
+        private System.Windows.Controls.Image GetImage(Bitmap bitmap)
+        {
+            return new System.Windows.Controls.Image
+            {
+                Source = bitmap.AsBitmapImage(),
+                Height = 32.0F,
+                Width = 32.0F,
+                Margin = new Thickness(10)
+            };
+        }
+
+        private void DoEmailAction(DataModel model, byte[] data, string templateName)
+        {
+            var template = new Client<DataModelTemplate>().Query(new Filter<DataModelTemplate>(x => x.Name).IsEqualTo(templateName)).Rows.FirstOrDefault();
+
+            ParseTemplateAndCreateEmail(template, model, data);
+        }
+
         private void SetupDock<TSecurityDescriptor>(LayoutAnchorable layout, IDockPanel dock)
             where TSecurityDescriptor : ISecurityDescriptor, new()
         {
@@ -1232,6 +1305,9 @@ namespace PRSDesktop
                 var panel = new T();
                 CurrentPanel = panel;
 
+                ReportUtils.ExportDefinitions.Clear();
+                ReportUtils.ExportDefinitions.AddRange(AddTemplateDefinitions());
+
                 InitializePanelProperties(panel);
 
                 CurrentPanel.IsReady = false;
@@ -1803,57 +1879,17 @@ namespace PRSDesktop
         #region Email
 
         private void DoEmailReport(DataModel model, byte[] data)
-        {           
-            CheckTemplates(model, data);           
-        }
-
-        private void CheckTemplates(DataModel model, byte[] data)
         {
             string attachmentName = DetermineName(model);
-
-            var templates = new Client<DataModelTemplate>().Query(new Filter<DataModelTemplate>(x => x.Model).IsEqualTo(model.Name)
-                .And(x => x.Visible).IsEqualTo(true));
-            if (templates.Rows.Any())
-            {
-                var context = new ContextMenu();
-                foreach (var row in templates.Rows)
-                {
-                    var menu = new MenuItem
-                    {
-                        Header = row.Get<DataModelTemplate, string>(x => x.Name),
-                        Tag = row
-                    };
-                    menu.Click += (o, args) =>
-                    {
-                        var chosenrow = ((MenuItem)o).Tag as CoreRow;
-                        try
-                        {
-                            ParseTemplateAndCreateEmail(chosenrow, model, data);
-                        }
-                        catch (Exception err)
-                        {
-                            MessageBox.Show("Unable to Parse Template!\n\n" + err.Message);
-                        }
-                    };
-                    context.Items.Add(menu);
-                }
-                context.IsOpen = true;
-            }
-            else
-            {
-                EmailUtils.CreateEMLFile(attachmentName, data, App.EmployeeEmail, "Emailing report for " + attachmentName);
-            }                
+            EmailUtils.CreateEMLFile(attachmentName, data, App.EmployeeEmail, "Emailing report for " + attachmentName);
         }
 
-        private void ParseTemplateAndCreateEmail(CoreRow chosenrow, DataModel model, byte[] data)
+        private void ParseTemplateAndCreateEmail(CoreRow row, DataModel model, byte[] data)
         {
-            var to = chosenrow.Get<DataModelTemplate, string>(x => x.To);
-            var Subject = chosenrow.Get<DataModelTemplate, string>(x => x.Subject);
-            
-            var attachmentName = chosenrow.Get<DataModelTemplate, string>(x => x.AttachmentName);
-            var template = chosenrow.Get<DataModelTemplate, string>(x => x.Template);
-
-            var body = DataModelUtils.ParseTemplate(model, template);
+            var to = DataModelUtils.ParseTemplate(model, row.Get<DataModelTemplate, string>(x => x.To)).Replace("\n", "").Replace("\r", "");
+            var Subject = DataModelUtils.ParseTemplate(model, row.Get<DataModelTemplate, string>(x => x.Subject)).Replace("\n", "").Replace("\r", "");
+            var attachmentName = DataModelUtils.ParseTemplate(model, row.Get<DataModelTemplate, string>(x => x.AttachmentName)).Replace("\n", "").Replace("\r", "");
+            var body = DataModelUtils.ParseTemplate(model, row.Get<DataModelTemplate, string>(x => x.Template));
 
             if (string.IsNullOrWhiteSpace(attachmentName))
                 attachmentName = model.Name;
@@ -2170,7 +2206,7 @@ namespace PRSDesktop
             var list = new MasterList(typeof(Qualification));
             list.ShowDialog();
         }
-        
+
         private void RosterMenu_Click()
         {
             var list = new MasterList(typeof(EmployeeRoster));
@@ -2194,8 +2230,8 @@ namespace PRSDesktop
         private void StockMovements_Checked(object sender, RoutedEventArgs e)
         {
             LoadWindow<StockMovementPanel>((Fluent.Button)sender);
-        }        
-        
+        }
+
         private void StockSummaryButton_Clicked(object sender, RoutedEventArgs e)
         {
             LoadWindow<StockSummaryPanel>((Fluent.Button)sender);
@@ -2388,7 +2424,7 @@ namespace PRSDesktop
         //     var list = new MasterList(typeof(Roster));
         //     list.ShowDialog();
         // }
-        
+
         private void OvertimeRulesButton_Click()
         {
             var list = new MasterList(typeof(OvertimeRule));

+ 3 - 0
prs.desktop/Utils/DataModelUtils.cs

@@ -10,6 +10,9 @@ namespace PRSDesktop
     {
         public static string ParseTemplate(DataModel model, string data)
         {
+            if (string.IsNullOrWhiteSpace(data))
+                return "";
+
             var template = Template.Parse(data);
             if (template.HasErrors) throw new Exception(string.Join("\n", template.Messages));
 

+ 2 - 2
prs.shared/EmailUtils.cs

@@ -94,7 +94,7 @@ namespace PRS.Shared
             if (string.IsNullOrWhiteSpace(body))
                 body = "Enter message";
             var message = new MailMessage(from, to, subject, body);                  
-            message.IsBodyHtml = true;
+            message.IsBodyHtml = false;
 
             return message;
         }
@@ -108,7 +108,7 @@ namespace PRS.Shared
             if (!string.IsNullOrWhiteSpace(user.EmailAddress))
                 return user.EmailAddress;
             else
-                MessageBox.Show("Unable to send email. Current User Email Address is blank - please fill in", "Error");
+                MessageBox.Show("Current User Email Address is blank - please fill in (Human Resources -> User Accounts -> Choose your User -> Email Settings -> Email Address", "Error");
 
             return "";