소스 검색

Added iOS Privacy Declaration file
Added ability to edit notes and images in Doc Scanner

Frank van den Bos 1 년 전
부모
커밋
9fcf6a9044

+ 1 - 1
prs.mobile.new/PRS.Mobile.Droid/Properties/AndroidManifest.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="763000" android:versionName="7.63.0" package="comal.timesheets.Android">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="763100" android:versionName="7.63.1" package="comal.timesheets.Android">
 	<uses-sdk android:minSdkVersion="28" android:targetSdkVersion="33" />
 	<queries>
 		<intent>

+ 198 - 412
prs.mobile.new/PRS.Mobile.Droid/Resources/Resource.designer.cs

@@ -2,7 +2,6 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.42000
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
@@ -43473,781 +43472,568 @@ namespace PRS.Mobile.Droid
 			public const int arrow_up = 2131165272;
 			
 			// aapt resource value: 0x7F070059
-			public const int arrow_white_down = 2131165273;
+			public const int Avatar1 = 2131165273;
 			
 			// aapt resource value: 0x7F07005A
-			public const int arrow_white_left = 2131165274;
+			public const int Avatar10 = 2131165274;
 			
 			// aapt resource value: 0x7F07005B
-			public const int arrow_white_right = 2131165275;
+			public const int Avatar11 = 2131165275;
 			
 			// aapt resource value: 0x7F07005C
-			public const int arrow_white_up = 2131165276;
+			public const int Avatar12 = 2131165276;
 			
 			// aapt resource value: 0x7F07005D
-			public const int Avatar1 = 2131165277;
+			public const int Avatar13 = 2131165277;
 			
 			// aapt resource value: 0x7F07005E
-			public const int Avatar10 = 2131165278;
+			public const int Avatar14 = 2131165278;
 			
 			// aapt resource value: 0x7F07005F
-			public const int Avatar11 = 2131165279;
+			public const int Avatar15 = 2131165279;
 			
 			// aapt resource value: 0x7F070060
-			public const int Avatar12 = 2131165280;
+			public const int Avatar16 = 2131165280;
 			
 			// aapt resource value: 0x7F070061
-			public const int Avatar13 = 2131165281;
+			public const int Avatar17 = 2131165281;
 			
 			// aapt resource value: 0x7F070062
-			public const int Avatar14 = 2131165282;
+			public const int Avatar18 = 2131165282;
 			
 			// aapt resource value: 0x7F070063
-			public const int Avatar15 = 2131165283;
+			public const int Avatar19 = 2131165283;
 			
 			// aapt resource value: 0x7F070064
-			public const int Avatar16 = 2131165284;
+			public const int Avatar2 = 2131165284;
 			
 			// aapt resource value: 0x7F070065
-			public const int Avatar17 = 2131165285;
+			public const int Avatar20 = 2131165285;
 			
 			// aapt resource value: 0x7F070066
-			public const int Avatar18 = 2131165286;
+			public const int Avatar21 = 2131165286;
 			
 			// aapt resource value: 0x7F070067
-			public const int Avatar19 = 2131165287;
+			public const int Avatar22 = 2131165287;
 			
 			// aapt resource value: 0x7F070068
-			public const int Avatar2 = 2131165288;
+			public const int Avatar23 = 2131165288;
 			
 			// aapt resource value: 0x7F070069
-			public const int Avatar20 = 2131165289;
+			public const int Avatar24 = 2131165289;
 			
 			// aapt resource value: 0x7F07006A
-			public const int Avatar21 = 2131165290;
+			public const int Avatar25 = 2131165290;
 			
 			// aapt resource value: 0x7F07006B
-			public const int Avatar22 = 2131165291;
+			public const int Avatar26 = 2131165291;
 			
 			// aapt resource value: 0x7F07006C
-			public const int Avatar23 = 2131165292;
+			public const int Avatar27 = 2131165292;
 			
 			// aapt resource value: 0x7F07006D
-			public const int Avatar24 = 2131165293;
+			public const int Avatar28 = 2131165293;
 			
 			// aapt resource value: 0x7F07006E
-			public const int Avatar25 = 2131165294;
+			public const int Avatar29 = 2131165294;
 			
 			// aapt resource value: 0x7F07006F
-			public const int Avatar26 = 2131165295;
+			public const int Avatar3 = 2131165295;
 			
 			// aapt resource value: 0x7F070070
-			public const int Avatar27 = 2131165296;
+			public const int Avatar30 = 2131165296;
 			
 			// aapt resource value: 0x7F070071
-			public const int Avatar28 = 2131165297;
+			public const int Avatar4 = 2131165297;
 			
 			// aapt resource value: 0x7F070072
-			public const int Avatar29 = 2131165298;
+			public const int Avatar5 = 2131165298;
 			
 			// aapt resource value: 0x7F070073
-			public const int Avatar3 = 2131165299;
+			public const int Avatar6 = 2131165299;
 			
 			// aapt resource value: 0x7F070074
-			public const int Avatar30 = 2131165300;
+			public const int Avatar7 = 2131165300;
 			
 			// aapt resource value: 0x7F070075
-			public const int Avatar4 = 2131165301;
+			public const int Avatar8 = 2131165301;
 			
 			// aapt resource value: 0x7F070076
-			public const int Avatar5 = 2131165302;
+			public const int Avatar9 = 2131165302;
 			
 			// aapt resource value: 0x7F070077
-			public const int Avatar6 = 2131165303;
+			public const int avd_hide_password = 2131165303;
 			
 			// aapt resource value: 0x7F070078
-			public const int Avatar7 = 2131165304;
+			public const int avd_show_password = 2131165304;
 			
 			// aapt resource value: 0x7F070079
-			public const int Avatar8 = 2131165305;
+			public const int Bookmark = 2131165305;
 			
 			// aapt resource value: 0x7F07007A
-			public const int Avatar9 = 2131165306;
+			public const int border_layout = 2131165306;
 			
 			// aapt resource value: 0x7F07007B
-			public const int avd_hide_password = 2131165307;
+			public const int btn_checkbox_checked_mtrl = 2131165307;
 			
 			// aapt resource value: 0x7F07007C
-			public const int avd_show_password = 2131165308;
+			public const int btn_checkbox_checked_to_unchecked_mtrl_animation = 2131165308;
 			
 			// aapt resource value: 0x7F07007D
-			public const int badge = 2131165309;
+			public const int btn_checkbox_unchecked_mtrl = 2131165309;
 			
 			// aapt resource value: 0x7F07007E
-			public const int barcode = 2131165310;
+			public const int btn_checkbox_unchecked_to_checked_mtrl_animation = 2131165310;
 			
 			// aapt resource value: 0x7F07007F
-			public const int Bookmark = 2131165311;
+			public const int btn_radio_off_mtrl = 2131165311;
 			
 			// aapt resource value: 0x7F070080
-			public const int bookmark_gray = 2131165312;
+			public const int btn_radio_off_to_on_mtrl_animation = 2131165312;
 			
 			// aapt resource value: 0x7F070081
-			public const int bookmark_green = 2131165313;
+			public const int btn_radio_on_mtrl = 2131165313;
 			
 			// aapt resource value: 0x7F070082
-			public const int books = 2131165314;
+			public const int btn_radio_on_to_off_mtrl_animation = 2131165314;
 			
 			// aapt resource value: 0x7F070083
-			public const int border_layout = 2131165315;
+			public const int CheckableMaterialColor = 2131165315;
 			
 			// aapt resource value: 0x7F070084
-			public const int btn_checkbox_checked_mtrl = 2131165316;
+			public const int clear_button_icon = 2131165316;
 			
 			// aapt resource value: 0x7F070085
-			public const int btn_checkbox_checked_to_unchecked_mtrl_animation = 2131165317;
+			public const int common_full_open_on_phone = 2131165317;
 			
 			// aapt resource value: 0x7F070086
