Explorar el Código

PRS MOBILE - changes to Assignments + refactor digital forms renderer

Nick hace 2 años
padre
commit
99ffe086e6

+ 17 - 0
prs.classes/SecurityDescriptors/Assignment_Descriptors.cs

@@ -0,0 +1,17 @@
+using InABox.Core;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Comal.Classes
+{
+    [Caption("Edit Assignment Bookings")]
+    public class CanEditAssignmentBookings : DisabledSecurityDescriptor<CoreLicense, Assignment>
+    {
+    }
+
+    [Caption("Edit Assignment Times")]
+    public class CanEditAssignmentActualTimes : DisabledSecurityDescriptor<CoreLicense, Assignment>
+    {
+    }
+}

+ 1 - 1
prs.mobile/comal.timesheets.Android/Resources/Resource.designer.cs

@@ -14,7 +14,7 @@ namespace comal.timesheets.Droid
 {
 	
 	
-	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.0.0.73")]
+	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.1.0.5")]
 	public partial class Resource
 	{
 		

+ 42 - 42
prs.mobile/comal.timesheets/Assignments/AssignmentDetails.xaml.cs

@@ -10,6 +10,7 @@ using Syncfusion.Drawing;
 using Xamarin.Forms;
 using Xamarin.Forms.Xaml;
 using XF.Material.Forms.UI.Dialogs;
+using Security = InABox.Core.Security;
 
 namespace comal.timesheets
 {
@@ -17,23 +18,23 @@ namespace comal.timesheets
     public class AssignmentDetailsChangedArgs : EventArgs
     {
         public string Property { get; }
-        
+
         public AssignmentDetailsChangedArgs(String property)
         {
             Property = property;
-        }    
+        }
     }
-    
+
     public delegate void AssignmentDetailsChangedDelegate(object sender, AssignmentDetailsChangedArgs args);
-    
+
     [XamlCompilation(XamlCompilationOptions.Compile)]
     public partial class AssignmentDetails : ContentView, IAssignmentPage
     {
 
         public event AssignmentDetailsChangedDelegate OnDetailsChanged;
-        
+
         public AssignmentEditDataModel DataModel => BindingContext as AssignmentEditDataModel;
-        
+
         public AssignmentDetails()
         {
             InitializeComponent();
@@ -42,25 +43,24 @@ namespace comal.timesheets
         public void Load()
         {
             bool open = DataModel.Item.Completed.IsEmpty();
-            
+
             Completed.Text = open
                 ? "Complete"
                 : InABox.Core.Security.CanEdit<Assignment>() ? "Re-Open" : $"Completed {DataModel.Item.Completed:dd/MM/yy}";
-            
-            Subject.IsEnabled = open && InABox.Core.Security.CanEdit<Assignment>();
-            ActualStart.IsEnabled = open && InABox.Core.Security.CanEdit<Assignment>();
-            ActualFinish.IsEnabled = open && InABox.Core.Security.CanEdit<Assignment>();
-            BookedStart.IsEnabled = open && InABox.Core.Security.CanEdit<Assignment>();
-            BookedFinish.IsEnabled = open && InABox.Core.Security.CanEdit<Assignment>();
-            ActualStartNowBtn.IsEnabled = open && InABox.Core.Security.CanEdit<Assignment>();
-            ActualFinishNowBtn.IsEnabled = open && InABox.Core.Security.CanEdit<Assignment>();
-            Job.IsEnabled = open && InABox.Core.Security.CanEdit<Assignment>();
-            Task.IsEnabled = open && InABox.Core.Security.CanEdit<Assignment>();
-            Activity.IsEnabled = open && InABox.Core.Security.CanEdit<Assignment>();
-            Description.IsEnabled = open && InABox.Core.Security.CanEdit<Assignment>();
-            Completed.IsEnabled = open || InABox.Core.Security.CanEdit<Assignment>();
-        }
-        
+
+            Subject.IsEnabled = open && Security.CanEdit<Assignment>();
+            ActualStart.IsEnabled = open && Security.IsAllowed<CanEditAssignmentActualTimes>();
+            ActualFinish.IsEnabled = open && Security.IsAllowed<CanEditAssignmentActualTimes>();
+            BookedStart.IsEnabled = open && Security.IsAllowed<CanEditAssignmentBookings>();
+            BookedFinish.IsEnabled = open && Security.IsAllowed<CanEditAssignmentBookings>();
+            AsBookedBtn.IsEnabled = open && Security.IsAllowed<CanEditAssignmentActualTimes>();
+            Job.IsEnabled = open && Security.CanEdit<Assignment>();
+            Task.IsEnabled = open && Security.CanEdit<Assignment>();
+            Activity.IsEnabled = open && Security.CanEdit<Assignment>();
+            Description.IsEnabled = open && Security.CanEdit<Assignment>();
+            Completed.IsEnabled = open || Security.CanEdit<Assignment>();
+        }
+
         private async void Activity_Clicked(object sender, EventArgs e)
         {
             try
@@ -82,7 +82,7 @@ namespace comal.timesheets
                         DataModel.Item.ActivityID = row.Get<EmployeeActivity, Guid>(c => c.Activity.ID);
                         DataModel.Item.ActivityCode = row.Get<EmployeeActivity, String>(c => c.Activity.Code);
                         DataModel.Item.ActivityDescription = row.Get<EmployeeActivity, String>(c => c.Activity.Description);
-                        OnDetailsChanged?.Invoke(this,new AssignmentDetailsChangedArgs("Activity"));
+                        OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("Activity"));
                     });
                 };
                 Navigation.PushAsync(page);
