Forráskód Böngészése

Added SAVE button back into stock take completion page and RecTransCompletion.
Improving stock transfer system.

Kenric Nugteren 1 éve
szülő
commit
282a9bdd7f

+ 1 - 2
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.
@@ -15,7 +14,7 @@ namespace PRS.Mobile.Droid
 {
 	
 	
-	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.2.120")]
+	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.0.93")]
 	public partial class Resource
 	{
 		

+ 249 - 182
prs.mobile.new/PRS.Mobile.iOS/PRS.Mobile.iOS.csproj

@@ -1,185 +1,252 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-    <PropertyGroup>
-        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-        <Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
-        <ProductVersion>8.0.30703</ProductVersion>
-        <SchemaVersion>2.0</SchemaVersion>
-        <ProjectGuid>{2869560F-3142-4C75-8028-95F7C613D61B}</ProjectGuid>
-        <ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-        <OutputType>Exe</OutputType>
-        <RootNamespace>PRS.Mobile.iOS</RootNamespace>
-        <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
-        <AssemblyName>PRS.Mobile.iOS</AssemblyName>
-        <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
-        <LangVersion>9</LangVersion>
-    </PropertyGroup>
-    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
-        <DebugSymbols>true</DebugSymbols>
-        <DebugType>full</DebugType>
-        <Optimize>false</Optimize>
-        <OutputPath>bin\iPhoneSimulator\Debug</OutputPath>
-        <DefineConstants>DEBUG</DefineConstants>
-        <ErrorReport>prompt</ErrorReport>
-        <WarningLevel>4</WarningLevel>
-        <ConsolePause>false</ConsolePause>
-        <MtouchArch>x86_64</MtouchArch>
-        <MtouchLink>None</MtouchLink>
-        <MtouchDebug>true</MtouchDebug>
-    </PropertyGroup>
-    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
-        <DebugType>none</DebugType>
-        <Optimize>true</Optimize>
-        <OutputPath>bin\iPhoneSimulator\Release</OutputPath>
-        <ErrorReport>prompt</ErrorReport>
-        <WarningLevel>4</WarningLevel>
-        <MtouchLink>None</MtouchLink>
-        <MtouchArch>x86_64</MtouchArch>
-        <ConsolePause>false</ConsolePause>
-    </PropertyGroup>
-    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
-        <DebugSymbols>true</DebugSymbols>
-        <DebugType>full</DebugType>
-        <Optimize>false</Optimize>
-        <OutputPath>bin\iPhone\Debug</OutputPath>
-        <DefineConstants>DEBUG</DefineConstants>
-        <ErrorReport>prompt</ErrorReport>
-        <WarningLevel>4</WarningLevel>
-        <ConsolePause>false</ConsolePause>
-        <MtouchArch>ARM64</MtouchArch>
-        <CodesignKey>iPhone Developer</CodesignKey>
-        <MtouchDebug>true</MtouchDebug>
-        <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
-        <Commandlineparameters></Commandlineparameters>
-        <CreatePackage></CreatePackage>
-        <MtouchLink>None</MtouchLink>
-        <MtouchExtraArgs>--interpreter</MtouchExtraArgs>
-    </PropertyGroup>
-    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
-        <DebugType>none</DebugType>
-        <Optimize>true</Optimize>
-        <OutputPath>bin\iPhone\Release</OutputPath>
-        <ErrorReport>prompt</ErrorReport>
-        <WarningLevel>4</WarningLevel>
-        <MtouchArch>ARM64</MtouchArch>
-        <ConsolePause>false</ConsolePause>
-        <CodesignKey>iPhone Developer</CodesignKey>
-        <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
-        <CodesignProvision>Automatic</CodesignProvision>
-        <EnablePackageSigning></EnablePackageSigning>
-        <CodesignExtraArgs></CodesignExtraArgs>
-        <CrashReportingEnabled>false</CrashReportingEnabled>
-        <EnableCodeSigning></EnableCodeSigning>
-    </PropertyGroup>
-    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Ad-Hoc|iPhone' ">
-        <DebugType>none</DebugType>
-        <Optimize>True</Optimize>
-        <OutputPath>bin\iPhone\Ad-Hoc</OutputPath>
-        <ErrorReport>prompt</ErrorReport>
-        <WarningLevel>4</WarningLevel>
-        <ConsolePause>False</ConsolePause>
-        <MtouchArch>ARM64</MtouchArch>
-        <BuildIpa>True</BuildIpa>
-        <CodesignProvision>Automatic:AdHoc</CodesignProvision>
-        <CodesignKey>iPhone Distribution</CodesignKey>
-        <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
-    </PropertyGroup>
-    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'AppStore|iPhone' ">
-        <DebugType>none</DebugType>
-        <Optimize>True</Optimize>
-        <OutputPath>bin\iPhone\AppStore</OutputPath>
-        <ErrorReport>prompt</ErrorReport>
-        <WarningLevel>4</WarningLevel>
-        <ConsolePause>False</ConsolePause>
-        <MtouchArch>ARM64</MtouchArch>
-        <CodesignProvision>Automatic:AppStore</CodesignProvision>
-        <CodesignKey>iPhone Distribution</CodesignKey>
-        <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
-    </PropertyGroup>
-    <ItemGroup>
-        <Compile Include="Main.cs" />
-        <Compile Include="AppDelegate.cs" />
-        <None Include="Entitlements.plist" />
-        <None Include="Info.plist" />
-        <Compile Include="Properties\AssemblyInfo.cs" />
-    </ItemGroup>
-    <ItemGroup>
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\100.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\128.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\16.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\172.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\196.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\216.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\256.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\32.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\48.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\512.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\55.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\64.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\88.png" />
-        <ImageAsset Include="Assets.xcassets\logo.imageset\PRS-4.pdf" />
-        <ImageAsset Include="Assets.xcassets\splash.imageset\Contents.json" />
-        <ImageAsset Include="Assets.xcassets\splash.imageset\PRS-digital.pdf" />
-        <InterfaceDefinition Include="Resources\LaunchScreen.storyboard" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Contents.json">
-            <Visible>false</Visible>
-        </ImageAsset>
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\1024.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\76.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\60.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\58.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\167.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\29.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\120.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\20.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\180.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\80.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\40.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\87.png" />
-        <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\152.png" />
-        <ImageAsset Include="Assets.xcassets\Contents.json" />
-        <ImageAsset Include="Assets.xcassets\logo.imageset\Contents.json" />
-    </ItemGroup>
-    <ItemGroup>
-        <Reference Include="System" />
-        <Reference Include="System.Net.Http" />
-        <Reference Include="System.Xml" />
-        <Reference Include="System.Core" />
-        <Reference Include="Xamarin.iOS" />
-    </ItemGroup>
-    <ItemGroup>
-        <PackageReference Include="Plugin.LocalNotification" Version="10.1.8" />
-        <PackageReference Include="Resizetizer.NT" Version="0.3.0">
-          <PrivateAssets>all</PrivateAssets>
-          <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
-        </PackageReference>
-        <PackageReference Include="Syncfusion.Xamarin.SfPopupLayout" Version="23.2.4" />
-        <PackageReference Include="System.Json" Version="4.7.1" />
-        <PackageReference Include="Xamarin.Essentials" Version="1.8.0" />
-        <PackageReference Include="Xamarin.Forms" Version="5.0.0.2622" />
-        <PackageReference Include="Xamarin.IQKeyboardManager" Version="1.4.1" />
-        <PackageReference Include="XF.Material" Version="1.8.0" />
-        <PackageReference Include="ZXing.Net.Mobile" Version="2.4.1" />
-        <PackageReference Include="ZXing.Net.Mobile.Forms" Version="2.4.1" />
-    </ItemGroup>
-    <ItemGroup>
-        <ProjectReference Include="..\..\..\inabox\InABox.Core\InABox.Core.csproj">
-          <Project>{cd727653-322b-4b8f-8bc0-86e6e85eb6f9}</Project>
-          <Name>InABox.Core</Name>
-        </ProjectReference>
-        <ProjectReference Include="..\..\..\inabox\InABox.Mobile\InABox.Mobile.Shared\InABox.Mobile.Shared.csproj">
-          <Project>{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}</Project>
-          <Name>InABox.Mobile.Shared</Name>
-        </ProjectReference>
-        <ProjectReference Include="..\PRS.Mobile\PRS.Mobile.csproj">
-            <Project>{2E807D8C-659F-464D-89FE-3889019BE8EA}</Project>
-            <Name>PRS.Mobile</Name>
-        </ProjectReference>
-        <ProjectReference Include="..\..\..\inabox\InABox.RPC.Shared\InABox.RPC.Shared.csproj">
-          <Project>{0F43274E-1928-4A12-811F-77FBB882C60C}</Project>
-          <Name>InABox.RPC.Shared</Name>
-        </ProjectReference>
-    </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" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{2869560F-3142-4C75-8028-95F7C613D61B}</ProjectGuid>
+    <ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <OutputType>Exe</OutputType>
+    <RootNamespace>PRS.Mobile.iOS</RootNamespace>
+    <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
+    <AssemblyName>PRS.Mobile.iOS</AssemblyName>
+    <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
+    <LangVersion>9</LangVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\iPhoneSimulator\Debug</OutputPath>
+    <DefineConstants>DEBUG</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+    <MtouchArch>x86_64</MtouchArch>
+    <MtouchLink>None</MtouchLink>
+    <MtouchDebug>true</MtouchDebug>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
+    <DebugType>none</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\iPhoneSimulator\Release</OutputPath>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <MtouchLink>None</MtouchLink>
+    <MtouchArch>x86_64</MtouchArch>
+    <ConsolePause>false</ConsolePause>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\iPhone\Debug</OutputPath>
+    <DefineConstants>DEBUG</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+    <MtouchArch>ARM64</MtouchArch>
+    <CodesignKey>iPhone Developer</CodesignKey>
+    <MtouchDebug>true</MtouchDebug>
+    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
+    <Commandlineparameters>
+    </Commandlineparameters>
+    <CreatePackage>
+    </CreatePackage>
+    <MtouchLink>None</MtouchLink>
+    <MtouchExtraArgs>--interpreter</MtouchExtraArgs>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
+    <DebugType>none</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\iPhone\Release</OutputPath>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <MtouchArch>ARM64</MtouchArch>
+    <ConsolePause>false</ConsolePause>
+    <CodesignKey>iPhone Developer</CodesignKey>
+    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
+    <CodesignProvision>Automatic</CodesignProvision>
+    <EnablePackageSigning>
+    </EnablePackageSigning>
+    <CodesignExtraArgs>
+    </CodesignExtraArgs>
+    <CrashReportingEnabled>false</CrashReportingEnabled>
+    <EnableCodeSigning>
+    </EnableCodeSigning>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Ad-Hoc|iPhone' ">
+    <DebugType>none</DebugType>
+    <Optimize>True</Optimize>
+    <OutputPath>bin\iPhone\Ad-Hoc</OutputPath>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>False</ConsolePause>
+    <MtouchArch>ARM64</MtouchArch>
+    <BuildIpa>True</BuildIpa>
+    <CodesignProvision>Automatic:AdHoc</CodesignProvision>
+    <CodesignKey>iPhone Distribution</CodesignKey>
+    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'AppStore|iPhone' ">
+    <DebugType>none</DebugType>
+    <Optimize>True</Optimize>
+    <OutputPath>bin\iPhone\AppStore</OutputPath>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>False</ConsolePause>
+    <MtouchArch>ARM64</MtouchArch>
+    <CodesignProvision>Automatic:AppStore</CodesignProvision>
+    <CodesignKey>iPhone Distribution</CodesignKey>
+    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Include="Main.cs" />
+    <Compile Include="AppDelegate.cs" />
+    <None Include="Entitlements.plist" />
+    <None Include="Info.plist" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\100.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\128.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\16.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\172.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\196.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\216.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\256.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\32.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\48.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\512.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\55.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\64.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\88.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\logo.imageset\PRS-4.pdf">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\splash.imageset\Contents.json">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\splash.imageset\PRS-digital.pdf">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <InterfaceDefinition Include="Resources\LaunchScreen.storyboard" />
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Contents.json">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\1024.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\76.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\60.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\58.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\167.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\29.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\120.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\20.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\180.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\80.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\40.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\87.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\152.png">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\Contents.json">
+      <Visible>false</Visible>
+    </ImageAsset>
+    <ImageAsset Include="Assets.xcassets\logo.imageset\Contents.json">
+      <Visible>false</Visible>
+    </ImageAsset>
+  </ItemGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+    <Reference Include="System.Core" />
+    <Reference Include="Xamarin.iOS" />
+  </ItemGroup>
+  <ItemGroup>
+    <PackageReference Include="Plugin.LocalNotification" Version="10.1.8" />
+    <PackageReference Include="Resizetizer.NT" Version="0.3.0">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+    <PackageReference Include="Syncfusion.Xamarin.SfPopupLayout" Version="23.2.4" />
+    <PackageReference Include="System.Json" Version="4.7.1" />
+    <PackageReference Include="Xamarin.Essentials" Version="1.8.0" />
+    <PackageReference Include="Xamarin.Forms" Version="5.0.0.2622" />
+    <PackageReference Include="Xamarin.IQKeyboardManager" Version="1.4.1" />
+    <PackageReference Include="XF.Material" Version="1.8.0" />
+    <PackageReference Include="ZXing.Net.Mobile" Version="2.4.1" />
+    <PackageReference Include="ZXing.Net.Mobile.Forms" Version="2.4.1" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\inabox\InABox.Core\InABox.Core.csproj">
+      <Project>{cd727653-322b-4b8f-8bc0-86e6e85eb6f9}</Project>
+      <Name>InABox.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\inabox\InABox.Mobile\InABox.Mobile.Shared\InABox.Mobile.Shared.csproj">
+      <Project>{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}</Project>
+      <Name>InABox.Mobile.Shared</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\PRS.Mobile\PRS.Mobile.csproj">
+      <Project>{2E807D8C-659F-464D-89FE-3889019BE8EA}</Project>
+      <Name>PRS.Mobile</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\inabox\InABox.RPC.Shared\InABox.RPC.Shared.csproj">
+      <Project>{0F43274E-1928-4A12-811F-77FBB882C60C}</Project>
+      <Name>InABox.RPC.Shared</Name>
+    </ProjectReference>
+  </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>

+ 107 - 8
prs.mobile.new/PRS.Mobile.sln

@@ -1,31 +1,33 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRS.Mobile", "PRS.Mobile\PRS.Mobile.csproj", "{2E807D8C-659F-464D-89FE-3889019BE8EA}"
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.33530.505
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PRS.Mobile", "PRS.Mobile\PRS.Mobile.csproj", "{2E807D8C-659F-464D-89FE-3889019BE8EA}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRS.Mobile.Droid", "PRS.Mobile.Droid\PRS.Mobile.Droid.csproj", "{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRS.Mobile.iOS", "PRS.Mobile.iOS\PRS.Mobile.iOS.csproj", "{2869560F-3142-4C75-8028-95F7C613D61B}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRSClasses", "..\prs.classes\PRSClasses.csproj", "{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PRSClasses", "..\prs.classes\PRSClasses.csproj", "{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "InABox", "InABox", "{0FAD249B-2C90-4ABC-B14D-8D1C44D071C2}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Apps", "Apps", "{45D05CAD-26CA-4F1F-86F1-560B0C7C5177}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InABox.Core", "..\..\inabox\InABox.Core\InABox.Core.csproj", "{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InABox.Core", "..\..\inabox\InABox.Core\InABox.Core.csproj", "{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InABox.Client.RPC", "..\..\inabox\InABox.Client.RPC\InABox.Client.RPC.csproj", "{67B31443-B442-4817-97B4-D8918FD4F8D1}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InABox.Client.RPC", "..\..\inabox\InABox.Client.RPC\InABox.Client.RPC.csproj", "{67B31443-B442-4817-97B4-D8918FD4F8D1}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InABox.Logging.Shared", "..\..\inabox\inabox.logging.shared\InABox.Logging.Shared.csproj", "{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InABox.Logging.Shared", "..\..\inabox\inabox.logging.shared\InABox.Logging.Shared.csproj", "{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InABox.RPC.Shared", "..\..\inabox\InABox.RPC.Shared\InABox.RPC.Shared.csproj", "{0F43274E-1928-4A12-811F-77FBB882C60C}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InABox.RPC.Shared", "..\..\inabox\InABox.RPC.Shared\InABox.RPC.Shared.csproj", "{0F43274E-1928-4A12-811F-77FBB882C60C}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ThirdPartyLibs", "ThirdPartyLibs", "{D70FB71D-5C9D-44FC-AF66-3B9A23AD7FFD}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PdfiumAndroid", "..\..\3rdpartylibs\pdfium-android\PdfiumAndroid\PdfiumAndroid\PdfiumAndroid.csproj", "{63845795-416F-4848-9DC1-63E992803D29}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InABox.Mobile.Shared", "..\..\inabox\InABox.Mobile\InABox.Mobile.Shared\InABox.Mobile.Shared.csproj", "{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InABox.Mobile.Shared", "..\..\inabox\InABox.Mobile\InABox.Mobile.Shared\InABox.Mobile.Shared.csproj", "{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}"
 EndProject
 Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "InABox.Mobile.Android", "..\..\inabox\InABox.Mobile\InABox.Mobile.Android\InABox.Mobile.Android.shproj", "{DF11E3A5-F670-4B09-AD37-01D9ED5ED3BA}"
 EndProject
@@ -33,8 +35,12 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "InABox.Mobile.iOS", "..\..\
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
 		Ad-Hoc|iPhone = Ad-Hoc|iPhone
+		Ad-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator
+		AppStore|Any CPU = AppStore|Any CPU
 		AppStore|iPhone = AppStore|iPhone
+		AppStore|iPhoneSimulator = AppStore|iPhoneSimulator
 		Debug|Any CPU = Debug|Any CPU
 		Debug|iPhone = Debug|iPhone
 		Debug|iPhoneSimulator = Debug|iPhoneSimulator
@@ -43,10 +49,18 @@ Global
 		Release|iPhoneSimulator = Release|iPhoneSimulator
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{2E807D8C-659F-464D-89FE-3889019BE8EA}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+		{2E807D8C-659F-464D-89FE-3889019BE8EA}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
 		{2E807D8C-659F-464D-89FE-3889019BE8EA}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
 		{2E807D8C-659F-464D-89FE-3889019BE8EA}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+		{2E807D8C-659F-464D-89FE-3889019BE8EA}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{2E807D8C-659F-464D-89FE-3889019BE8EA}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+		{2E807D8C-659F-464D-89FE-3889019BE8EA}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+		{2E807D8C-659F-464D-89FE-3889019BE8EA}.AppStore|Any CPU.Build.0 = Release|Any CPU
 		{2E807D8C-659F-464D-89FE-3889019BE8EA}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
 		{2E807D8C-659F-464D-89FE-3889019BE8EA}.AppStore|iPhone.Build.0 = Debug|Any CPU
+		{2E807D8C-659F-464D-89FE-3889019BE8EA}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{2E807D8C-659F-464D-89FE-3889019BE8EA}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
 		{2E807D8C-659F-464D-89FE-3889019BE8EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{2E807D8C-659F-464D-89FE-3889019BE8EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{2E807D8C-659F-464D-89FE-3889019BE8EA}.Debug|iPhone.ActiveCfg = Debug|Any CPU
@@ -59,12 +73,24 @@ Global
 		{2E807D8C-659F-464D-89FE-3889019BE8EA}.Release|iPhone.Build.0 = Release|Any CPU
 		{2E807D8C-659F-464D-89FE-3889019BE8EA}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{2E807D8C-659F-464D-89FE-3889019BE8EA}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
+		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Ad-Hoc|Any CPU.Deploy.0 = Release|Any CPU
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Ad-Hoc|iPhone.Deploy.0 = Debug|Any CPU
+		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|Any CPU
+		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.AppStore|Any CPU.Build.0 = Release|Any CPU
+		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.AppStore|Any CPU.Deploy.0 = Release|Any CPU
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.AppStore|iPhone.Build.0 = Debug|Any CPU
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.AppStore|iPhone.Deploy.0 = Debug|Any CPU
+		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
+		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.AppStore|iPhoneSimulator.Deploy.0 = Release|Any CPU
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
@@ -83,12 +109,20 @@ Global
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
+		{2869560F-3142-4C75-8028-95F7C613D61B}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhoneSimulator
+		{2869560F-3142-4C75-8028-95F7C613D61B}.Ad-Hoc|Any CPU.Build.0 = Ad-Hoc|iPhoneSimulator
 		{2869560F-3142-4C75-8028-95F7C613D61B}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone
 		{2869560F-3142-4C75-8028-95F7C613D61B}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone
 		{2869560F-3142-4C75-8028-95F7C613D61B}.Ad-Hoc|iPhone.Deploy.0 = Ad-Hoc|iPhone
+		{2869560F-3142-4C75-8028-95F7C613D61B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator
+		{2869560F-3142-4C75-8028-95F7C613D61B}.Ad-Hoc|iPhoneSimulator.Build.0 = Ad-Hoc|iPhoneSimulator
+		{2869560F-3142-4C75-8028-95F7C613D61B}.AppStore|Any CPU.ActiveCfg = AppStore|iPhoneSimulator
+		{2869560F-3142-4C75-8028-95F7C613D61B}.AppStore|Any CPU.Build.0 = AppStore|iPhoneSimulator
 		{2869560F-3142-4C75-8028-95F7C613D61B}.AppStore|iPhone.ActiveCfg = AppStore|iPhone
 		{2869560F-3142-4C75-8028-95F7C613D61B}.AppStore|iPhone.Build.0 = AppStore|iPhone
 		{2869560F-3142-4C75-8028-95F7C613D61B}.AppStore|iPhone.Deploy.0 = AppStore|iPhone
+		{2869560F-3142-4C75-8028-95F7C613D61B}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator
+		{2869560F-3142-4C75-8028-95F7C613D61B}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator
 		{2869560F-3142-4C75-8028-95F7C613D61B}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
 		{2869560F-3142-4C75-8028-95F7C613D61B}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
 		{2869560F-3142-4C75-8028-95F7C613D61B}.Debug|Any CPU.Deploy.0 = Debug|iPhoneSimulator
@@ -107,10 +141,18 @@ Global
 		{2869560F-3142-4C75-8028-95F7C613D61B}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
 		{2869560F-3142-4C75-8028-95F7C613D61B}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
 		{2869560F-3142-4C75-8028-95F7C613D61B}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator
+		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
 		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
 		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.AppStore|Any CPU.Build.0 = Release|Any CPU
 		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
 		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.AppStore|iPhone.Build.0 = Debug|Any CPU
+		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
 		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.Debug|iPhone.ActiveCfg = Debug|Any CPU
@@ -123,10 +165,18 @@ Global
 		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.Release|iPhone.Build.0 = Release|Any CPU
 		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{4C0ACD55-674F-4D26-AB87-BA281E34FBA3}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
 		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
 		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.AppStore|Any CPU.Build.0 = Release|Any CPU
 		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
 		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.AppStore|iPhone.Build.0 = Debug|Any CPU
+		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
 		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.Debug|iPhone.ActiveCfg = Debug|Any CPU
@@ -139,10 +189,18 @@ Global
 		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.Release|iPhone.Build.0 = Release|Any CPU
 		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{CD727653-322B-4B8F-8BC0-86E6E85EB6F9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{67B31443-B442-4817-97B4-D8918FD4F8D1}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+		{67B31443-B442-4817-97B4-D8918FD4F8D1}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
 		{67B31443-B442-4817-97B4-D8918FD4F8D1}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
 		{67B31443-B442-4817-97B4-D8918FD4F8D1}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+		{67B31443-B442-4817-97B4-D8918FD4F8D1}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{67B31443-B442-4817-97B4-D8918FD4F8D1}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+		{67B31443-B442-4817-97B4-D8918FD4F8D1}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+		{67B31443-B442-4817-97B4-D8918FD4F8D1}.AppStore|Any CPU.Build.0 = Release|Any CPU
 		{67B31443-B442-4817-97B4-D8918FD4F8D1}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
 		{67B31443-B442-4817-97B4-D8918FD4F8D1}.AppStore|iPhone.Build.0 = Debug|Any CPU
+		{67B31443-B442-4817-97B4-D8918FD4F8D1}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{67B31443-B442-4817-97B4-D8918FD4F8D1}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
 		{67B31443-B442-4817-97B4-D8918FD4F8D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{67B31443-B442-4817-97B4-D8918FD4F8D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{67B31443-B442-4817-97B4-D8918FD4F8D1}.Debug|iPhone.ActiveCfg = Debug|Any CPU
@@ -155,10 +213,18 @@ Global
 		{67B31443-B442-4817-97B4-D8918FD4F8D1}.Release|iPhone.Build.0 = Release|Any CPU
 		{67B31443-B442-4817-97B4-D8918FD4F8D1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{67B31443-B442-4817-97B4-D8918FD4F8D1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
 		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
 		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.AppStore|Any CPU.Build.0 = Release|Any CPU
 		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
 		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.AppStore|iPhone.Build.0 = Debug|Any CPU
+		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
 		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.Debug|iPhone.ActiveCfg = Debug|Any CPU
@@ -171,10 +237,18 @@ Global
 		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.Release|iPhone.Build.0 = Release|Any CPU
 		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{1EAD7E02-7C10-4175-B022-BB33A44BDD1A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{0F43274E-1928-4A12-811F-77FBB882C60C}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+		{0F43274E-1928-4A12-811F-77FBB882C60C}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
 		{0F43274E-1928-4A12-811F-77FBB882C60C}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
 		{0F43274E-1928-4A12-811F-77FBB882C60C}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+		{0F43274E-1928-4A12-811F-77FBB882C60C}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{0F43274E-1928-4A12-811F-77FBB882C60C}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+		{0F43274E-1928-4A12-811F-77FBB882C60C}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+		{0F43274E-1928-4A12-811F-77FBB882C60C}.AppStore|Any CPU.Build.0 = Release|Any CPU
 		{0F43274E-1928-4A12-811F-77FBB882C60C}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
 		{0F43274E-1928-4A12-811F-77FBB882C60C}.AppStore|iPhone.Build.0 = Debug|Any CPU
+		{0F43274E-1928-4A12-811F-77FBB882C60C}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{0F43274E-1928-4A12-811F-77FBB882C60C}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
 		{0F43274E-1928-4A12-811F-77FBB882C60C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{0F43274E-1928-4A12-811F-77FBB882C60C}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{0F43274E-1928-4A12-811F-77FBB882C60C}.Debug|iPhone.ActiveCfg = Debug|Any CPU
@@ -187,10 +261,18 @@ Global
 		{0F43274E-1928-4A12-811F-77FBB882C60C}.Release|iPhone.Build.0 = Release|Any CPU
 		{0F43274E-1928-4A12-811F-77FBB882C60C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{0F43274E-1928-4A12-811F-77FBB882C60C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{63845795-416F-4848-9DC1-63E992803D29}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+		{63845795-416F-4848-9DC1-63E992803D29}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
 		{63845795-416F-4848-9DC1-63E992803D29}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
 		{63845795-416F-4848-9DC1-63E992803D29}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+		{63845795-416F-4848-9DC1-63E992803D29}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{63845795-416F-4848-9DC1-63E992803D29}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+		{63845795-416F-4848-9DC1-63E992803D29}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+		{63845795-416F-4848-9DC1-63E992803D29}.AppStore|Any CPU.Build.0 = Release|Any CPU
 		{63845795-416F-4848-9DC1-63E992803D29}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
 		{63845795-416F-4848-9DC1-63E992803D29}.AppStore|iPhone.Build.0 = Debug|Any CPU
+		{63845795-416F-4848-9DC1-63E992803D29}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{63845795-416F-4848-9DC1-63E992803D29}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
 		{63845795-416F-4848-9DC1-63E992803D29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{63845795-416F-4848-9DC1-63E992803D29}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{63845795-416F-4848-9DC1-63E992803D29}.Debug|iPhone.ActiveCfg = Debug|Any CPU
@@ -203,10 +285,18 @@ Global
 		{63845795-416F-4848-9DC1-63E992803D29}.Release|iPhone.Build.0 = Release|Any CPU
 		{63845795-416F-4848-9DC1-63E992803D29}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{63845795-416F-4848-9DC1-63E992803D29}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
 		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
 		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.AppStore|Any CPU.Build.0 = Debug|Any CPU
 		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.AppStore|iPhone.ActiveCfg = Release|Any CPU
 		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.AppStore|iPhone.Build.0 = Release|Any CPU
+		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
 		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.Debug|iPhone.ActiveCfg = Debug|Any CPU
@@ -220,6 +310,9 @@ Global
 		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{C4F5BF06-CAB8-47CF-8B0A-FF3406081781}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
 	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
 		{2E807D8C-659F-464D-89FE-3889019BE8EA} = {45D05CAD-26CA-4F1F-86F1-560B0C7C5177}
 		{5626C3A2-09F9-4CBC-BD52-10BB5CD9F452} = {45D05CAD-26CA-4F1F-86F1-560B0C7C5177}
@@ -234,4 +327,10 @@ Global
 		{DF11E3A5-F670-4B09-AD37-01D9ED5ED3BA} = {0FAD249B-2C90-4ABC-B14D-8D1C44D071C2}
 		{DAA14944-1DA1-4E7A-B9D2-A6545EBBF2FF} = {0FAD249B-2C90-4ABC-B14D-8D1C44D071C2}
 	EndGlobalSection
+	GlobalSection(SharedMSBuildProjectFiles) = preSolution
+		..\..\inabox\InABox.Mobile\InABox.Mobile.iOS\InABox.Mobile.iOS.projitems*{2869560f-3142-4c75-8028-95f7c613d61b}*SharedItemsImports = 4
+		..\..\inabox\InABox.Mobile\InABox.Mobile.Android\InABox.Mobile.Android.projitems*{5626c3a2-09f9-4cbc-bd52-10bb5cd9f452}*SharedItemsImports = 4
+		..\..\inabox\InABox.Mobile\InABox.Mobile.iOS\InABox.Mobile.iOS.projitems*{daa14944-1da1-4e7a-b9d2-a6545ebbf2ff}*SharedItemsImports = 13
+		..\..\inabox\InABox.Mobile\InABox.Mobile.Android\InABox.Mobile.Android.projitems*{df11e3a5-f670-4b09-ad37-01d9ed5ed3ba}*SharedItemsImports = 13
+	EndGlobalSection
 EndGlobal

+ 4 - 4
prs.mobile.new/PRS.Mobile/CustomControls/Selection Screens/GenericSelectionPage.xaml.cs

@@ -63,11 +63,11 @@ namespace PRS.Mobile
         
         public IColumns HiddenColumns { get; set; }
         
-        public ISortOrder Sort { get; set; }
+        public ISortOrder? Sort { get; set; }
 
-        public Func<CoreRow, String> Format { get; set; }
+        public Func<CoreRow, string>? Format { get; set; }
 
-        private Column<T> ImageColumn()
+        private Column<T>? ImageColumn()
         {
             var columns = new Columns<T>(x => x.ID);
             foreach (var column in VisibleColumns.GetColumns())
@@ -84,7 +84,7 @@ namespace PRS.Mobile
             return null;
         }
         
-        public SelectionViewModel(Filter<T> filter, Expression<Func<T, object>>[] visible, Expression<Func<T, object>>[] hidden = null, SortOrder<T> sort = null, Func<CoreRow,String> format = null)
+        public SelectionViewModel(Filter<T>? filter, Expression<Func<T, object>>[] visible, Expression<Func<T, object>>[]? hidden = null, SortOrder<T>? sort = null, Func<CoreRow, string>? format = null)
         {
             Filter = filter;
             

+ 0 - 3
prs.mobile.new/PRS.Mobile/Modules/Warehousing/OldWarehousing/StockHoldingPage.xaml.cs

@@ -386,10 +386,8 @@ namespace PRS.Mobile
                 {
                     case "No":
                         return;
-                        break;
                     case "Cancel":
                         return;
-                        break;
                     case "Yes":
                         foreach (var _model in _models)
                         {
@@ -399,7 +397,6 @@ namespace PRS.Mobile
                         break;
                     default:
                         return;
-                        break;
                 }
             }
 

+ 4 - 3
prs.mobile.new/PRS.Mobile/Modules/Warehousing/Stocktake/StockTakeCompletionPage.xaml

@@ -3,11 +3,12 @@
              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:material="clr-namespace:XF.Material.Forms.UI;assembly=XF.Material"
              xmlns:mobile="clr-namespace:InABox.Mobile;assembly=InABox.Mobile.Shared"
              x:Class="PRS.Mobile.StockTakeCompletionPage">
-    <NavigationPage.TitleView>
+
+    <mobile:MobilePage.PrimaryMenu>
         <Button HorizontalOptions="End" VerticalOptions="Center" TextColor="White" BackgroundColor="Transparent" Margin="0" Padding="0"
-                    IsVisible="false" x:Name="saveBatchBtn"
+                    IsVisible="True" x:Name="saveBatchBtn"
                 Text="Save" Clicked="SaveBatch_Clicked"/>
-    </NavigationPage.TitleView>
+    </mobile:MobilePage.PrimaryMenu>
 
     <mobile:MobilePage.PageContent>
         <ScrollView>

+ 13 - 8
prs.mobile.new/PRS.Mobile/Modules/Warehousing/Stocktake/StocktakePage.xaml.cs

@@ -263,19 +263,19 @@ namespace PRS.Mobile
             if (bOpening)
                 return;
             bOpening = true;
-            StockHoldingShell_Old shell = rightListView.SelectedItem as StockHoldingShell_Old;
-            StockHoldingShell_Old originalShell = DuplicateShell(shell);
+            var shell = rightListView.SelectedItem as StockHoldingShell_Old;
+            var originalShell = DuplicateShell(shell);
 
-            ProductStyle style = new ProductStyle() { ID = shell.StyleID, Code = shell.StyleCode, Description = shell.Finish };
-            Job job = new Job() { ID = shell.JobID, JobNumber = shell.JobNumber };
+            var style = new ProductStyle { ID = shell.StyleID, Code = shell.StyleCode, Description = shell.Finish };
+            var job = new Job { ID = shell.JobID, JobNumber = shell.JobNumber };
 
-            RecTransferPopup popup = new RecTransferPopup(shell, style, job, job, true);
+            var popup = new RecTransferPopup(shell, job, job, true);
 
-            StockMovement additionalmovement = new StockMovement();
+            var additionalmovement = new StockMovement();
 
             popup.OnRecTransferItemAccepted += () =>
             {
-                StockMovement movement = new StockMovement() { };
+                var movement = new StockMovement();
                 movement.Dimensions.Unit.ID = shell.DimensionsUnitID;
                 movement.Dimensions.Quantity = shell.DimensionsQuantity;
                 movement.Dimensions.Length = shell.DimensionsLength;
@@ -306,6 +306,7 @@ namespace PRS.Mobile
                 movement.Style.ID = shell.StyleID;
                 movement.Style.Code = shell.StyleCode;
                 movement.Style.Description = shell.Finish;
+                movement.Type = StockMovementType.StockTake;
 
                 if (popup.Shell.Units < originalShell.Units)
                 {
@@ -361,13 +362,17 @@ namespace PRS.Mobile
                     additionalmovement.Style.Description = originalShell.Finish;
                     additionalmovement.Notes = movement.Notes + " Also changed finish during stocktake";
 
+                    additionalmovement.Transaction = movement.Transaction;
+
                     additionalmovement.Issued = originalShell.Units;
+                    additionalmovement.Type = StockMovementType.TransferOut;
 
                     movementsToUpdate.Add(additionalmovement);
 
                     movement.Issued = 0;
                     movement.Received = popup.Shell.Units;
-                    movement.Notes = movement.Notes + " Also changed finish during stocktake";
+                    movement.Type = StockMovementType.TransferIn;
+                    movement.Notes += " Also changed finish during stocktake";
                 }
 
                 movementsToUpdate.Add(movement);

+ 94 - 75
prs.mobile.new/PRS.Mobile/Modules/Warehousing/Transfer/RecTrans.xaml.cs

@@ -19,20 +19,39 @@ namespace PRS.Mobile
     public partial class RecTrans
     {
         #region Fields + Constructor + Loading
-        List<StockHoldingShell_Old> issuingHoldings = new List<StockHoldingShell_Old>();
-        List<StockHoldingShell_Old> receivingHoldings = new List<StockHoldingShell_Old>();
-        List<StockHoldingShell_Old> originalHoldings = new List<StockHoldingShell_Old>();
-        StockLocation ReceivingStockLocation = new StockLocation();
-        StockLocation IssuingStockLocation = new StockLocation();
-        ProductStyle DefaultStyle = new ProductStyle();
-        ProductStyle PreviousStyle = new ProductStyle();
-        Filter<StockHolding> issuingFilter = new Filter<StockHolding>();
-        Job ReceivingJob = new Job();
-        bool bTapping = false;
-        double frameHeight = 80;
-        List<StockLocation> favourites = new List<StockLocation>();
-        StockMovementBatchType BatchType = new StockMovementBatchType();
-        string DeviceType = "";
+
+        /// <summary>
+        /// The list of available holdings to take from.
+        /// </summary>
+        private List<StockHoldingShell_Old> issuingHoldings = new List<StockHoldingShell_Old>();
+
+        /// <summary>
+        /// The list of items on the right hand side, representing the new locations.
+        /// </summary>
+        private List<StockHoldingShell_Old> receivingHoldings = new List<StockHoldingShell_Old>();
+
+        /// <summary>
+        /// The list of items that have been taken; the originals.
+        /// </summary>
+        private List<StockHoldingShell_Old> originalHoldings = new List<StockHoldingShell_Old>();
+
+        // We can either be receiving to a job or a location, so only one of these should be non-empty at a time.
+        private Job ReceivingJob = new Job();
+        private StockLocation ReceivingStockLocation = new StockLocation();
+
+        // We can be issuing from just locations (can't issue from a job).
+        private StockLocation IssuingStockLocation = new StockLocation();
+
+        private ProductStyle DefaultStyle = new ProductStyle();
+        private ProductStyle PreviousStyle = new ProductStyle();
+
+        private bool bTapping = false;
+        private double frameHeight = 80;
+
+        private List<StockLocation> favourites = new List<StockLocation>();
+        private readonly StockMovementBatchType BatchType;
+
+        private string DeviceType = "";
 
         public RecTrans(StockMovementBatchType batchType, string issuingGuidString = "")
         {
@@ -184,7 +203,6 @@ namespace PRS.Mobile
             {
                 case "Cancel":
                     return;
-                    break;
                 case "New Location":
                     ChooseNewLocation();
                     CollapseExpanderOnButtonPress();
@@ -195,7 +213,6 @@ namespace PRS.Mobile
                     break;
                 default:
                     return;
-                    break;
 
             }
         }
@@ -216,30 +233,53 @@ namespace PRS.Mobile
 
         #region Receiving Location Methods
 
+        private void IssueToLocation(StockLocation location)
+        {
+            if (location.ID == IssuingStockLocation.ID)
+                return;
+
+            // Clear the job, because we're going to a location now.
+            ReceivingJob = new Job();
+
+            ReceivingStockLocation = location;
+
+            LoadDefaultStyle();
+            Device.BeginInvokeOnMainThread(() =>
+            {
+                //titleLbl.Text = "Transfer Stock";
+                receivingLocationLbl.Text = ReceivingStockLocation.Description;
+            });
+        }
+        private void IssueToJob(JobShell job)
+        {
+            // Clear the location, because we're going to a job now.
+            ReceivingStockLocation = new StockLocation();
+
+            ReceivingJob.ID = job.ID;
+            ReceivingJob.Name = job.Name;
+            ReceivingJob.JobNumber = job.JobNumber;
+            Device.BeginInvokeOnMainThread(() =>
+            {
+                //titleLbl.Text = "Issue to Job";
+                receivingLocationLbl.Text = ReceivingJob.JobNumber;
+            });
+        }
+
         private void ReceivingFavouriteChosen(string chosenFavourite)
         {
             StockLocation location = favourites.Find(x => x.Code.Equals(chosenFavourite));
-            ReceivingStockLocation.ID = location.ID;
-            ReceivingStockLocation.Code = location.Code;
-            ReceivingStockLocation.Description = location.Description;
-            receivingLocationLbl.Text = ReceivingStockLocation.Description;
+            IssueToLocation(location);
         }
         private void ChooseReceivingLocation()
         {
             StockLocationSelectionPage page = new StockLocationSelectionPage();
             page.OnLocationSelected += (s) =>
             {
-                if (s.ID == IssuingStockLocation.ID)
-                    return;
-                ReceivingStockLocation.ID = s.ID;
-                ReceivingStockLocation.Code = s.Code;
-                ReceivingStockLocation.Description = s.Description;
-                ReceivingJob = new Job();
-                LoadDefaultStyle();
-                Device.BeginInvokeOnMainThread(() =>
+                IssueToLocation(new StockLocation
                 {
-                    //titleLbl.Text = "Transfer Stock";
-                    receivingLocationLbl.Text = ReceivingStockLocation.Description;
+                    ID = s.ID,
+                    Code = s.Code,
+                    Description = s.Description
                 });
             };
             Navigation.PushAsync(page);
@@ -293,15 +333,7 @@ namespace PRS.Mobile
                     try
                     {
                         new Client<StockLocation>().Save(loc, "Created Location");
-                        ReceivingStockLocation.ID = loc.ID;
-                        ReceivingStockLocation.Code = loc.Code;
-                        ReceivingStockLocation.Description = loc.Description;
-                        LoadDefaultStyle();
-                        Device.BeginInvokeOnMainThread(() =>
-                        {
-                            //titleLbl.Text = "Transfer Stock";
-                            receivingLocationLbl.Text = ReceivingStockLocation.Description;
-                        });
+                        IssueToLocation(loc);
                     }
                     catch (Exception err)
                     {
@@ -320,15 +352,7 @@ namespace PRS.Mobile
             var jobSelectionPage = new JobSelectionPage(
                 (job) =>
                 {
-                    ReceivingStockLocation = new StockLocation();
-                    ReceivingJob.ID = job.ID;
-                    ReceivingJob.Name = job.Name;
-                    ReceivingJob.JobNumber = job.JobNumber;
-                    Device.BeginInvokeOnMainThread(() =>
-                    {
-                        //titleLbl.Text = "Issue to Job";
-                        receivingLocationLbl.Text = ReceivingJob.JobNumber;
-                    });
+                    IssueToJob(job);
                 });
             Navigation.PushAsync(jobSelectionPage);
         }
@@ -344,37 +368,35 @@ namespace PRS.Mobile
 
             bTapping = true;
 
-            StockHoldingShell_Old shell = issuingListView.SelectedItem as StockHoldingShell_Old;
-            StockHoldingShell_Old originalShell = DuplicateShell(shell);
+            var originalShell = issuingListView.SelectedItem as StockHoldingShell_Old;
 
-            Job job = new Job();
+            var job = new Job();
 
             if (ReceivingStockLocation.Job.ID != Guid.Empty)
             {
-                job.ID = ReceivingStockLocation.Job.ID;
-                job.JobNumber = ReceivingStockLocation.Job.JobNumber;
-                job.Name = ReceivingStockLocation.Job.Name;
+                job = new Job
+                {
+                    ID = ReceivingStockLocation.Job.ID,
+                    JobNumber = ReceivingStockLocation.Job.JobNumber,
+                    Name = ReceivingStockLocation.Job.Name
+                };
             }
 
-            RecTransferPopup popup = new RecTransferPopup(shell, PreviousStyle, job, ReceivingJob);
-            popup.OnRecTransferItemAccepted += (() =>
+            var popup = new RecTransferPopup(DuplicateShell(originalShell), job, ReceivingJob);
+            popup.OnRecTransferItemAccepted += () =>
             {
                 if (popup.Shell.Units == originalShell.Units)
                 {
-                    issuingHoldings.Remove(shell);
+                    // Remove from left-hand list, because we can't select any more of this.
+                    issuingHoldings.Remove(originalShell);
                     receivingHoldings.Add(popup.Shell);
                     RefreshLists();
                 }
                 else if (originalShell.Units > popup.Shell.Units)
                 {
-                    int index = issuingHoldings.FindIndex(x => x.ID.Equals(originalShell.ID));
-                    issuingHoldings.Remove(shell);
-                    originalShell.Units = originalShell.Units - popup.Shell.Units;
+                    originalShell.Units -= popup.Shell.Units;
                     originalShell.DisplayUnits = "Units: " + originalShell.Units;
 
-                    issuingHoldings.Insert(index, originalShell);
-                    //original shell is updated to remove qty taken away   
-
                     receivingHoldings.Add(popup.Shell);
                     //popup shell with new properties is added to receiving list
 
@@ -388,15 +410,12 @@ namespace PRS.Mobile
                 PreviousStyle.Description = popup.Shell.Finish;
 
                 bTapping = false;
-            });
-            popup.OnRecTransferPopupBackButtonPressed += (() =>
+            };
+            popup.OnRecTransferPopupBackButtonPressed += () =>
             {
-                int index = issuingHoldings.FindIndex(x => x.ID.Equals(originalShell.ID));
-                issuingHoldings.Remove(shell);
-                issuingHoldings.Insert(index, originalShell);
                 bTapping = false;
                 RefreshLists();
-            });
+            };
             Navigation.PushAsync(popup);
         }
 
@@ -406,18 +425,18 @@ namespace PRS.Mobile
             RemoveHoldingFromBatch(shell);
         }
 
+        /// <summary>
+        /// Remove from the batch being transferred, and put back in the issuing list.
+        /// </summary>
+        /// <param name="shell"></param>
         private void RemoveHoldingFromBatch(StockHoldingShell_Old shell)
         {
             receivingHoldings.Remove(shell);
             if (issuingHoldings.Find(x => x.ID.Equals(shell.ID)) != null)
             {
-                StockHoldingShell_Old existingHolding = issuingHoldings.Find(x => x.ID.Equals(shell.ID));
-                int index = issuingHoldings.FindIndex(x => x.ID.Equals(existingHolding.ID));
-                issuingHoldings.Remove(existingHolding);
-                existingHolding.Units = existingHolding.Units + shell.Units;
+                var existingHolding = issuingHoldings.Find(x => x.ID.Equals(shell.ID));
+                existingHolding.Units += shell.Units;
                 existingHolding.DisplayUnits = "Units: " + existingHolding.Units;
-
-                issuingHoldings.Insert(index, existingHolding);
             }
             else
             {

+ 4 - 3
prs.mobile.new/PRS.Mobile/Modules/Warehousing/Transfer/RecTransCompletion.xaml

@@ -4,11 +4,12 @@
              xmlns:mobile="clr-namespace:InABox.Mobile;assembly=InABox.Mobile.Shared"
              x:Class="PRS.Mobile.RecTransCompletion">
 
-    <NavigationPage.TitleView>
-        <Button HorizontalOptions="End" VerticalOptions="Center" TextColor="White" BackgroundColor="Transparent" Margin="0" Padding="0"
+    <mobile:MobilePage.PrimaryMenu>
+        <Button 
+                TextColor="White" BackgroundColor="Transparent" Margin="0" Padding="0"
                     IsVisible="false" x:Name="saveBatchBtn"
                 Text="Save" Clicked="SaveBatch_Clicked"/>
-    </NavigationPage.TitleView>
+    </mobile:MobilePage.PrimaryMenu>
 
     <mobile:MobilePage.PageContent>
         <ScrollView>

+ 86 - 77
prs.mobile.new/PRS.Mobile/Modules/Warehousing/Transfer/RecTransCompletion.xaml.cs

@@ -5,7 +5,9 @@ using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
+using System.Reflection;
 using System.Threading.Tasks;
+using System.Transactions;
 using Xamarin.Essentials;
 using Xamarin.Forms;
 using Xamarin.Forms.Xaml;
@@ -22,7 +24,6 @@ namespace PRS.Mobile
         List<StockHoldingShell_Old> originalHoldings = new List<StockHoldingShell_Old>();
         StockLocation issuingLocation = new StockLocation();
         StockLocation receivingLocation = new StockLocation();
-        List<StockMovement> stockMovements = new List<StockMovement>();
         Job receivingJob = new Job();
         Dictionary<Image, Document> imagesDocuments = new Dictionary<Image, Document>();
         List<string> favourites = new List<string>
@@ -113,19 +114,65 @@ namespace PRS.Mobile
                 // Save photos - async, no wait needed
                 SavePhotos(batch.ID);
 
+                var movements = new List<StockMovement>();
+
                 if (receivingLocation.ID != Guid.Empty)
                 {
-                    CreateStockMovements(batch, true, false); //issuing
-                    CreateStockMovements(batch, false, true); //receiving
+                    foreach (var shell in receivingShells)
+                    {
+                        var transaction = Guid.NewGuid();
+
+                        var issue = IssueStockMovement(shell,
+                            CreateStockMovement(shell, batch, transaction, StockMovementType.TransferOut, issuingLocation));
+                        var receive = ReceiveStockMovement(shell,
+                            CreateStockMovement(shell, batch, transaction, StockMovementType.TransferIn, receivingLocation));
+
+                        movements.Add(issue);
+                        movements.Add(receive);
+                    }
                 }
                 else if (receivingJob.ID != Guid.Empty)
                 {
-                    CreateStockMovements(batch, true, false); //issuing only
+                    foreach (StockHoldingShell_Old shell in receivingShells)
+                    {
+                        var transaction = Guid.NewGuid();
+
+                        var originalShell = originalHoldings.First(x => x.ID == shell.ID);
+                        if (receivingJob.ID != originalShell.JobID)
+                        {
+                            // Issue from original job
+                            var issueToJob = IssueStockMovement(shell,
+                                CreateStockMovement(shell, batch, transaction, StockMovementType.TransferOut, issuingLocation));
+
+                            // to new job
+                            var receiveToJob = ReceiveStockMovement(shell,
+                                CreateStockMovement(shell, batch, transaction, StockMovementType.TransferIn, issuingLocation));
+                            receiveToJob.Job.ID = receivingJob.ID;
+                            receiveToJob.Style.ID = originalShell.StyleID;
+                            receiveToJob.System = true;
+
+                            // Issue from new job
+                            var issueFromJob = IssueStockMovement(shell,
+                                CreateStockMovement(shell, batch, transaction, StockMovementType.Issue, issuingLocation));
+                            issueFromJob.Job.ID = receivingJob.ID;
+                            issueFromJob.System = true;
+
+                            movements.Add(issueToJob);
+                            movements.Add(receiveToJob);
+                            movements.Add(issueFromJob);
+                        }
+                        else
+                        {
+                            var issue = IssueStockMovement(shell,
+                                CreateStockMovement(shell, batch, transaction, StockMovementType.Issue, issuingLocation));
+                            movements.Add(issue);
+                        }
+                    }
                 }
 
                 Task.Run(() =>
                 {
-                    new Client<StockMovement>().Save(stockMovements, "Updated from mobile device");
+                    new Client<StockMovement>().Save(movements, "Updated from mobile device");
                 });
 
                 Device.BeginInvokeOnMainThread(async () =>
@@ -136,26 +183,23 @@ namespace PRS.Mobile
                     Navigation.PopAsync();
                 });
             }
-
-
         }
 
-
-        private void CreateStockMovements(StockMovementBatch batch, bool issuing = false, bool receiving = false)
+        private StockHoldingShell_Old GetOriginalShell(StockHoldingShell_Old shell)
         {
-            foreach (StockHoldingShell_Old shell in receivingShells)
-            {
-                CreateStockMovement(shell, batch, issuing, receiving);
-            }
+            return originalHoldings.First(x => x.ID == shell.ID);
         }
 
-        private void CreateStockMovement(StockHoldingShell_Old shell, StockMovementBatch batch, bool issuing = false, bool receiving = false, bool innerloop = false)
+        private StockMovement CreateStockMovement(StockHoldingShell_Old shell, StockMovementBatch batch, Guid transaction, StockMovementType type,
+            StockLocation location)
         {
-            StockMovement movement = new StockMovement();
+            var movement = new StockMovement();
             movement.Batch.ID = batch.ID;
             movement.Date = DateTime.Now;
             if (batch.Type == StockMovementBatchType.Transfer)
                 movement.IsTransfer = true;
+            movement.Type = type;
+            movement.Transaction = transaction;
             movement.Notes = notesEdt.Text;
             movement.Dimensions.Unit.ID = shell.DimensionsUnitID;
             movement.Dimensions.Quantity = shell.DimensionsQuantity;
@@ -180,78 +224,43 @@ namespace PRS.Mobile
             movement.Employee.ID = App.Data.Me.ID;
             movement.Employee.Name = App.Data.Me.Name;
 
-            if (issuing)
-            {
-                StockHoldingShell_Old originalShell = originalHoldings.First(x => x.ID == shell.ID);
-
-                movement.Style.ID = originalShell.StyleID;
-                movement.Style.Code = originalShell.StyleCode;
-                movement.Style.Description = originalShell.Finish;
-
-                movement.Job.ID = originalShell.JobID;
-                movement.Job.JobNumber = originalShell.JobNumber;
-                movement.Job.Name = originalShell.JobName;
-
-                if (innerloop)
-                {
-                    movement.System = true;
-                    movement.Job.ID = receivingJob.ID;
-                    movement.Job.JobNumber = receivingJob.JobNumber;
-                    movement.Job.Name = receivingJob.Name;
-                }
+            movement.Location.ID = location.ID;
+            movement.Location.Code = location.Code;
+            movement.Location.Description = location.Description;
 
-                movement.Location.ID = issuingLocation.ID;
-                movement.Location.Code = issuingLocation.Code;
-                movement.Location.Description = issuingLocation.Description;
-
-                movement.Issued = shell.Units;
+            return movement;
+        }
 
-                //innerloop for creating extra system stock movements if needed when issuing
-                if (receivingJob.ID != Guid.Empty && !innerloop)
-                {
-                    if (originalShell.JobID != receivingJob.ID)
-                    {
-                        CreateStockMovement(shell, batch, false, true, true);
-                        CreateStockMovement(shell, batch, true, false, true);
-                    }
-                }
-            }
-            else if (receiving)
-            {
-                StockHoldingShell_Old originalShell = originalHoldings.First(x => x.ID == shell.ID);
+        private StockMovement IssueStockMovement(StockHoldingShell_Old shell, StockMovement movement)
+        {
+            var originalShell = GetOriginalShell(shell);
 
-                movement.Style.ID = shell.StyleID;
-                movement.Style.Code = shell.StyleCode;
-                movement.Style.Description = shell.Finish;
+            movement.Style.ID = originalShell.StyleID;
+            movement.Style.Code = originalShell.StyleCode;
+            movement.Style.Description = originalShell.Finish;
 
-                movement.Job.ID = shell.JobID;
-                movement.Job.JobNumber = shell.JobNumber;
-                movement.Job.Name = shell.JobName;
+            movement.Job.ID = originalShell.JobID;
+            movement.Job.JobNumber = originalShell.JobNumber;
+            movement.Job.Name = originalShell.JobName;
 
-                movement.Location.ID = receivingLocation.ID;
-                movement.Location.Code = receivingLocation.Code;
-                movement.Location.Description = receivingLocation.Description;
+            movement.Issued = shell.Units;
 
-                movement.Received = shell.Units;
+            return movement;
+        }
 
-                if (receivingJob.ID != Guid.Empty && innerloop)
-                {
-                    movement.Style.ID = originalShell.StyleID;
-                    movement.Style.Code = originalShell.StyleCode;
-                    movement.Style.Description = originalShell.Finish;
+        private StockMovement ReceiveStockMovement(StockHoldingShell_Old shell, StockMovement movement)
+        {
+            movement.Style.ID = shell.StyleID;
+            movement.Style.Code = shell.StyleCode;
+            movement.Style.Description = shell.Finish;
 
-                    movement.Job.ID = receivingJob.ID;
-                    movement.Job.JobNumber = receivingJob.JobNumber;
-                    movement.Job.Name = receivingJob.Name;
+            movement.Job.ID = shell.JobID;
+            movement.Job.JobNumber = shell.JobNumber;
+            movement.Job.Name = shell.JobName;
 
-                    movement.Location.ID = issuingLocation.ID;
-                    movement.Location.Code = issuingLocation.Code;
-                    movement.Location.Description = issuingLocation.Description;
+            movement.Received = shell.Units;
 
-                    movement.System = true;
-                }
-            }
-            stockMovements.Add(movement);
+            return movement;
         }
 
         #region Photos

+ 7 - 11
prs.mobile.new/PRS.Mobile/Modules/Warehousing/Transfer/RecTransferPopup.xaml.cs

@@ -22,30 +22,26 @@ namespace PRS.Mobile
 
         public delegate void RecTransferPopupBackButtonPressed();
 
-        public event RecTransferItemAcceptedEvent OnRecTransferItemAccepted;
+        public event RecTransferItemAcceptedEvent? OnRecTransferItemAccepted;
 
-        public event RecTransferPopupBackButtonPressed OnRecTransferPopupBackButtonPressed;
+        public event RecTransferPopupBackButtonPressed? OnRecTransferPopupBackButtonPressed;
         public StockHoldingShell_Old Shell { get; set; }
 
-        ProductStyle DefaultStyle = new ProductStyle();
+        Job DefaultJob;
 
-        Job DefaultJob = new Job();
-
-        Job ReceivingJob = new Job();
+        Job ReceivingJob;
         bool stocktake = false;
 
         public double OriginalQty = 0.0;
-        public RecTransferPopup(StockHoldingShell_Old _shell, ProductStyle _defaultStyle, Job _defaultJob, Job _receivingJob, bool _stocktake = false)
+        public RecTransferPopup(StockHoldingShell_Old _shell, Job _defaultJob, Job _receivingJob, bool _stocktake = false)
         {
             InitializeComponent();
             NavigationPage.SetHasBackButton(this, false);
             stocktake = _stocktake;
             if (_stocktake)
                 jobBtn.IsEnabled = false;
-            Shell = new StockHoldingShell_Old();
             Shell = _shell;
             OriginalQty = _shell.Units;
-            DefaultStyle = _defaultStyle;
             DefaultJob = _defaultJob;
             ReceivingJob = _receivingJob;
             if (ReceivingJob.ID != Guid.Empty)
@@ -100,7 +96,7 @@ namespace PRS.Mobile
         {
             if (ReceivingJob.ID != Guid.Empty)
                 return;
-            JobSelectionPage jobSelectionPage = new JobSelectionPage(
+            var jobSelectionPage = new JobSelectionPage(
                 (job) =>
                 {
                     Shell.JobID = job.ID;
@@ -115,7 +111,7 @@ namespace PRS.Mobile
 
         private void SelectStyle_Clicked(object sender, EventArgs e)
         {
-            GenericSelectionPage page = new GenericSelectionPage(
+            var page = new GenericSelectionPage(
                    "Select Product Style",
                    new SelectionViewModel<ProductStyle>(
                        null,