-			public const int btn_checkbox_unchecked_mtrl = 2131165318;
+			public const int common_google_signin_btn_icon_dark = 2131165318;
 			
 			// aapt resource value: 0x7F070087
-			public const int btn_checkbox_unchecked_to_checked_mtrl_animation = 2131165319;
+			public const int common_google_signin_btn_icon_dark_focused = 2131165319;
 			
 			// aapt resource value: 0x7F070088
-			public const int btn_radio_off_mtrl = 2131165320;
+			public const int common_google_signin_btn_icon_dark_normal = 2131165320;
 			
 			// aapt resource value: 0x7F070089
-			public const int btn_radio_off_to_on_mtrl_animation = 2131165321;
+			public const int common_google_signin_btn_icon_dark_normal_background = 2131165321;
 			
 			// aapt resource value: 0x7F07008A
-			public const int btn_radio_on_mtrl = 2131165322;
+			public const int common_google_signin_btn_icon_disabled = 2131165322;
 			
 			// aapt resource value: 0x7F07008B
-			public const int btn_radio_on_to_off_mtrl_animation = 2131165323;
+			public const int common_google_signin_btn_icon_light = 2131165323;
 			
 			// aapt resource value: 0x7F07008C
-			public const int cache = 2131165324;
+			public const int common_google_signin_btn_icon_light_focused = 2131165324;
 			
 			// aapt resource value: 0x7F07008D
-			public const int camcorder = 2131165325;
+			public const int common_google_signin_btn_icon_light_normal = 2131165325;
 			
 			// aapt resource value: 0x7F07008E
-			public const int camera = 2131165326;
+			public const int common_google_signin_btn_icon_light_normal_background = 2131165326;
 			
 			// aapt resource value: 0x7F07008F
-			public const int certificate = 2131165327;
+			public const int common_google_signin_btn_text_dark = 2131165327;
 			
 			// aapt resource value: 0x7F070090
-			public const int CheckableMaterialColor = 2131165328;
+			public const int common_google_signin_btn_text_dark_focused = 2131165328;
 			
 			// aapt resource value: 0x7F070091
-			public const int @checked = 2131165329;
+			public const int common_google_signin_btn_text_dark_normal = 2131165329;
 			
 			// aapt resource value: 0x7F070092
-			public const int circle_gray = 2131165330;
+			public const int common_google_signin_btn_text_dark_normal_background = 2131165330;
 			
 			// aapt resource value: 0x7F070093
-			public const int circle_green = 2131165331;
+			public const int common_google_signin_btn_text_disabled = 2131165331;
 			
 			// aapt resource value: 0x7F070094
-			public const int circle_red = 2131165332;
+			public const int common_google_signin_btn_text_light = 2131165332;
 			
 			// aapt resource value: 0x7F070095
-			public const int clear_button_icon = 2131165333;
+			public const int common_google_signin_btn_text_light_focused = 2131165333;
 			
 			// aapt resource value: 0x7F070096
-			public const int clock = 2131165334;
+			public const int common_google_signin_btn_text_light_normal = 2131165334;
 			
 			// aapt resource value: 0x7F070097
-			public const int cloud = 2131165335;
+			public const int common_google_signin_btn_text_light_normal_background = 2131165335;
 			
 			// aapt resource value: 0x7F070098
-			public const int common_full_open_on_phone = 2131165336;
+			public const int custom_thumb = 2131165336;
 			
 			// aapt resource value: 0x7F070099
-			public const int common_google_signin_btn_icon_dark = 2131165337;
+			public const int dashed_border = 2131165337;
 			
 			// aapt resource value: 0x7F07009A
-			public const int common_google_signin_btn_icon_dark_focused = 2131165338;
+			public const int design_fab_background = 2131165338;
 			
 			// aapt resource value: 0x7F07009B
-			public const int common_google_signin_btn_icon_dark_normal = 2131165339;
+			public const int design_ic_visibility = 2131165339;
 			
 			// aapt resource value: 0x7F07009C
-			public const int common_google_signin_btn_icon_dark_normal_background = 2131165340;
+			public const int design_ic_visibility_off = 2131165340;
 			
 			// aapt resource value: 0x7F07009D
-			public const int common_google_signin_btn_icon_disabled = 2131165341;
+			public const int design_password_eye = 2131165341;
 			
 			// aapt resource value: 0x7F07009E
-			public const int common_google_signin_btn_icon_light = 2131165342;
+			public const int design_snackbar_background = 2131165342;
 			
 			// aapt resource value: 0x7F07009F
-			public const int common_google_signin_btn_icon_light_focused = 2131165343;
+			public const int drawable_ripple = 2131165343;
 			
 			// aapt resource value: 0x7F0700A0
-			public const int common_google_signin_btn_icon_light_normal = 2131165344;
+			public const int drawable_ripple_image = 2131165344;
 			
 			// aapt resource value: 0x7F0700A1
-			public const int common_google_signin_btn_icon_light_normal_background = 2131165345;
+			public const int drawable_ripple_outlined = 2131165345;
 			
 			// aapt resource value: 0x7F0700A2
-			public const int common_google_signin_btn_text_dark = 2131165346;
+			public const int drawable_ripple_outlined_with_icon = 2131165346;
 			
 			// aapt resource value: 0x7F0700A3
-			public const int common_google_signin_btn_text_dark_focused = 2131165347;
+			public const int drawable_ripple_text = 2131165347;
 			
 			// aapt resource value: 0x7F0700A4
-			public const int common_google_signin_btn_text_dark_normal = 2131165348;
+			public const int drawable_ripple_with_icon = 2131165348;
 			
 			// aapt resource value: 0x7F0700A5
-			public const int common_google_signin_btn_text_dark_normal_background = 2131165349;
+			public const int drawable_selector = 2131165349;
 			
 			// aapt resource value: 0x7F0700A6
-			public const int common_google_signin_btn_text_disabled = 2131165350;
+			public const int drawable_shape = 2131165350;
 			
 			// aapt resource value: 0x7F0700A7
-			public const int common_google_signin_btn_text_light = 2131165351;
+			public const int drawable_shape_text = 2131165351;
 			
 			// aapt resource value: 0x7F0700A8
-			public const int common_google_signin_btn_text_light_focused = 2131165352;
+			public const int drawable_shape_with_icon = 2131165352;
 			
 			// aapt resource value: 0x7F0700A9
-			public const int common_google_signin_btn_text_light_normal = 2131165353;
+			public const int dropdownbuttonimage = 2131165353;
 			
 			// aapt resource value: 0x7F0700AA
-			public const int common_google_signin_btn_text_light_normal_background = 2131165354;
+			public const int editTextBackground = 2131165354;
 			
 			// aapt resource value: 0x7F0700AB
-			public const int construction = 2131165355;
+			public const int editTextPageCount = 2131165355;
 			
 			// aapt resource value: 0x7F0700AC
-			public const int cross = 2131165356;
+			public const int FormFieldCheckbox = 2131165356;
 			
 			// aapt resource value: 0x7F0700AD
-			public const int custom_thumb = 2131165357;
+			public const int FormFieldCheckbox_Checked = 2131165357;
 			
 			// aapt resource value: 0x7F0700AE
-			public const int dashed_border = 2131165358;
+			public const int FormFieldCheckbox_UnChecked = 2131165358;
 			
 			// aapt resource value: 0x7F0700AF
-			public const int delivery = 2131165359;
+			public const int formfieldradiobuttonstyle = 2131165359;
 			
 			// aapt resource value: 0x7F0700B0
-			public const int design_fab_background = 2131165360;
+			public const int formfieldtextboxcursorcolor = 2131165360;
 			
 			// aapt resource value: 0x7F0700B1
-			public const int design_ic_visibility = 2131165361;
+			public const int googleg_disabled_color_18 = 2131165361;
 			
 			// aapt resource value: 0x7F0700B2