@@ -90,8 +90,8 @@ namespace comal.timesheets
             }
             catch
             {
-                
-            }            
+
+            }
         }
 
         private void Job_Clicked(object sender, EventArgs e)
@@ -104,8 +104,8 @@ namespace comal.timesheets
                         new Filter<Job>(x => x.JobStatus.Active).IsEqualTo(true),
                         new Expression<Func<Job, object>>[]
                             { x => x.JobNumber, x => x.Name },
-                        new Expression<Func<Job, object>>[] { x => x.ID, x=>x.SiteAddress.Location.Latitude, x=>x.SiteAddress.Location.Longitude },
-                        new SortOrder<Job>(x => x.JobNumber,SortDirection.Descending)
+                        new Expression<Func<Job, object>>[] { x => x.ID, x => x.SiteAddress.Location.Latitude, x => x.SiteAddress.Location.Longitude },
+                        new SortOrder<Job>(x => x.JobNumber, SortDirection.Descending)
                     )
                 );
                 page.OnItemSelected += (row) =>
@@ -119,7 +119,7 @@ namespace comal.timesheets
                             (float)row.Get<Job, double>(c => c.SiteAddress.Location.Longitude),
                             (float)row.Get<Job, double>(c => c.SiteAddress.Location.Latitude)
                         );
-                        OnDetailsChanged?.Invoke(this,new AssignmentDetailsChangedArgs("Job"));
+                        OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("Job"));
                     });
                 };
                 Navigation.PushAsync(page);
@@ -127,10 +127,10 @@ namespace comal.timesheets
             }
             catch
             {
-                
-            }            
-        }        
-        
+
+            }
+        }
+
         private void Task_Clicked(object sender, EventArgs e)
         {
             try
@@ -141,7 +141,7 @@ namespace comal.timesheets
                         new Filter<Kanban>(x => x.Completed).IsEqualTo(DateTime.MinValue),
                         new Expression<Func<Kanban, object>>[]
                             { x => x.Number, x => x.Title },
-                        new Expression<Func<Kanban, object>>[] { x => x.ID},
+                        new Expression<Func<Kanban, object>>[] { x => x.ID },
                         new SortOrder<Kanban>(x => x.Number, SortDirection.Descending)
                     )
                 );
@@ -152,7 +152,7 @@ namespace comal.timesheets
                         DataModel.Item.TaskID = row.Get<Kanban, Guid>(c => c.ID);
                         DataModel.Item.TaskNumber = row.Get<Kanban, int>(c => c.Number);
                         DataModel.Item.TaskName = row.Get<Kanban, String>(c => c.Title);
-                        OnDetailsChanged?.Invoke(this,new AssignmentDetailsChangedArgs("Task"));
+                        OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("Task"));
                     });
                 };
                 Navigation.PushAsync(page);
@@ -160,8 +160,8 @@ namespace comal.timesheets
             }
             catch
             {
-                
-            }            
+
+            }
         }
 
         private async void Complete_Clicked(object sender, EventArgs e)