-			public const int design_ic_visibility_off = 2131165362;
+			public const int googleg_standard_color_18 = 2131165362;
+			
+			// aapt resource value: 0x7F0700BA
+			public const int Icon = 2131165370;
 			
 			// aapt resource value: 0x7F0700B3
-			public const int design_password_eye = 2131165363;
+			public const int ic_arrow_down_24dp = 2131165363;
 			
 			// aapt resource value: 0x7F0700B4
-			public const int design_snackbar_background = 2131165364;
+			public const int ic_clock_black_24dp = 2131165364;
 			
 			// aapt resource value: 0x7F0700B5
-			public const int digitalform = 2131165365;
+			public const int ic_keyboard_black_24dp = 2131165365;
 			
 			// aapt resource value: 0x7F0700B6
-			public const int disconnected = 2131165366;
+			public const int ic_mtrl_checked_circle = 2131165366;
 			
 			// aapt resource value: 0x7F0700B7
-			public const int dots = 2131165367;
+			public const int ic_mtrl_chip_checked_black = 2131165367;
 			
 			// aapt resource value: 0x7F0700B8
-			public const int drawable_ripple = 2131165368;
+			public const int ic_mtrl_chip_checked_circle = 2131165368;
 			
 			// aapt resource value: 0x7F0700B9
-			public const int drawable_ripple_image = 2131165369;
-			
-			// aapt resource value: 0x7F0700BA
-			public const int drawable_ripple_outlined = 2131165370;
-			
-			// aapt resource value: 0x7F0700BB
-			public const int drawable_ripple_outlined_with_icon = 2131165371;
+			public const int ic_mtrl_chip_close_circle = 2131165369;
 			
 			// aapt resource value: 0x7F0700BC
-			public const int drawable_ripple_text = 2131165372;
+			public const int inputlayout_togglecollapseicon = 2131165372;
 			
 			// aapt resource value: 0x7F0700BD
-			public const int drawable_ripple_with_icon = 2131165373;
+			public const int inputlayout_togglevisibleicon = 2131165373;
+			
+			// aapt resource value: 0x7F0700BB
+			public const int input_layout_drop_down_icon = 2131165371;
 			
 			// aapt resource value: 0x7F0700BE
-			public const int drawable_selector = 2131165374;
+			public const int layoutBorder = 2131165374;
 			
 			// aapt resource value: 0x7F0700BF
-			public const int drawable_shape = 2131165375;
+			public const int logo = 2131165375;
 			
 			// aapt resource value: 0x7F0700C0
-			public const int drawable_shape_text = 2131165376;
+			public const int material_cursor_drawable = 2131165376;
 			
 			// aapt resource value: 0x7F0700C1
-			public const int drawable_shape_with_icon = 2131165377;
+			public const int material_ic_calendar_black_24dp = 2131165377;
 			
 			// aapt resource value: 0x7F0700C2
-			public const int drawing = 2131165378;
+			public const int material_ic_clear_black_24dp = 2131165378;
 			
 			// aapt resource value: 0x7F0700C3
-			public const int drill = 2131165379;
+			public const int material_ic_edit_black_24dp = 2131165379;
 			
 			// aapt resource value: 0x7F0700C4
-			public const int dropdownbuttonimage = 2131165380;
+			public const int material_ic_keyboard_arrow_left_black_24dp = 2131165380;
 			
 			// aapt resource value: 0x7F0700C5
-			public const int editTextBackground = 2131165381;
+			public const int material_ic_keyboard_arrow_next_black_24dp = 2131165381;
 			
 			// aapt resource value: 0x7F0700C6
-			public const int editTextPageCount = 2131165382;
+			public const int material_ic_keyboard_arrow_previous_black_24dp = 2131165382;
 			
 			// aapt resource value: 0x7F0700C7
-			public const int factory = 2131165383;
+			public const int material_ic_keyboard_arrow_right_black_24dp = 2131165383;
 			
 			// aapt resource value: 0x7F0700C8
-			public const int flowchart = 2131165384;
+			public const int material_ic_menu_arrow_down_black_24dp = 2131165384;
 			
 			// aapt resource value: 0x7F0700C9
-			public const int folder = 2131165385;
+			public const int material_ic_menu_arrow_up_black_24dp = 2131165385;
 			
 			// aapt resource value: 0x7F0700CA
-			public const int FormFieldCheckbox = 2131165386;
+			public const int More = 2131165386;
 			
 			// aapt resource value: 0x7F0700CB
-			public const int FormFieldCheckbox_Checked = 2131165387;
+			public const int mtrl_dialog_background = 2131165387;
 			
 			// aapt resource value: 0x7F0700CC
-			public const int FormFieldCheckbox_UnChecked = 2131165388;
+			public const int mtrl_dropdown_arrow = 2131165388;
 			
 			// aapt resource value: 0x7F0700CD
-			public const int formfieldradiobuttonstyle = 2131165389;
+			public const int mtrl_ic_arrow_drop_down = 2131165389;
 			
 			// aapt resource value: 0x7F0700CE
-			public const int formfieldtextboxcursorcolor = 2131165390;
+			public const int mtrl_ic_arrow_drop_up = 2131165390;
 			
 			// aapt resource value: 0x7F0700CF
-			public const int googleg_disabled_color_18 = 2131165391;
+			public const int mtrl_ic_cancel = 2131165391;
 			
 			// aapt resource value: 0x7F0700D0
-			public const int googleg_standard_color_18 = 2131165392;
+			public const int mtrl_ic_error = 2131165392;
 			
 			// aapt resource value: 0x7F0700D1
-			public const int holiday = 2131165393;
-			
-			// aapt resource value: 0x7F0700D9
-			public const int Icon = 2131165401;
+			public const int mtrl_navigation_bar_item_background = 2131165393;
 			
 			// aapt resource value: 0x7F0700D2
-			public const int ic_arrow_down_24dp = 2131165394;
+			public const int mtrl_popupmenu_background = 2131165394;
 			
 			// aapt resource value: 0x7F0700D3
-			public const int ic_clock_black_24dp = 2131165395;
+			public const int mtrl_popupmenu_background_dark = 2131165395;
 			
 			// aapt resource value: 0x7F0700D4
-			public const int ic_keyboard_black_24dp = 2131165396;
+			public const int mtrl_tabs_default_indicator = 2131165396;
 			
 			// aapt resource value: 0x7F0700D5
-			public const int ic_mtrl_checked_circle = 2131165397;
+			public const int navigation_empty_icon = 2131165397;
 			
 			// aapt resource value: 0x7F0700D6
-			public const int ic_mtrl_chip_checked_black = 2131165398;
+			public const int NodeCollapse = 2131165398;
 			
 			// aapt resource value: 0x7F0700D7
-			public const int ic_mtrl_chip_checked_circle = 2131165399;
+			public const int NodeExpand = 2131165399;
 			
 			// aapt resource value: 0x7F0700D8
-			public const int ic_mtrl_chip_close_circle = 2131165400;
+			public const int notification_action_background = 2131165400;
+			
+			// aapt resource value: 0x7F0700D9
+			public const int notification_bg = 2131165401;
+			
+			// aapt resource value: 0x7F0700DA
+			public const int notification_bg_low = 2131165402;
 			
 			// aapt resource value: 0x7F0700DB
-			public const int inputlayout_togglecollapseicon = 2131165403;
+			public const int notification_bg_low_normal = 2131165403;
 			
 			// aapt resource value: 0x7F0700DC
-			public const int inputlayout_togglevisibleicon = 2131165404;
-			
-			// aapt resource value: 0x7F0700DA
-			public const int input_layout_drop_down_icon = 2131165402;
+			public const int notification_bg_low_pressed = 2131165404;
 			
 			// aapt resource value: 0x7F0700DD
-			public const int key = 2131165405;
+			public const int notification_bg_normal = 2131165405;
 			
 			// aapt resource value: 0x7F0700DE
-			public const int layoutBorder = 2131165406;
+			public const int notification_bg_normal_pressed = 2131165406;
 			
 			// aapt resource value: 0x7F0700DF
-			public const int lines = 2131165407;
+			public const int notification_icon_background = 2131165407;
 			
 			// aapt resource value: 0x7F0700E0
-			public const int logo = 2131165408;
+			public const int notification_template_icon_bg = 2131165408;
 			
 			// aapt resource value: 0x7F0700E1
-			public const int map = 2131165409;
+			public const int notification_template_icon_low_bg = 2131165409;
 			
 			// aapt resource value: 0x7F0700E2
-			public const int material_cursor_drawable = 2131165410;
+			public const int notification_tile_bg = 2131165410;
 			
 			// aapt resource value: 0x7F0700E3
-			public const int material_ic_calendar_black_24dp = 2131165411;
+			public const int notify_panel_notification_icon_bg = 2131165411;
 			
 			// aapt resource value: 0x7F0700E4
-			public const int material_ic_clear_black_24dp = 2131165412;
+			public const int PasswordAlertDialogBottomLine = 2131165412;
 			
 			// aapt resource value: 0x7F0700E5
-			public const int material_ic_edit_black_24dp = 2131165413;
+			public const int PasswordAlertDialogCursorStyle = 2131165413;
 			
 			// aapt resource value: 0x7F0700E6
-			public const int material_ic_keyboard_arrow_left_black_24dp = 2131165414;
+			public const int popup_forms_android_close_icon = 2131165414;
 			
 			// aapt resource value: 0x7F0700E7
-			public const int material_ic_keyboard_arrow_next_black_24dp = 2131165415;
+			public const int popup_forms_android_shadow = 2131165415;
 			
 			// aapt resource value: 0x7F0700E8
-			public const int material_ic_keyboard_arrow_previous_black_24dp = 2131165416;
+			public const int popup_forms_dark_theme_close_icon = 2131165416;
 			
 			// aapt resource value: 0x7F0700E9
-			public const int material_ic_keyboard_arrow_right_black_24dp = 2131165417;
+			public const int popup_forms_light_theme_close_icon = 2131165417;
 			
 			// aapt resource value: 0x7F0700EA
-			public const int material_ic_menu_arrow_down_black_24dp = 2131165418;
+			public const int preference_list_divider_material = 2131165418;
 			
 			// aapt resource value: 0x7F0700EB
-			public const int material_ic_menu_arrow_up_black_24dp = 2131165419;
+			public const int Recurrence = 2131165419;
 			
 			// aapt resource value: 0x7F0700EC
-			public const int meeting = 2131165420;
+			public const int roundCornerButton = 2131165420;
 			
 			// aapt resource value: 0x7F0700ED
-			public const int menu = 2131165421;
+			public const int savebutton = 2131165421;
 			
 			// aapt resource value: 0x7F0700EE
-			public const int minus = 2131165422;
+			public const int Search = 2131165422;
 			
 			// aapt resource value: 0x7F0700EF
-			public const int More = 2131165423;
+			public const int Separator = 2131165423;
 			
 			// aapt resource value: 0x7F0700F0
-			public const int mtrl_dialog_background = 2131165424;
+			public const int sfcheckbox_animation = 2131165424;
 			
 			// aapt resource value: 0x7F0700F1
-			public const int mtrl_dropdown_arrow = 2131165425;
+			public const int sfcheckbox_checked = 2131165425;
 			
 			// aapt resource value: 0x7F0700F2
-			public const int mtrl_ic_arrow_drop_down = 2131165426;
+			public const int sfcheckbox_checked_indeterminate = 2131165426;
 			
 			// aapt resource value: 0x7F0700F3
-			public const int mtrl_ic_arrow_drop_up = 2131165427;
+			public const int sfcheckbox_checked_unchecked = 2131165427;
 			
 			// aapt resource value: 0x7F0700F4
-			public const int mtrl_ic_cancel = 2131165428;
+			public const int sfcheckbox_indeterminate = 2131165428;
 			
 			// aapt resource value: 0x7F0700F5
-			public const int mtrl_ic_error = 2131165429;
+			public const int sfcheckbox_indeterminate_checked = 2131165429;
 			
 			// aapt resource value: 0x7F0700F6
-			public const int mtrl_navigation_bar_item_background = 2131165430;
+			public const int sfcheckbox_indeterminate_unchecked = 2131165430;
 			
 			// aapt resource value: 0x7F0700F7
-			public const int mtrl_popupmenu_background = 2131165431;
+			public const int sfcheckbox_unchecked = 2131165431;
 			
 			// aapt resource value: 0x7F0700F8
-			public const int mtrl_popupmenu_background_dark = 2131165432;
+			public const int sfcheckbox_unchecked_checked = 2131165432;
 			
 			// aapt resource value: 0x7F0700F9
-			public const int mtrl_tabs_default_indicator = 2131165433;
+			public const int sfcheckbox_unchecked_indeterminate = 2131165433;
 			
 			// aapt resource value: 0x7F0700FA
-			public const int navigation_empty_icon = 2131165434;
+			public const int sfprogressbar_determinate_linear = 2131165434;
 			
 			// aapt resource value: 0x7F0700FB
-			public const int NodeCollapse = 2131165435;
+			public const int sfprogressbar_indeterminate_circular = 2131165435;
 			
 			// aapt resource value: 0x7F0700FC
-			public const int NodeExpand = 2131165436;
+			public const int sfprogressbar_indeterminate_linear = 2131165436;
 			
 			// aapt resource value: 0x7F0700FD
-			public const int notification = 2131165437;
+			public const int shadow_effect = 2131165437;
 			
 			// aapt resource value: 0x7F0700FE
-			public const int notification_action_background = 2131165438;
+			public const int SignaturePadBottomCorner = 2131165438;
 			
 			// aapt resource value: 0x7F0700FF
-			public const int notification_bg = 2131165439;
+			public const int SignaturepadRoundedCorners = 2131165439;
 			
 			// aapt resource value: 0x7F070100
-			public const int notification_bg_low = 2131165440;
+			public const int SignaturePadTopCorner = 2131165440;
 			
 			// aapt resource value: 0x7F070101
-			public const int notification_bg_low_normal = 2131165441;
+			public const int splash = 2131165441;
 			
 			// aapt resource value: 0x7F070102
-			public const int notification_bg_low_pressed = 2131165442;
+			public const int test_custom_background = 2131165442;
 			
 			// aapt resource value: 0x7F070103
-			public const int notification_bg_normal = 2131165443;
+			public const int test_level_drawable = 2131165443;
 			
 			// aapt resource value: 0x7F070104
-			public const int notification_bg_normal_pressed = 2131165444;
+			public const int text_color_button = 2131165444;
 			
 			// aapt resource value: 0x7F070105
-			public const int notification_icon_background = 2131165445;
+			public const int toolbaritem_background = 2131165445;
 			
 			// aapt resource value: 0x7F070106
-			public const int notification_template_icon_bg = 2131165446;
+			public const int toolbaritem_pressed = 2131165446;
 			
 			// aapt resource value: 0x7F070107
-			public const int notification_template_icon_low_bg = 2131165447;
+			public const int tooltip_frame_dark = 2131165447;
 			
 			// aapt resource value: 0x7F070108
-			public const int notification_tile_bg = 2131165448;
-			
-			// aapt resource value: 0x7F070109
-			public const int notify_panel_notification_icon_bg = 2131165449;
+			public const int tooltip_frame_light = 2131165448;
 			
 			// aapt resource value: 0x7F07010A
-			public const int paperclip = 2131165450;
+			public const int undoButton = 2131165450;
+			
+			// aapt resource value: 0x7F070109
+			public const int undo_redo_background = 2131165449;
 			
 			// aapt resource value: 0x7F07010B