@@ -177,11 +177,11 @@ namespace comal.timesheets
             bool bOpenForms = DataModel.Forms.Any(x => !x.Completed);
             if (bOpenForms)
             {
-                await MaterialDialog.Instance.AlertAsync("Please finish all open forms before completing this assignment","Open Forms Found");
+                await MaterialDialog.Instance.AlertAsync("Please finish all open forms before completing this assignment", "Open Forms Found");
                 return;
             }
-            bool bConfirm = await MaterialDialog.Instance.ConfirmAsync(message: "Complete Assignment?", 
-                confirmingText: "Yes", 
+            bool bConfirm = await MaterialDialog.Instance.ConfirmAsync(message: "Complete Assignment?",
+                confirmingText: "Yes",
                 dismissiveText: "No") == true;
             if (bConfirm)
             {
@@ -214,7 +214,7 @@ namespace comal.timesheets
 
         private void BookedStart_OnUnfocused(object sender, FocusEventArgs e)
         {
-            OnDetailsChanged?.Invoke(this,new AssignmentDetailsChangedArgs("BookedStart"));
+            OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("BookedStart"));
         }
 
         private void BookedFinish_OnUnfocused(object sender, FocusEventArgs e)
@@ -238,11 +238,11 @@ namespace comal.timesheets
             if (Description.IsFocused)
                 OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("Description"));
         }
-        
+
         private void Subject_OnTextChanged(object sender, TextChangedEventArgs e)
         {
             if (Subject.IsFocused)
-                OnDetailsChanged?.Invoke(this,new AssignmentDetailsChangedArgs("Subject"));
+                OnDetailsChanged?.Invoke(this, new AssignmentDetailsChangedArgs("Subject"));
         }
     }
 }

+ 50 - 3
prs.mobile/comal.timesheets/Assignments/AssignmentList.xaml

@@ -89,14 +89,14 @@
                 </Image>
                 
                 <DatePicker x:Name="DatePicker" IsVisible="False" DateSelected="DatePicker_OnDateSelected" />
-                
+
                 <Image 
                     x:Name="SelectEmployees" 
                     Aspect="AspectFit" 
                     WidthRequest="30" 
                     HorizontalOptions="End" 
                     Margin="5">
-                    
+
                     <Image.Source>
                         <OnPlatform x:TypeArguments="ImageSource">
                             <OnPlatform.Platforms>
@@ -111,7 +111,54 @@
                     </Image.GestureRecognizers>
 
                 </Image>
-                
+
+                <Image 
+                    x:Name="CollapseButton" 
+                    Aspect="AspectFit" 
+                    WidthRequest="30" 
+                    HorizontalOptions="End" 
+                    Margin="5">
+                    
+                    <Image.Source>
+                        <OnPlatform x:TypeArguments="ImageSource">
+                            <OnPlatform.Platforms>
+                                <On Platform="iOS" Value="downarrowwhite"/>
+                                <On Platform="Android" Value="downarrowwhite"/>
+                            </OnPlatform.Platforms>
+                        </OnPlatform>
+                    </Image.Source>
+
+                    <Image.GestureRecognizers>
+                        <TapGestureRecognizer Tapped="CollapseButton_Tapped"/>
+                    </Image.GestureRecognizers>
+
+                </Image>
+
+                <Image 
+                    x:Name="ExpandButton" 
+                    Aspect="AspectFit" 
+                    WidthRequest="30" 
+                    HorizontalOptions="End" 
+                    IsVisible="false"
+                    Margin="5">
+
+                    <Image.Source>
+                        <OnPlatform x:TypeArguments="ImageSource">
+                            <OnPlatform.Platforms>
+                                <On Platform="iOS" Value="rightarrowwhite"/>
+                                <On Platform="Android" Value="rightarrowwhite"/>
+                            </OnPlatform.Platforms>
+                        </OnPlatform>
+                    </Image.Source>
+
+                    <Image.GestureRecognizers>
+                        <TapGestureRecognizer Tapped="ExpandButton_Tapped"/>
+                    </Image.GestureRecognizers>
+
+                </Image>
+
+
+
             </StackLayout>
         </Grid>
     </NavigationPage.TitleView>

+ 20 - 0
prs.mobile/comal.timesheets/Assignments/AssignmentList.xaml.cs

@@ -79,6 +79,26 @@ namespace comal.timesheets
             Reload();
         }
 