-			public const int PasswordAlertDialogBottomLine = 2131165451;
+			public const int Viewmode = 2131165451;
 			
 			// aapt resource value: 0x7F07010C
-			public const int PasswordAlertDialogCursorStyle = 2131165452;
+			public const int xf_arrow_dropdown = 2131165452;
 			
 			// aapt resource value: 0x7F07010D
-			public const int person = 2131165453;
+			public const int xf_arrow_right = 2131165453;
 			
 			// aapt resource value: 0x7F07010E
-			public const int phone = 2131165454;
+			public const int xf_check = 2131165454;
 			
 			// aapt resource value: 0x7F07010F
-			public const int photolibrary = 2131165455;
+			public const int xf_checkbox_selected = 2131165455;
 			
 			// aapt resource value: 0x7F070110
-			public const int plus = 2131165456;
+			public const int xf_checkbox_unselected = 2131165456;
 			
 			// aapt resource value: 0x7F070111
-			public const int popup_forms_android_close_icon = 2131165457;
+			public const int xf_clear = 2131165457;
 			
 			// aapt resource value: 0x7F070112
-			public const int popup_forms_android_shadow = 2131165458;
+			public const int xf_error = 2131165458;
 			
 			// aapt resource value: 0x7F070113
-			public const int popup_forms_dark_theme_close_icon = 2131165459;
+			public const int xf_radio_button_selected = 2131165459;
 			
 			// aapt resource value: 0x7F070114
-			public const int popup_forms_light_theme_close_icon = 2131165460;
-			
-			// aapt resource value: 0x7F070115
-			public const int preference_list_divider_material = 2131165461;
-			
-			// aapt resource value: 0x7F070116
-			public const int print = 2131165462;
-			
-			// aapt resource value: 0x7F070117
-			public const int question = 2131165463;
-			
-			// aapt resource value: 0x7F070118
-			public const int Recurrence = 2131165464;
-			
-			// aapt resource value: 0x7F070119
-			public const int refresh = 2131165465;
-			
-			// aapt resource value: 0x7F07011A
-			public const int rotate = 2131165466;
-			
-			// aapt resource value: 0x7F07011B
-			public const int roundCornerButton = 2131165467;
-			
-			// aapt resource value: 0x7F07011C
-			public const int save = 2131165468;
-			
-			// aapt resource value: 0x7F07011D
-			public const int savebutton = 2131165469;
-			
-			// aapt resource value: 0x7F07011E
-			public const int schedule = 2131165470;
-			
-			// aapt resource value: 0x7F07011F
-			public const int Search = 2131165471;
-			
-			// aapt resource value: 0x7F070120
-			public const int Separator = 2131165472;
-			
-			// aapt resource value: 0x7F070121
-			public const int settings = 2131165473;
-			
-			// aapt resource value: 0x7F070122
-			public const int sfcheckbox_animation = 2131165474;
-			
-			// aapt resource value: 0x7F070123
-			public const int sfcheckbox_checked = 2131165475;
-			
-			// aapt resource value: 0x7F070124
-			public const int sfcheckbox_checked_indeterminate = 2131165476;
-			
-			// aapt resource value: 0x7F070125
-			public const int sfcheckbox_checked_unchecked = 2131165477;
-			
-			// aapt resource value: 0x7F070126
-			public const int sfcheckbox_indeterminate = 2131165478;
-			
-			// aapt resource value: 0x7F070127
-			public const int sfcheckbox_indeterminate_checked = 2131165479;
-			
-			// aapt resource value: 0x7F070128
-			public const int sfcheckbox_indeterminate_unchecked = 2131165480;
-			
-			// aapt resource value: 0x7F070129
-			public const int sfcheckbox_unchecked = 2131165481;
-			
-			// aapt resource value: 0x7F07012A
-			public const int sfcheckbox_unchecked_checked = 2131165482;
-			
-			// aapt resource value: 0x7F07012B
-			public const int sfcheckbox_unchecked_indeterminate = 2131165483;
-			
-			// aapt resource value: 0x7F07012C
-			public const int sfprogressbar_determinate_linear = 2131165484;
-			
-			// aapt resource value: 0x7F07012D
-			public const int sfprogressbar_indeterminate_circular = 2131165485;
-			
-			// aapt resource value: 0x7F07012E
-			public const int sfprogressbar_indeterminate_linear = 2131165486;
-			
-			// aapt resource value: 0x7F07012F
-			public const int shadow_effect = 2131165487;
-			
-			// aapt resource value: 0x7F070130
-			public const int share = 2131165488;
-			
-			// aapt resource value: 0x7F070131
-			public const int sharedcross = 2131165489;
-			
-			// aapt resource value: 0x7F070132
-			public const int sharedtick = 2131165490;
-			
-			// aapt resource value: 0x7F070133
-			public const int shoppingcart = 2131165491;
-			
-			// aapt resource value: 0x7F070134
-			public const int SignaturePadBottomCorner = 2131165492;
-			
-			// aapt resource value: 0x7F070135
-			public const int SignaturepadRoundedCorners = 2131165493;
-			
-			// aapt resource value: 0x7F070136
-			public const int SignaturePadTopCorner = 2131165494;
-			
-			// aapt resource value: 0x7F070137
-			public const int splash = 2131165495;
-			
-			// aapt resource value: 0x7F070138
-			public const int stock = 2131165496;
-			
-			// aapt resource value: 0x7F070139
-			public const int stock_issue = 2131165497;
-			
-			// aapt resource value: 0x7F07013A
-			public const int stock_receive = 2131165498;
-			
-			// aapt resource value: 0x7F07013B
-			public const int stock_relocate = 2131165499;
-			
-			// aapt resource value: 0x7F07013C
-			public const int stock_search = 2131165500;
-			
-			// aapt resource value: 0x7F07013D
-			public const int stock_stocktake = 2131165501;
-			
-			// aapt resource value: 0x7F07013E
-			public const int stock_transfer = 2131165502;
-			
-			// aapt resource value: 0x7F07013F
-			public const int task = 2131165503;
-			
-			// aapt resource value: 0x7F070140
-			public const int test_custom_background = 2131165504;
-			
-			// aapt resource value: 0x7F070141
-			public const int test_level_drawable = 2131165505;
-			
-			// aapt resource value: 0x7F070142
-			public const int text_color_button = 2131165506;
-			
-			// aapt resource value: 0x7F070143
-			public const int tick = 2131165507;
-			
-			// aapt resource value: 0x7F070144
-			public const int toolbaritem_background = 2131165508;
-			
-			// aapt resource value: 0x7F070145
-			public const int toolbaritem_pressed = 2131165509;
-			
-			// aapt resource value: 0x7F070146
-			public const int tooltip_frame_dark = 2131165510;
-			
-			// aapt resource value: 0x7F070147
-			public const int tooltip_frame_light = 2131165511;
-			
-			// aapt resource value: 0x7F070148
-			public const int trash = 2131165512;
-			
-			// aapt resource value: 0x7F070149
-			public const int trolley = 2131165513;
-			
-			// aapt resource value: 0x7F07014A
-			public const int @unchecked = 2131165514;
-			
-			// aapt resource value: 0x7F07014C
-			public const int undoButton = 2131165516;
-			
-			// aapt resource value: 0x7F07014B
-			public const int undo_redo_background = 2131165515;
-			
-			// aapt resource value: 0x7F07014D
-			public const int upload = 2131165517;
-			
-			// aapt resource value: 0x7F07014E
-			public const int version = 2131165518;
-			
-			// aapt resource value: 0x7F07014F
-			public const int videolibrary = 2131165519;
-			
-			// aapt resource value: 0x7F070150
-			public const int Viewmode = 2131165520;
-			
-			// aapt resource value: 0x7F070151
-			public const int warehouse = 2131165521;
-			
-			// aapt resource value: 0x7F070152
-			public const int warning = 2131165522;
-			
-			// aapt resource value: 0x7F070153
-			public const int xf_arrow_dropdown = 2131165523;
-			
-			// aapt resource value: 0x7F070154
-			public const int xf_arrow_right = 2131165524;
-			
-			// aapt resource value: 0x7F070155
-			public const int xf_check = 2131165525;
-			
-			// aapt resource value: 0x7F070156
-			public const int xf_checkbox_selected = 2131165526;
-			
-			// aapt resource value: 0x7F070157
-			public const int xf_checkbox_unselected = 2131165527;
-			
-			// aapt resource value: 0x7F070158
-			public const int xf_clear = 2131165528;
-			
-			// aapt resource value: 0x7F070159
-			public const int xf_error = 2131165529;
-			
-			// aapt resource value: 0x7F07015A
-			public const int xf_radio_button_selected = 2131165530;
-			
-			// aapt resource value: 0x7F07015B
-			public const int xf_radio_button_unselected = 2131165531;
+			public const int xf_radio_button_unselected = 2131165460;
 			
 			static Drawable()
 			{

+ 1 - 1
prs.mobile.new/PRS.Mobile.iOS/Info.plist

@@ -27,7 +27,7 @@
 	<key>CFBundleIdentifier</key>
 	<string>com.prsdigital.prssiteapp</string>
 	<key>CFBundleVersion</key>
-	<string>7.63.0</string>
+	<string>7.63.1</string>
 	<key>UILaunchStoryboardName</key>
 	<string>LaunchScreen</string>
 	<key>CFBundleName</key>

+ 3 - 0
prs.mobile.new/PRS.Mobile.iOS/PRS.Mobile.iOS.csproj

@@ -247,6 +247,9 @@
       <Name>InABox.RPC.Shared</Name>
     </ProjectReference>
   </ItemGroup>
+  <ItemGroup>
+    <Content Include="PrivacyInfo.xcprivacy.plist" />
+  </ItemGroup>
   <Import Project="..\..\..\inabox\InABox.Mobile\InABox.Mobile.iOS\InABox.Mobile.iOS.projitems" Label="Shared" Condition="Exists('..\..\..\inabox\InABox.Mobile\InABox.Mobile.iOS\InABox.Mobile.iOS.projitems')" />
   <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
 </Project>

+ 43 - 0
prs.mobile.new/PRS.Mobile.iOS/PrivacyInfo.xcprivacy.plist

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+    <dict>
+        <key>NSPrivacyAccessedAPITypes</key>
+        <array>
+            <dict>
+                <key>NSPrivacyAccessedAPIType</key>
+                <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
+                <key>NSPrivacyAccessedAPITypeReasons</key>
+                <array>
+                    <string>C617.1</string>
+                </array>
+            </dict>
+            <dict>
+                <key>NSPrivacyAccessedAPIType</key>
+                <string>NSPrivacyAccessedAPICategorySystemBootTime</string>
+                <key>NSPrivacyAccessedAPITypeReasons</key>
+                <array>
+                    <string>35F9.1</string>
+                </array>
+            </dict>
+            <dict>
+                <key>NSPrivacyAccessedAPIType</key>
+                <string>NSPrivacyAccessedAPICategoryDiskSpace</string>
+                <key>NSPrivacyAccessedAPITypeReasons</key>
+                <array>
+                    <string>E174.1</string>
+                </array>
+            </dict>
+            <!--
+                The entry below is only needed when you're using the Preferences API in your app.
+            <dict>
+                <key>NSPrivacyAccessedAPIType</key>
+                <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
+                <key>NSPrivacyAccessedAPITypeReasons</key>
+                <array>
+                    <string>CA92.1</string>
+                </array>
+            </dict> -->
+        </array>
+    </dict>
+</plist>

+ 2 - 1
prs.mobile.new/PRS.Mobile/CustomControls/ImageViewer/ImageViewerEditor.xaml

@@ -2,7 +2,8 @@
 <mobile:MobilePage 
     xmlns:local="clr-namespace:PRS.Mobile" 
     xmlns="http://xamarin.com/schemas/2014/forms"
-    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:xforms="clr-namespace:Syncfusion.SfImageEditor.XForms;assembly=Syncfusion.SfImageEditor.XForms"
+    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
+    xmlns:xforms="clr-namespace:Syncfusion.SfImageEditor.XForms;assembly=Syncfusion.SfImageEditor.XForms"
     xmlns:mobile="clr-namespace:InABox.Mobile;assembly=InABox.Mobile.Shared"
     x:Class="PRS.Mobile.ImageViewerEditor">
     

+ 26 - 4
prs.mobile.new/PRS.Mobile/Data Models/Lists/DataEntryDocument/DataEntryDocumentShell.cs

@@ -11,10 +11,13 @@ namespace PRS.Mobile
 
             columns
                 .Map(nameof(DocumentID), x => x.Document.ID)
-                .Map(nameof(FileName), x=>x.Document.FileName)
-                .Map(nameof(Thumbnail), x=>x.Thumbnail)
+                .Map(nameof(FileName), x => x.Document.FileName)
+                .Map(nameof(Thumbnail), x => x.Thumbnail)
                 .Map(nameof(TagID), x => x.Tag.ID)
-                .Map(nameof(EmployeeID), x => x.Employee.ID);
+                .Map(nameof(TagName), x => x.Tag.Name)
+                .Map(nameof(EmployeeID), x => x.Employee.ID)
+                .Map(nameof(Note), x => x.Note)
+                .Map(nameof(Created), x => x.Created);
         }
 
         // Actually not used here
@@ -46,13 +49,32 @@ namespace PRS.Mobile
         {
             get => Get<Guid>();
             set => Set(value);
-        }        
+        }     
+        
+        public String TagName
+        {
+            get => Get<String>();
+            set => Set(value);
+        } 
         
         public Guid EmployeeID
         {
             get => Get<Guid>();
             set => Set(value);
         }
+                
+        public String Note
+        {
+            get => Get<String>();
+            set => Set(value);
+        } 
+        
+                        
+        public DateTime Created
+        {
+            get => Get<DateTime>();
+            set => Set(value);
+        } 
         
     }
 }

+ 36 - 0
prs.mobile.new/PRS.Mobile/Modules/DocScanner/DocScannerEditViewModel.cs

@@ -0,0 +1,36 @@
+using System.Linq;
+using InABox.Core;
+using Xamarin.Forms;
+
+namespace PRS.Mobile
+{
+    public class DocScannerEditViewModel : BindableObject
+    {
+        private DataEntryDocumentShell _document = new ();
+        private readonly DocumentModel _imageModel;
+
+        public DataEntryDocumentShell Document
+        {
+            get => _document;
+            set
+            {
+                if (Equals(value, _document)) return;
+                _document = value;
+                _imageModel.Refresh(true);
+                OnPropertyChanged();
+                OnPropertyChanged(nameof(Image));
+            }
+        }
+
+        public DocumentShell? Image => _imageModel.Items.FirstOrDefault();
+      
+        
+        public DocScannerEditViewModel()
+        {
+            _imageModel = new DocumentModel(App.Data,
+                () => new Filter<Document>(x => x.ID).IsEqualTo(Document.DocumentID)
+            );
+        }
+        
+    }
+}