+        private void CollapseButton_Tapped(object sender, EventArgs e)
+        {
+            CollapseButton.IsVisible = false;
+            ExpandButton.IsVisible = true;
+
+            JobColumn.Width = 0;
+
+            Refresh();
+        }
+
+        private void ExpandButton_Tapped(object sender, EventArgs e)
+        {
+            CollapseButton.IsVisible = true;
+            ExpandButton.IsVisible = false;
+
+            JobColumn.Width = 150;
+
+            Refresh();
+        }
+
         private void RefreshLookups()
         {
             if (_lookuptype == AssignmentLookupType.Tasks)

+ 57 - 52
prs.mobile/comal.timesheets/DigitalForms/Renderer/QAFormViewer.cs

@@ -187,82 +187,80 @@ namespace comal.timesheets.QAForms
         #region Load Element Methods
         private void LoadViewAccordingToElement(DFLayoutControl element)
         {
-            View view = null;
             isSecure = false;
-            string value = "";
 
             if (element is DFLayoutBooleanField)
             {
-                var tuple = LoadCustomBoolean(view, element, value);
+                var tuple = LoadCustomBoolean(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutLabel)
             {
-                var tuple = LoadLabel(view, element);
+                var tuple = LoadLabel(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutStringField || element is DFLayoutIntegerField || element is DFLayoutDoubleField)
             {
-                var tuple = LoadEditor(view, element, value);
+                var tuple = LoadEditor(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutDateField)
             {
-                var tuple = LoadDatePicker(view, element, value);
+                var tuple = LoadDatePicker(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutTimeField)
             {
-                var tuple = LoadTimePicker(view, element, value);
+                var tuple = LoadTimePicker(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutOptionField)
             {
-                var tuple = LoadOptionPicker(view, element, value);
+                var tuple = LoadOptionPicker(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutImage)
             {
-                var tuple = LoadImage(view, element);
+                var tuple = LoadImage(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutLookupField)
             {
-                var tuple = LoadLookupPicker(view, element, value);
+                var tuple = LoadLookupPicker(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutSignaturePad)
             {
-                var tuple = LoadSignaturePad(view, element, value);
+                var tuple = LoadSignaturePad(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutEmbeddedImage)
             {
-                var tuple = LoadEmbeddedImage(view, element, value);
+                var tuple = LoadEmbeddedImage(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutMultiImage)
             {
-                var tuple = LoadMultiImage(view, element, value);
+                var tuple = LoadMultiImage(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutMultiSignaturePad)
             {
-                var tuple = LoadMultiSignaturePad(view, element, value);
+                var tuple = LoadMultiSignaturePad(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutAddTaskField)
             {
-                var tuple = LoadAddTaskField(view, element, value);
+                var tuple = LoadAddTaskField(element);
                 FormatAndAddView(tuple.Item1, element, tuple.Item2);
             }
             else if (element is DFLayoutHeader)
             {
-                FormatAndAddView(LoadHeader(view, element), element, false);
+                FormatAndAddView(LoadHeader(element), element, false);
             }
         }
 
-        private View LoadHeader(View view, DFLayoutControl element)
+        private View LoadHeader(DFLayoutControl element)
         {
             DFLayoutHeader dFLayoutHeader = (DFLayoutHeader)element;
             DigitalFormsHeader header = new DigitalFormsHeader(dFLayoutHeader.Collapsed);
@@ -276,8 +274,7 @@ namespace comal.timesheets.QAForms
                 AdjustHeaderSection(header, bCollapsed);
             };
 
-            view = header;
-            return view;
+            return header;
         }
 
         private DigitalFormsHeader AddNumberToHeader(DigitalFormsHeader header)
@@ -366,8 +363,9 @@ namespace comal.timesheets.QAForms
             }
         }
 
-        private Tuple<View, Boolean> LoadCustomBoolean(View view, DFLayoutControl element, String value)
+        private Tuple<View, Boolean> LoadCustomBoolean(DFLayoutControl element)
         {
+            string value = "";
             rbGroup++;
             CustomBoolean item = new CustomBoolean(rbGroup);
             DFLayoutBooleanField dfLayoutBooleanField = element as DFLayoutBooleanField;
@@ -398,12 +396,11 @@ namespace comal.timesheets.QAForms
             {
                 dfLayout.ChangeField(dfLayoutBooleanField.Name);
             };
-            view = item;
-
-            return new Tuple<View, Boolean>(view, dfLayoutBooleanField.Properties.Required);
+            
+            return new Tuple<View, Boolean>(item, dfLayoutBooleanField.Properties.Required);
         }
 
-        private Tuple<View, Boolean> LoadLabel(View view, DFLayoutControl element)
+        private Tuple<View, Boolean> LoadLabel(DFLayoutControl element)
         {
             DFLayoutLabel label = element as DFLayoutLabel;
             Label item = new Label();
@@ -418,13 +415,14 @@ namespace comal.timesheets.QAForms
             {
                 item.HorizontalOptions = LayoutOptions.CenterAndExpand;
                 item.HorizontalTextAlignment = TextAlignment.Center;
-            }
-            view = item;
-            return new Tuple<View, Boolean>(view, false);
+            }        
+            return new Tuple<View, Boolean>(item, false);
         }
 
-        private Tuple<View, Boolean> LoadEditor(View view, DFLayoutControl element, string value)
+        private Tuple<View, Boolean> LoadEditor(DFLayoutControl element)
         {
+            string value = "";
+            View view = null;
             Editor item = new Editor();
             item.AutoSize = EditorAutoSizeOption.TextChanges;
             var isrequired = false;
@@ -527,8 +525,9 @@ namespace comal.timesheets.QAForms
             return new Tuple<View, Boolean>(view, isrequired);
         }
 
-        private Tuple<View, Boolean> LoadDatePicker(View view, DFLayoutControl element, string value)
+        private Tuple<View, Boolean> LoadDatePicker(DFLayoutControl element)
         {
+            string value = "";
             DFLayoutDateField dfLayoutDateField = element as DFLayoutDateField;
             DatePicker item = new DatePicker();
             item.Format = "dd MMM yyyy";
@@ -549,14 +548,14 @@ namespace comal.timesheets.QAForms
             item.DateSelected += (object sender, DateChangedEventArgs e) =>
             {
                 dfLayout.ChangeField(dfLayoutDateField.Name);
-            };
-            view = item;
+            };           
 
-            return new Tuple<View, Boolean>(view, dfLayoutDateField.Properties.Required);
+            return new Tuple<View, Boolean>(item, dfLayoutDateField.Properties.Required);
         }
 
-        private Tuple<View, Boolean> LoadTimePicker(View view, DFLayoutControl element, string value)
+        private Tuple<View, Boolean> LoadTimePicker(DFLayoutControl element)
         {
+            string value = "";
             DFLayoutTimeField dfLayoutTimeField = element as DFLayoutTimeField;
             TimePicker item = new TimePicker();
             if (dfLayoutTimeField.Properties.Required)
@@ -578,15 +577,17 @@ namespace comal.timesheets.QAForms
                 if (e.PropertyName == "Time")
                     dfLayout.ChangeField(dfLayoutTimeField.Name);
             };
-            view = item;
 
-            return new Tuple<View, Boolean>(view, dfLayoutTimeField.Properties.Required);
+            return new Tuple<View, Boolean>(item, dfLayoutTimeField.Properties.Required);
         }
 
-        private Tuple<View, Boolean> LoadOptionPicker(View view, DFLayoutControl element, string value)
+        private Tuple<View, Boolean> LoadOptionPicker(DFLayoutControl element)
         {
+            View view = null;
             try
-            {
+            {             
+                string value = "";
+
                 var isrequired = false;
 
                 DFLayoutOptionField dfLayoutOptionField = element as DFLayoutOptionField;
@@ -683,8 +684,9 @@ namespace comal.timesheets.QAForms
             }
         }
 
-        private Tuple<View, Boolean> LoadImage(View view, DFLayoutControl element)
+        private Tuple<View, Boolean> LoadImage(DFLayoutControl element)
         {
+            View view = null;
             DFLayoutImage dfLayoutImage = element as DFLayoutImage;
             Image img = new Image();
             CoreTable table = new Client<Document>().Query(
@@ -723,8 +725,10 @@ namespace comal.timesheets.QAForms
             Navigation.PushAsync(viewer);
         }
 
-        private Tuple<View, Boolean> LoadLookupPicker(View view, DFLayoutControl element, string value)
+        private Tuple<View, Boolean> LoadLookupPicker(DFLayoutControl element)
         {
+            View view = null;
+            string value = "";
             DFLayoutLookupField dfLayoutLookupField = element as DFLayoutLookupField;
             var isrequired = dfLayoutLookupField.Properties.Required;
             Dictionary<Guid, string> lookupFieldOptions = new Dictionary<Guid, string>();
@@ -973,9 +977,10 @@ namespace comal.timesheets.QAForms
             return view;
         }
 
-        private Tuple<View, Boolean> LoadSignaturePad(View view, DFLayoutControl element, string value)
+        private Tuple<View, Boolean> LoadSignaturePad(DFLayoutControl element)
         {
-
+            string value = "";
+            View view = null;
             DFLayoutSignaturePad dFLayoutSignaturePad = element as DFLayoutSignaturePad;
             var isrequired = dFLayoutSignaturePad.Properties.Required;
             if (loadData.TryGetValue(dFLayoutSignaturePad.Name, out value))
@@ -1098,8 +1103,9 @@ namespace comal.timesheets.QAForms
             return new Tuple<View, Boolean>(view, isrequired);
         }
 
-        private Tuple<View, Boolean> LoadEmbeddedImage(View view, DFLayoutControl element, string value)
+        private Tuple<View, Boolean> LoadEmbeddedImage(DFLayoutControl element)
         {
+            string value = "";
             bool disableLibrary = false;
             DFLayoutEmbeddedImage dfLayoutEmbeddedImage = element as DFLayoutEmbeddedImage;
 
@@ -1131,14 +1137,13 @@ namespace comal.timesheets.QAForms
                     }
                 }
             }
-            view = embeddedImageCapture;
 
-            return new Tuple<View, Boolean>(view, dfLayoutEmbeddedImage.Properties.Required);
+            return new Tuple<View, Boolean>(embeddedImageCapture, dfLayoutEmbeddedImage.Properties.Required);
         }
 
-        private Tuple<View, Boolean> LoadMultiImage(View view, DFLayoutControl element, string value)
+        private Tuple<View, Boolean> LoadMultiImage(DFLayoutControl element)
         {
-
+            string value = "";
             bool disableLibrary = false;
             DFLayoutMultiImage dfLayoutMultiEmbeddedImage = element as DFLayoutMultiImage;
             try
@@ -1156,13 +1161,13 @@ namespace comal.timesheets.QAForms
                     multiImageCapture.DataToImage(data);
                 }
             }
-            view = multiImageCapture;
 
-            return new Tuple<View, bool>(view, dfLayoutMultiEmbeddedImage.Properties.Required);
+            return new Tuple<View, bool>(multiImageCapture, dfLayoutMultiEmbeddedImage.Properties.Required);
         }
 
-        private Tuple<View, bool> LoadMultiSignaturePad(View view, DFLayoutControl element, string value)
+        private Tuple<View, bool> LoadMultiSignaturePad(DFLayoutControl element)
         {
+            string value = "";
             DFLayoutMultiSignaturePad dfLayoutMultiSignaturePad = element as DFLayoutMultiSignaturePad;
             DataButtonControl button = new DataButtonControl
             {
@@ -1186,13 +1191,13 @@ namespace comal.timesheets.QAForms
             {
                 Navigation.PushAsync(multiSignaturePad);
             };
-            view = button;
 
-            return new Tuple<View, bool>(view, dfLayoutMultiSignaturePad.Properties.Required);
+            return new Tuple<View, bool>(button, dfLayoutMultiSignaturePad.Properties.Required);
         }
 
-        private Tuple<View, bool> LoadAddTaskField(View view, DFLayoutControl element, string value)
+        private Tuple<View, bool> LoadAddTaskField(DFLayoutControl element)
         {
+            string value = "";
             DFLayoutAddTaskField field = element as DFLayoutAddTaskField;
             DFCreateTaskView taskView = new DFCreateTaskView();
             taskView.OnAddTaskButtonClicked += () =>

+ 3 - 0
prs.mobile/comal.timesheets/Main/MainPage.xaml.cs

@@ -1013,6 +1013,9 @@ namespace comal.timesheets
                 TimeSheet timesheet = App.Data.TimeSheets?.Rows.FirstOrDefault()?.ToObject<TimeSheet>();
                 if (timesheet == null)
                     return;
+
+
+
                 String auditmessage = String.Format("Changed Selected Job to: {0}: {1}", timesheet.JobLink.JobNumber, timesheet.JobLink.Name);
                 if (ZeroLengthTimesheet())
                 {