+ 65 - 0
prs.mobile.new/PRS.Mobile/Modules/DocScanner/DocScannerEditor.xaml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<mobile:MobilePage xmlns="http://xamarin.com/schemas/2014/forms"
+             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
+             xmlns:mobile="clr-namespace:InABox.Mobile;assembly=InABox.Mobile.Shared"
+             xmlns:views="http://xamarin.com/schemas/2020/toolkit"
+             xmlns:local="clr-namespace:PRS.Mobile;assembly=PRS.Mobile"
+             xmlns:xforms="clr-namespace:Syncfusion.SfImageEditor.XForms;assembly=Syncfusion.SfImageEditor.XForms"
+             x:Class="PRS.Mobile.Modules.DocScanner.DocScannerEditor">
+    
+    <mobile:MobilePage.BindingContext>
+        <local:DocScannerEditViewModel x:Name="ViewModel" />
+    </mobile:MobilePage.BindingContext>
+    
+    <mobile:MobilePage.Resources>
+        <mobile:StringToBooleanConverter x:Key="ShowIfEmpty" HasValue="False"/>
+    </mobile:MobilePage.Resources>
+    
+    <mobile:MobilePage.PrimaryMenu>
+        <mobile:MobileMenuButton x:Name="_save" Image="save" Clicked="SaveBtn_Clicked" />
+    </mobile:MobilePage.PrimaryMenu>
+    
+    <mobile:MobilePage.PageContent>
+        <Grid Margin="5">
+            
+            <Grid.RowDefinitions>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="150" />
+            </Grid.RowDefinitions>
+            
+            <mobile:MobileCard
+                Grid.Row="0" Padding="0">
+
+                <xforms:SfImageEditor 
+                    x:Name="_imageEditor"
+                    HorizontalOptions="Fill" 
+                    VerticalOptions="Fill"
+                    ImageSaving="ImageEditor_ImageSaving"
+                    EnableZooming="True">
+                    <xforms:SfImageEditor.ToolbarSettings>
+                        <xforms:ToolbarSettings VisibleShapesItems = "Rectangle,Circle,Line,Arrow" />
+                    </xforms:SfImageEditor.ToolbarSettings>
+                </xforms:SfImageEditor>
+                
+            </mobile:MobileCard>
+            
+            <mobile:MobileCard
+                Grid.Row="1"
+                BackgroundColor="LightYellow">
+                <Grid>
+                    <Label 
+                        Text="Enter Note Here" 
+                        VerticalOptions="Center" 
+                        HorizontalOptions="Center" 
+                        FontSize="{StaticResource Theme.Text.Small.Size}" TextColor="Gray"
+                        IsVisible="{Binding Document.Note, Converter={StaticResource ShowIfEmpty}}" />
+                    <mobile:MobileEditor 
+                        BackgroundColor="Transparent" 
+                        Text="{Binding Document.Note, Mode=TwoWay}"/>
+                </Grid>
+            </mobile:MobileCard>
+            
+        </Grid>
+    </mobile:MobilePage.PageContent>
+</mobile:MobilePage>

+ 79 - 0
prs.mobile.new/PRS.Mobile/Modules/DocScanner/DocScannerEditor.xaml.cs

@@ -0,0 +1,79 @@
+using System;
+using System.IO;
+using System.Threading.Tasks;
+using InABox.Core;
+using InABox.Mobile;
+using Syncfusion.SfImageEditor.XForms;
+using Xamarin.Forms;
+using Xamarin.Forms.Xaml;
+using XF.Material.Forms.UI.Dialogs;
+
+namespace PRS.Mobile.Modules.DocScanner
+{
+    [XamlCompilation(XamlCompilationOptions.Compile)]
+    public partial class DocScannerEditor
+    {
+        public DocScannerEditor(DataEntryDocumentShell document)
+        {
+            InitializeComponent();
+            ViewModel.Document = document;
+            _imageEditor.Source = ImageSource.FromStream(() => new MemoryStream(ViewModel.Image?.Data ?? new byte[] { }));
+            
+            _imageEditor.ToolbarSettings.ToolbarItems.Add( 
+                new HeaderToolbarItem 
+                { 
+                    Name = "CustomRotate", 
+                    Text = "Rotate", 
+                });
+            
+            _imageEditor.ToolbarSettings.ToolbarItemSelected += ToolbarSettings_CustomButtonClicked; 
+            
+        }
+
+        private void ToolbarSettings_CustomButtonClicked(object sender, ToolbarItemSelectedEventArgs e)
+        {
+            switch (e.ToolbarItem.Name)
+            {
+                case "CustomRotate":
+                    _imageEditor.Rotate();
+                    break;
+            }
+        }
+
+        protected override void OnAppearing() 
+        { 
+            base.OnAppearing(); 
+            _imageEditor.SetToolbarItemVisibility("save", false); 
+        } 
+        private async void ImageEditor_ImageSaving(object sender, ImageSavingEventArgs args)
+        {
+            args.Cancel = true;
+            
+            using (await MaterialDialog.Instance.LoadingDialogAsync("Saving Data"))
+            {
+                if (ViewModel.Image != null)
+                {
+                    var stream = args.Stream;
+                    MemoryStream memoryStream = new MemoryStream();
+                    await stream.CopyToAsync(memoryStream);
+                    ViewModel.Image.Data = memoryStream.ToArray();
+                    ViewModel.Image.CRC = CoreUtils.CalculateCRC(ViewModel.Image.Data);
+                    ViewModel.Image.TimeStamp = DateTime.Now;
+                    ViewModel.Image.Save("Updated from Mobile Device");
+
+                    ViewModel.Document.Thumbnail =
+                        MobileUtils.ImageTools.CreateThumbnail(ViewModel.Image.Data, 256, 256);
+                }
+                ViewModel.Document.Save("Updated from Mobile Device");
+            }
+            Navigation.PopAsync();
+        }
+
+        private void SaveBtn_Clicked(object sender, MobileMenuButtonClickedEventArgs args)
+        {
+            _imageEditor.Save();
+        }
+
+
+    }
+}

+ 99 - 3
prs.mobile.new/PRS.Mobile/Modules/DocScanner/DocScannerModule.xaml

@@ -6,8 +6,103 @@
              xmlns:local="clr-namespace:PRS.Mobile;assembly=PRS.Mobile"
              x:Class="PRS.Mobile.DocScannerModule"
              Title="Submitted Documents">
+    <mobile:MobilePage.Resources>
+        <mobile:ByteArrayToImageSourceConverter x:Key="ByteArrayToImageSourceConverter" BlankIfEmpty="True" />
+        <mobile:StringToBooleanConverter x:Key="HideIfEmpty" HasValue="True" />
+        <mobile:StringToBooleanConverter x:Key="ShowIfEmpty" HasValue="False" />
+        <DataTemplate 
+            x:Key="ImageTemplate" 
+            x:DataType="local:DataEntryDocumentShell">
+            <ViewCell>
+                <mobile:MobileCard
+                    IsClickable="True"
+                    Clicked="Image_Clicked"
+                    Margin="0,5,0,0"
+                    HeightRequest="150">
+                    
+                    <Grid>
+                            
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="150"/>
+                            <ColumnDefinition Width="0.75"/>
+                            <ColumnDefinition Width="*"/>
+                            <ColumnDefinition Width="Auto"/>
+                        </Grid.ColumnDefinitions>
+                        
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="Auto"/>
+                        </Grid.RowDefinitions>
+                            
+                        <Image
+                            Grid.Row="0"
+                            Grid.Column="0"
+                            Grid.RowSpan="2"
+                            Margin="5,5,0,5"
+                            Source="{Binding Thumbnail, Converter={StaticResource ByteArrayToImageSourceConverter}}"
+                            Aspect="AspectFit"
+                        />
+
+                        <BoxView
+                            Grid.Row="0"
+                            Grid.Column="1"
+                            Grid.RowSpan="2"
+                            Color="Black"
+                            HorizontalOptions="Fill"/>
+                        
+                        <Label
+                            Grid.Row="0"
+                            Grid.Column="2"
+                            Grid.ColumnSpan="2"
+                            Margin="0,5,5,0"
+                            FontSize="{StaticResource Theme.Text.Small.Size}"
+                            TextColor="Black"
+                            Text="{Binding Note}"
+                            IsVisible="{Binding Note, Converter={StaticResource HideIfEmpty}}"
+                            LineBreakMode="WordWrap"
+                            HorizontalTextAlignment="Start"/>
+                        
+                        <Label
+                            Grid.Row="0"
+                            Grid.Column="2"
+                            Grid.ColumnSpan="2"
+                            Margin="0,5,5,0"
+                            FontSize="{StaticResource Theme.Text.Small.Size}"
+                            TextColor="Gray"
+                            FontAttributes="Italic"
+                            Text="(Tap to enter notes)"
+                            IsVisible="{Binding Note, Converter={StaticResource ShowIfEmpty}}"
+                            LineBreakMode="WordWrap"
+                            HorizontalTextAlignment="Start"/>
+                            
+                        <Label
+                            Grid.Row="1"
+                            Grid.Column="2"
+                            Margin="0,5,5,5"
+                            FontSize="{StaticResource Theme.Text.Small.Size}"
+                            FontAttributes="Italic"
+                            TextColor="Black"
+                            Text="{Binding TagName}"
+                            HorizontalTextAlignment="Start"/>
+                        
+                        <Label
+                            Grid.Row="1"
+                            Grid.Column="3"
+                            Margin="0,5,5,5"
+                            FontSize="{StaticResource Theme.Text.Small.Size}"
+                            FontAttributes="Italic"
+                            TextColor="Black"
+                            Text="{Binding Created, StringFormat='{0:dd MMM yy}'}"
+                            HorizontalTextAlignment="End"/>
+                        
+
+                            
+                    </Grid>
+                </mobile:MobileCard>
+            </ViewCell>
+        </DataTemplate>
+    </mobile:MobilePage.Resources>
     <mobile:MobilePage.PrimaryMenu>
-        
         <mobile:MobileMenuButton
             Image="plus">
             <mobile:MobileMenuButton.Items>
@@ -19,12 +114,13 @@
     </mobile:MobilePage.PrimaryMenu>
     
     <mobile:MobilePage.PageContent>
-        <local:DocumentList
+        <mobile:MobileListView
             x:Name="_documents" 
             PullToRefresh="True"
             RefreshRequested="_documents_OnRefreshRequested"
             ShowRecordCount = "True"
-            Margin="5"/>
+            Margin="5"
+            ItemTemplate="{StaticResource ImageTemplate}"/>
     </mobile:MobilePage.PageContent>
     
 </mobile:MobilePage>

+ 74 - 9
prs.mobile.new/PRS.Mobile/Modules/DocScanner/DocScannerModule.xaml.cs

@@ -4,10 +4,14 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using Comal.Classes;
+using InABox.Clients;
 using InABox.Core;
 using InABox.Mobile;
+using PRS.Mobile.Modules.DocScanner;
 using Xamarin.Forms;
 using Xamarin.Forms.Xaml;
+using XF.Material.Forms.UI;
+using XF.Material.Forms.UI.Dialogs;
 
 namespace PRS.Mobile
 {
@@ -15,11 +19,11 @@ namespace PRS.Mobile
     public partial class DocScannerModule
     {
         private DataEntryTagModel _tags;
-        private DataEntryDocumentModel _dataEntriesDocument;
+        private DataEntryDocumentModel _dataEntryDocuments;
         
         public DocScannerModule()
         {
-            _dataEntriesDocument = new DataEntryDocumentModel(App.Data,
+            _dataEntryDocuments = new DataEntryDocumentModel(App.Data,
                 () => new Filter<DataEntryDocument>(x => x.Employee.ID).IsEqualTo(App.Data.Me.ID)
                     .And(x => x.Archived).IsEqualTo(DateTime.MinValue)
             ) { FileName = "scans.data" };
@@ -32,7 +36,7 @@ namespace PRS.Mobile
 
         private void RefreshData(bool force, bool async)
         {
-            _dataEntriesDocument.Refresh(force);
+            _dataEntryDocuments.Refresh(force);
             
             Task[] tasks = new Task[]
             {
@@ -52,31 +56,86 @@ namespace PRS.Mobile
         {
             ProgressVisible = false;
             _documents.ItemsSource = null;
-            _documents.ItemsSource = _dataEntriesDocument;
+            _documents.ItemsSource = _dataEntryDocuments.Items;
         }
 
         private async Task<bool> ConfirmScan(DataEntryDocumentShell documentShell)
         {
             documentShell.EmployeeID = App.Data.Me.ID;
-            if (!_tags.Any()) 
+            if ((_tags?.Count() ?? 0) < 1)
+            {
+                documentShell.TagID = _tags.Items.FirstOrDefault()?.ID ?? Guid.Empty;
                 return true;
-
+            }
             var tag = await DisplayActionSheet("Select Tag", "Cancel", null, _tags.Items.Select(x => x.Name).ToArray());
             documentShell.TagID = _tags.Items.FirstOrDefault(x => String.Equals(x.Name, tag))?.ID ?? Guid.Empty;
-            
             return !string.Equals(tag,"Cancel");
         }
+        
+        
+        public async Task<bool> AddImage<T, TOptions>(TOptions options, Func<DataEntryDocumentShell,Task<bool>>? customiseshell = null) 
+            where T : MobileDocumentSource
+            where TOptions : MobileImageOptions<T>
+        {
+            
+            MobileDocument file = null;
+            try
+            {
+                file = await MobileDocument.From(options);
+            }
+            
+            catch (Exception e)
+            {
+                await MaterialDialog.Instance.AlertAsync(e.Message, "ERROR");
+            }
+            
+            if (file?.Data?.Any() == true)
+            {
+                var ext = System.IO.Path.GetExtension(file.FileName);
+                file.FileName = System.IO.Path.ChangeExtension(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), ext);
+                var shell = _dataEntryDocuments.CreateItem();
+                
+                bool confirm = (customiseshell == null) || await customiseshell.Invoke(shell);
+                if (confirm)
+                {
+                    
+                    shell.Thumbnail = MobileUtils.ImageTools.CreateThumbnail(file.Data, 256, 256);
+                    shell.FileName = file.FileName;
+                    
+                    using (await MaterialDialog.Instance.LoadingDialogAsync("Saving Image"))
+                    {
+                        
+                        Document doc = new Document()
+                        {
+                            FileName = file.FileName,
+                            Data = file.Data,
+                            CRC = CoreUtils.CalculateCRC(file.Data),
+                            TimeStamp = DateTime.Now
+                        };
+                        new Client<Document>().Save(doc, "Created on Mobile Device");
+                        
+                        shell.DocumentID = doc.ID;
+                        shell.Save("Created on Mobile Device");
+                        _dataEntryDocuments.CommitItem(shell);
+                        Dispatcher.BeginInvokeOnMainThread(() => RefreshData(true,false));
+                        return true;
+                    }
+                }
+
+            }
+            return false;
+        }
 
         private async void TakePhoto_Clicked(object sender, EventArgs e)
         {
-            await _documents.AddImage<MobileDocumentCameraSource, MobileDocumentCameraOptions,DataEntryDocumentShell>(
+            await AddImage<MobileDocumentCameraSource, MobileDocumentCameraOptions>(
                 PhotoUtils.CreateCameraOptions(), 
                 ConfirmScan);
         }
 
         private async void BrowseLibrary_Clicked(object sender, EventArgs e)
         {
-            await _documents.AddImage<MobileDocumentPhotoLibrarySource,MobileDocumentPhotoLibraryOptions,DataEntryDocumentShell>(
+            await AddImage<MobileDocumentPhotoLibrarySource,MobileDocumentPhotoLibraryOptions>(
                 PhotoUtils.CreatePhotoLibraryOptions(), 
                 ConfirmScan);
         }
@@ -85,5 +144,11 @@ namespace PRS.Mobile
         {
             RefreshData(true,false);
         }
+
+        private void Image_Clicked(object sender, EventArgs e)
+        {
+            if ((sender as MobileCard)?.BindingContext is DataEntryDocumentShell shell)
+                Navigation.PushAsync(new DocScannerEditor(shell));
+        }
     }
 }