STN Asset Movements

This commit is contained in:
Andy Howard
2019-08-05 09:02:30 +01:00
parent 8806c17edb
commit 79b37d1b5c
39 changed files with 1693 additions and 215 deletions
@@ -59,6 +59,7 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
// P e r s i s t e n t S e s s i o n P r o p e r t i e s
//-------------------------------------------------------------------
public String DefaultEmailAddress { get; set; }
public SlmSiteDefinition DefaultSiteDefinition { get; set; }
protected static String PropertyName_Context_Site_Code { get; } = "Context-Site-Code";
protected static String PropertyName_Context_Site_Url { get; } = "Context-Site-Url";
protected static String PropertyName_Context_EmailAddress { get; } = "Context-Email";
@@ -70,7 +71,7 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
Object sessionSiteCode = Properties.GetValue(PropertyName_Context_Site_Code, SlmSystem.GetSiteCode(sessionProfile.Site));
Object sessionSiteUrl = Properties.GetValue(PropertyName_Context_Site_Url, sessionProfile.SiteDefinition != null ? sessionProfile.SiteDefinition.URL : "");
Object sessionEmail = Properties.GetValue(PropertyName_Context_EmailAddress, sessionProfile.EmailAddress);
// Populate session properties.
// Populate default session properties.
// Site definition.
if (sessionSiteCode != null && sessionSiteUrl != null)
{
@@ -80,19 +81,21 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
{
if (siteDefinition.Site != site) continue;
if (!siteDefinition.URL.Equals(siteUrl)) continue;
SetSite(siteDefinition);
DefaultSiteDefinition = siteDefinition;
}
}
// User & Email.
// User email.
if (sessionEmail != null) DefaultEmailAddress = sessionEmail.ToString();
}
public void StorePersistentSessionProperties ()
{
SlmSessionProfile_Mobile sessionProfile = SlmGlobals_Mobile.SessionProfile;
if (sessionProfile == null) return;
Properties[PropertyName_Context_Site_Code] = SlmSystem.GetSiteCode(sessionProfile.Site);
Properties[PropertyName_Context_Site_Url] = sessionProfile.SiteDefinition.URL;
Properties[PropertyName_Context_EmailAddress] = sessionProfile.EmailAddress;
if (DefaultSiteDefinition != null)
{
Properties[PropertyName_Context_Site_Code] = SlmSystem.GetSiteCode(DefaultSiteDefinition.Site);
Properties[PropertyName_Context_Site_Url] = DefaultSiteDefinition.URL;
}
if (!StringUtil.IsEmpty(DefaultEmailAddress))
Properties[PropertyName_Context_EmailAddress] = DefaultEmailAddress;
}
//-------------------------------------------------------------------
+17 -2
View File
@@ -60,6 +60,16 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
public static Color MenuBackgroundColor { get; } = Color.FromHex("#F0F0F0");
public static Color MenuHeaderBackgroundColor { get; } = Color.FromHex("#E0E0E0");
// Dynamic font sizing.
public static String HtmlFontSize
{
get
{
if (SaxApplication.MinDeviceDimension > 2000) return "18px";
if (SaxApplication.MinDeviceDimension > 1600) return "16px";
if (SaxApplication.MinDeviceDimension > 1200) return "14px";
return "12px";
}
}
public static double FontSizeRatio
{
get
@@ -84,9 +94,14 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
public static double PageNavigationPaddingVertical { get; } = 4.0;
public static Color PageNavigationBorderColor { get; } = Color.FromHex("#808080");
public static Color PageNavigationBackgroundColor { get; } = Color.FromHex("#e9f6fb");
// Item List.
public static double ItemListHeaderBorderWidth { get; set; } = 2.0;
public static float ItemListHeaderBorderRadius = 6.0f;
public static Color ItemListHeaderBorderColor = ApplicationBarBackgroundColor;
public static Color ItemListHeaderBackgroundColor = Color.FromHex("#F0F0F0");
// Controls.
public static Color ControlBackgroundColor { get; } = Color.FromHex("#f8f8f8");
public static Color ControlBorderColor { get; } = Color.FromHex("#f8f8f8");
public static Color ControlBackgroundColor { get; } = Color.FromHex("#F8F8F8");
public static Color ControlBorderColor { get; } = Color.FromHex("#E0E0E0");
public static double ControlBorderWidth { get; } = 0.5;
public static Thickness LabelMargin { get; } = new Thickness(4.0, 8.0, 0, 0);
// Associated items panel.
@@ -36,6 +36,10 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
Granted = securityRight.GetBoolValue("Granted");
}
}
public SaSecurityProfile_Mobile ()
{
// Blank profile.
}
public SaSecurityProfile_Mobile (SlmWebServiceItemData securityItem)
{
// Security item properties.
@@ -73,6 +77,10 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
{
}
//-------------------------------------------------------------------
// Properties.
public bool ValidProfile { get { return SysId.IsValid(UserId); } }
//-------------------------------------------------------------------
// Refresh profile.
public bool RefreshProfile (SlmSiteDefinition siteDefinition, SlmWebServiceItemData securityItem)
@@ -88,7 +96,21 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
UserId = SysId.InvalidOnNull(userProfile.Id);
Logger.Debug(fn + " User: '" + UserDisplayName + "' [Id: " + UserId + "]" + (SysId.IsValid(previousUserId) ? ". Previous UserId: " + SysId.ToString(previousUserId) : ""));
RefreshProfile(userProfile, null);
return SysId.IsValid(UserId) && SysId.InvalidOnNull(UserId).Equals(SysId.InvalidOnNull(userProfile.Id));
return ValidProfile && SysId.InvalidOnNull(UserId).Equals(SysId.InvalidOnNull(userProfile.Id));
}
//-------------------------------------------------------------------
// Clear profile.
public bool ClearProfile ()
{
String fn = GetType().Name+".ClearProfile";
ClearErrorState();
// Construct User Security Profile.
SaSecurityProfile userProfile = new SaSecurityProfile_Mobile();
UserId = new SysId();
RefreshProfile(userProfile, null);
if (SacsSystem.DebugMode) Logger.Debug(fn + " User logged out");
return !ValidProfile;
}
//-------------------------------------------------------------------
@@ -10,7 +10,7 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
{
//-------------------------------------------------------------------
// Definitions.
private class SlmSiteDefinition_Mobile : SlmSiteDefinition { }
internal class SlmSiteDefinition_Mobile : SlmSiteDefinition { }
//-------------------------------------------------------------------
// Data members.
@@ -19,7 +19,7 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
// Construction.
protected SlmSessionContext_Mobile (SlmSiteDefinition siteDefinition) : base(0)
{
if (siteDefinition == null) siteDefinition = new SlmSiteDefinition_Mobile();
siteDefinition = siteDefinition ?? new SlmSiteDefinition_Mobile();
Site = (siteDefinition != null ? siteDefinition.Site : Slm.Site.Unknown);
SiteDefinition = siteDefinition;
}
@@ -25,6 +25,11 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
// Populate Security Profile.
SecurityProfile_Mobile.RefreshProfile(SessionContext_Mobile.SiteDefinition, securityItem);
}
internal void LogoutUser ()
{
userData_Mobile.Clear();
SecurityProfile_Mobile.ClearProfile();
}
}
//-------------------------------------------------------------------
@@ -61,6 +66,12 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
SlmGlobals_Mobile.Application.SetSite(siteDefinition);
return UserContext.ValidUser && SiteDefinition.Valid;
}
public bool LogoutUser ()
{
userContext_Local.LogoutUser();
SlmGlobals_Mobile.Application.SetSite(new SlmSessionContext_Mobile.SlmSiteDefinition_Mobile());
return !(UserContext.ValidUser && SiteDefinition.Valid);
}
//-------------------------------------------------------------------
// S e s s i o n P r o f i l e E v e n t s
@@ -20,6 +20,13 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
EmailAddress = securityItem.GetValue("EmailAddress");
DisplayName = securityItem.GetValue("Description");
}
public void Clear ()
{
SecurityItemId = new Sarand.Core.Bus.SysId();
SecurityItemCode = "";
EmailAddress = "";
DisplayName = "";
}
}
protected class SlmSessionContext_Mobile_Internal : SlmSessionContext_Mobile
{
@@ -27,7 +34,7 @@ namespace Sarand.LogisticsMgr.Mobile.Core.App
public void SetSiteDefinition (SlmSiteDefinition siteDefinition)
{
SiteDefinition = siteDefinition;
Site = siteDefinition.Site;
Site = siteDefinition?.Site ?? Slm.Site.Unknown;
}
}
@@ -467,7 +467,7 @@ namespace Sarand.LogisticsMgr.Mobile.Core.CodeTypes
foreach (SaCodeType codeType in codeTypes)
{
if (prmCode.CodeTypeIds.HasValidIds() && !prmCode.CodeTypeIds.Contains(codeType.Id)) continue;
if (prmCode.CodeTypeCodes.Count > 1 && !prmCode.CodeTypeCodes.ContainsCI(codeType.Code)) continue;
if (prmCode.CodeTypeCodes.Count > 0 && !prmCode.CodeTypeCodes.ContainsCI(codeType.Code)) continue;
// Code Type is valid - filter code for code types.
foreach (SaCode saCode in GetCodeListForCodeType(codeType.Code, prmCode.StatusCat == SaCode.StatusCat.ActiveOnly))
@@ -20,7 +20,7 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
// Components.
private SlmContentView outerView = new SlmContentView();
private SlmContentView embeddedView = new SlmContentView();
private readonly SlmLabel label = new SlmLabel();
private readonly SlmLabel labelReadOnly = new SlmLabel();
// Styling.
private Thickness borderThickness = new Thickness();
private Color borderColor = Color.Transparent;
@@ -40,8 +40,8 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
BorderWidth = SlmMobile.ControlBorderWidth;
// Read-only label configuration.
label.BackgroundColor = Color.Transparent;
label.Margin = new Thickness(SlmMobile.LabelMargin.Left, SlmMobile.LabelMargin.Top);
labelReadOnly.BackgroundColor = Color.Transparent;
labelReadOnly.Margin = new Thickness(SlmMobile.LabelMargin.Left, SlmMobile.LabelMargin.Top);
SetControlActivity();
}
@@ -64,9 +64,10 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
get { return readOnly; }
set { if (readOnly == value) return; readOnly = value; SetControlActivity(); }
}
public String ReadOnlyText
protected String ReadOnlyText
{
set { if (label.Text.Equals(value)) return; label.Text = value; }
get{ return labelReadOnly.Text; }
set { if (labelReadOnly.Text.Equals(value)) return; labelReadOnly.Text = value; }
}
//-------------------------------------------------------------------
@@ -93,7 +94,7 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
}
protected override void SetControlsReadOnly ()
{
if (readOnly) Content = label;
if (readOnly) Content = labelReadOnly;
}
//-------------------------------------------------------------------
@@ -0,0 +1,39 @@
using Sarand.Core.Base;
using Sarand.Core.Bus;
using Sarand.Core.Mobile.Forms.Controls;
using Sarand.LogisticsMgr.Mobile.Core.App;
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;
namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
{
//=======================================================================
public class SlmDatePicker : SaxDatePicker
{
//-------------------------------------------------------------------
// Definitions.
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SlmDatePicker ()
{
// Font sizing.
FontSize = FontSize * SlmMobile.FontSizeRatio;
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
// P i c k e r E v e n t s
//-------------------------------------------------------------------
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,127 @@
using Sarand.Core.Base;
using Sarand.Core.Mobile.Forms.Controls;
using Sarand.LogisticsMgr.Mobile.Core.App;
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Text;
using Xamarin.Forms;
namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
{
//=======================================================================
public class SlmDatePickerView : SlmControlView
{
//-------------------------------------------------------------------
// Definitions.
//-------------------------------------------------------------------
// Data members.
private readonly SlmDatePicker datePicker = new SlmDatePicker();
//-------------------------------------------------------------------
// Construction.
public SlmDatePickerView (SlmDatePicker suppliedPicker = null)
{
// Control configuration.
if (suppliedPicker != null) datePicker = suppliedPicker;
datePicker.BackgroundColor = Color.Transparent;
// Control events.
datePicker.BackgroundColor = Color.Transparent;
datePicker.DateSelected += DatePicker_DateSelected;
datePicker.Focused += DatePicker_Focused;
datePicker.Unfocused += DatePicker_Unfocused;
ConfigureComponents();
SetControlActivity();
}
//-------------------------------------------------------------------
// Properties.
protected SlmDatePicker DatePicker { get { return datePicker; } }
public DateTime Date
{
get { return datePicker.Date; }
set { if (datePicker.Date == value) return; datePicker.Date = value; }
}
//-------------------------------------------------------------------
// C o n f i g u r e C o m p o n e n t s
//-------------------------------------------------------------------
/// <summary>Control configuration that can b changed dynamically.</summary>
protected override void ConfigureComponents ()
{
base.ConfigureComponents();
}
//-------------------------------------------------------------------
// C o n t r o l A c t i v i t y
//-------------------------------------------------------------------
protected override void SetControlActivity ()
{
base.SetControlActivity();
SetControlsReadOnly();
}
protected override void SetControlsReadOnly ()
{
base.SetControlsReadOnly();
if (!ReadOnly) Content = datePicker;
}
//-------------------------------------------------------------------
// V i e w E v e n t s
//-------------------------------------------------------------------
protected override void OnParentSet ()
{
base.OnParentSet();
}
//-------------------------------------------------------------------
protected override void OnPropertyChanging ([CallerMemberName] string propertyName = null)
{
base.OnPropertyChanging(propertyName);
}
protected override void OnPropertyChanged ([CallerMemberName] string propertyName = null)
{
base.OnPropertyChanged(propertyName);
//Logger.Debug(GetType().Name + ".OnPropertyChanged Name=" + propertyName);
}
//-------------------------------------------------------------------
protected override void OnChildAdded (Element child)
{
base.OnChildAdded(child);
}
protected override void OnChildRemoved (Element child)
{
base.OnChildRemoved(child);
}
//-------------------------------------------------------------------
protected override void OnSizeAllocated (double width, double height)
{
base.OnSizeAllocated(width, height);
}
//-------------------------------------------------------------------
// C o n t r o l E v e n t s
//-------------------------------------------------------------------
public event EventHandler<DateChangedEventArgs> DateSelected;
private void DatePicker_DateSelected (object sender, DateChangedEventArgs e)
{
ReadOnlyText = datePicker.Date != null ? DateUtil.Format(datePicker.Date, datePicker.Format) : "";
if (ReadOnly) return;
if (DateSelected != null) DateSelected.Invoke(sender, e);
}
//-------------------------------------------------------------------
private void DatePicker_Focused (object sender, FocusEventArgs e)
{
Control_Focused(sender, e);
}
private void DatePicker_Unfocused (object sender, FocusEventArgs e)
{
Control_Unfocused(sender, e);
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,33 @@
using Sarand.Core.Mobile.Forms.Controls;
using Sarand.LogisticsMgr.Mobile.Core.App;
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;
namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
{
//=======================================================================
public class SlmEditor : SaxEditor
{
//-------------------------------------------------------------------
// Definitions.
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SlmEditor ()
{
// Font sizing.
FontSize = FontSize * SlmMobile.FontSizeRatio;
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,145 @@
using Sarand.Core.Base;
using Sarand.Core.Mobile.Forms.Controls;
using Sarand.LogisticsMgr.Mobile.Core.App;
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Text;
using Xamarin.Forms;
namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
{
//=======================================================================
public class SlmEditorView : SlmControlView
{
//-------------------------------------------------------------------
// Definitions.
//-------------------------------------------------------------------
// Data members.
private readonly SlmEditor entry = new SlmEditor();
//-------------------------------------------------------------------
// Construction.
public SlmEditorView ()
{
// Control configuration.
entry.BackgroundColor = Color.Transparent;
// Editor events.
entry.Focused += Editor_Focused;
entry.Unfocused += Editor_Unfocused;
entry.TextChanged += Editor_TextChanged;
entry.Completed += Editor_Completed;
ConfigureComponents();
SetControlActivity();
}
//-------------------------------------------------------------------
// Properties.
public int MaxLength
{
get { return entry.MaxLength; }
set { entry.MaxLength = value; }
}
public Keyboard Keyboard
{
get { return entry.Keyboard; }
set { entry.Keyboard = value; }
}
public String Text
{
get { return entry.Text; }
set { value = StringUtil.EmptyOnNull(value); if (entry.Text != null && entry.Text.Equals(value)) return; entry.Text = value; }
}
//-------------------------------------------------------------------
// C o n f i g u r e C o m p o n e n t s
//-------------------------------------------------------------------
/// <summary>Control configuration that can be changed dynamically.</summary>
protected override void ConfigureComponents ()
{
base.ConfigureComponents();
}
//-------------------------------------------------------------------
// C o n t r o l A c t i v i t y
//-------------------------------------------------------------------
protected override void SetControlActivity ()
{
base.SetControlActivity();
SetControlsReadOnly();
}
protected override void SetControlsReadOnly ()
{
base.SetControlsReadOnly();
if (!ReadOnly) Content = entry;
}
//-------------------------------------------------------------------
// C o n t r o l E v e n t s
//-------------------------------------------------------------------
private void Editor_Focused (object sender, FocusEventArgs e)
{
Control_Focused(sender, e);
}
//-------------------------------------------------------------------
private void Editor_Unfocused (object sender, FocusEventArgs e)
{
Control_Unfocused(sender, e);
}
//-------------------------------------------------------------------
// Text changed.
public event EventHandler<TextChangedEventArgs> TextChanged;
private void Editor_TextChanged (object sender, TextChangedEventArgs e)
{
ReadOnlyText = entry.Text;
if (ReadOnly) return;
if (TextChanged != null) TextChanged.Invoke(sender, e);
}
//-------------------------------------------------------------------
// Completed.
public event EventHandler Completed;
private void Editor_Completed (object sender, EventArgs e)
{
if (ReadOnly) return;
if (Completed != null) Completed.Invoke(sender, e);
}
//-------------------------------------------------------------------
// V i e w E v e n t s
//-------------------------------------------------------------------
protected override void OnParentSet ()
{
base.OnParentSet();
}
//-------------------------------------------------------------------
protected override void OnPropertyChanging ([CallerMemberName] string propertyName = null)
{
base.OnPropertyChanging(propertyName);
}
protected override void OnPropertyChanged ([CallerMemberName] string propertyName = null)
{
base.OnPropertyChanged(propertyName);
//Logger.Debug(GetType().Name + ".OnPropertyChanged Name=" + propertyName);
}
//-------------------------------------------------------------------
protected override void OnChildAdded (Element child)
{
base.OnChildAdded(child);
}
protected override void OnChildRemoved (Element child)
{
base.OnChildRemoved(child);
}
//-------------------------------------------------------------------
protected override void OnSizeAllocated (double width, double height)
{
base.OnSizeAllocated(width, height);
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -22,6 +22,7 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
}
public class Config
{
public bool ReadOnly { get; set; }
public NavigationMode NavigationMode { get; set; } = NavigationMode.OkCancel;
}
@@ -64,6 +65,7 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
// Managers.
protected SlmAccountMgr_Mobile AccountMgr { get { if (accountMgr == null) accountMgr = new SlmAccountMgr_Mobile(SessionContext); return accountMgr; } }
protected SlmAssetMgr_Mobile AssetMgr { get { if (assetMgr == null) assetMgr = new SlmAssetMgr_Mobile(SessionContext); return assetMgr; } }
//-------------------------------------------------------------------
// I n i t i a l i s e
//-------------------------------------------------------------------
@@ -94,7 +96,7 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
viewCaptionBar.Children.Add(labelCaption);
labelCaption.Text = "Form";
labelCaption.TextColor = SlmMobile.PageCaptionTextColor;
labelCaption.FontSize *= SlmMobile.PageCaptionTextSizeRatio;
labelCaption.FontSize *= SlmMobile.FontSizeRatio * SlmMobile.PageCaptionTextSizeRatio;
labelCaption.HorizontalOptions = LayoutOptions.CenterAndExpand;
labelCaption.HorizontalTextAlignment = TextAlignment.Center;
@@ -0,0 +1,71 @@
using Sarand.Core.Base;
using Sarand.Core.Mobile.Forms.Controls;
using Sarand.LogisticsMgr.Mobile.Core.App;
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Text;
using Xamarin.Forms;
namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
{
//=======================================================================
public class SlmLabelView : SlmControlView
{
//-------------------------------------------------------------------
// Definitions.
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SlmLabelView ()
{
// Control configuration.
ConfigureComponents();
SetControlActivity();
}
//-------------------------------------------------------------------
// Properties.
public String Text
{
get { return ReadOnlyText; }
set { if (ReadOnlyText.Equals(value)) return; ReadOnlyText = value; }
}
//-------------------------------------------------------------------
// C o n f i g u r e C o m p o n e n t s
//-------------------------------------------------------------------
/// <summary>Control configuration that can b changed dynamically.</summary>
protected override void ConfigureComponents ()
{
ReadOnly = true;
base.ConfigureComponents();
}
//-------------------------------------------------------------------
// C o n t r o l A c t i v i t y
//-------------------------------------------------------------------
protected override void SetControlActivity ()
{
SetControlsReadOnly();
}
protected override void SetControlsReadOnly ()
{
base.SetControlsReadOnly();
}
//-------------------------------------------------------------------
// V i e w E v e n t s
//-------------------------------------------------------------------
//-------------------------------------------------------------------
// C o n t r o l E v e n t s
//-------------------------------------------------------------------
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -26,13 +26,14 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
// Control configuration.
if (suppliedPicker != null) picker = suppliedPicker;
picker.BackgroundColor = Color.Transparent;
// In case picker pre-populated and default item selected.
ReadOnlyText = (picker.SelectedItem != null ? picker.SelectedItem.ToString() : "");
// Control events.
picker.Populated += Picker_Populated;
picker.SelectedIndexChanged += Picker_SelectedIndexChanged;
picker.Focused += Picker_Focused;
picker.Unfocused += Picker_Unfocused;
picker.BackgroundColor = Color.Transparent;
picker.SelectedIndexChanged += Picker_SelectedIndexChanged;
picker.Populated += Picker_Populated;
ConfigureComponents();
SetControlActivity();
@@ -112,16 +113,6 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
//-------------------------------------------------------------------
// C o n t r o l E v e n t s
//-------------------------------------------------------------------
private void Picker_Focused (object sender, FocusEventArgs e)
{
Control_Focused(sender, e);
}
//-------------------------------------------------------------------
private void Picker_Unfocused (object sender, FocusEventArgs e)
{
Control_Unfocused(sender, e);
}
//-------------------------------------------------------------------
public event SaxPicker.PopulatedEventHandler Populated;
private void Picker_Populated (object sender, SaxPicker.PopulatedEventArgs e)
{
@@ -135,6 +126,15 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Base
if (ReadOnly) return;
if (SelectedIndexChanged != null) SelectedIndexChanged.Invoke(sender, e);
}
//-------------------------------------------------------------------
private void Picker_Focused (object sender, FocusEventArgs e)
{
Control_Focused(sender, e);
}
private void Picker_Unfocused (object sender, FocusEventArgs e)
{
Control_Unfocused(sender, e);
}
//-------------------------------------------------------------------
}
@@ -16,18 +16,18 @@ using Xamarin.Forms;
namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Controls
{
//=======================================================================
public class SlmPickerView_Codes : SlmPickerView
public class SlmPickerView_CodeType : SlmPickerView
{
//-------------------------------------------------------------------
// Construction.
public SlmPickerView_Codes () : base(new SlmPicker_Codes()) { }
public SlmPickerView_CodeType () : base(new SlmPicker_CodeType()) { }
//-------------------------------------------------------------------
// Properties.
public Slm.CodeType CodeType
{
get { return (Picker as SlmPicker_Codes).CodeType; }
set { (Picker as SlmPicker_Codes).CodeType = value; }
get { return (Picker as SlmPicker_CodeType).CodeType; }
set { (Picker as SlmPicker_CodeType).CodeType = value; }
}
public bool ContainsCode (String code)
{
@@ -35,14 +35,14 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Controls
}
public String SelectedCode
{
get { return (Picker as SlmPicker_Codes).SelectedCode; }
set { (Picker as SlmPicker_Codes).SelectedCode = value; }
get { return (Picker as SlmPicker_CodeType).SelectedCode; }
set { (Picker as SlmPicker_CodeType).SelectedCode = value; }
}
//-------------------------------------------------------------------
}
//=======================================================================
public class SlmPicker_Codes : SlmPicker
public class SlmPicker_CodeType : SlmPicker
{
//-------------------------------------------------------------------
// Data members.
@@ -51,7 +51,7 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Controls
//-------------------------------------------------------------------
// Construction.
public SlmPicker_Codes ()
public SlmPicker_CodeType ()
{
PopulateCodes();
}
@@ -0,0 +1,72 @@
using Sarand.Core.Base;
using Sarand.Core.Bus;
using Sarand.Core.CodeTypes;
using Sarand.Core.Tasks;
using Sarand.LogisticsMgr.Core.App;
using Sarand.LogisticsMgr.Mobile.Core.App;
using Sarand.LogisticsMgr.Mobile.Core.CodeTypes;
using Sarand.LogisticsMgr.Mobile.Core.Forms.Base;
using Sarand.LogisticsMgr.Mobile.Core.Mgr;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Controls
{
//=======================================================================
public class SlmPickerView_SystemCodes : SlmPickerView
{
//-------------------------------------------------------------------
// Construction.
public SlmPickerView_SystemCodes (Slm.SystemCode systemCodeType) :
base(new SlmPicker_SystemCodes(systemCodeType))
{ }
//-------------------------------------------------------------------
// Properties.
public String SelectedCode
{
get { return (Picker as SlmPicker_SystemCodes).SelectedItemCode; }
set { (Picker as SlmPicker_SystemCodes).SelectedItemCode = value; }
}
//-------------------------------------------------------------------
}
//=======================================================================
public class SlmPicker_SystemCodes : SlmPicker
{
//-------------------------------------------------------------------
// Data members.
private Slm.SystemCode systemCode;
private List<TypeCodeDesc> systemCodes = new List<TypeCodeDesc>();
//-------------------------------------------------------------------
// Construction.
public SlmPicker_SystemCodes (Slm.SystemCode systemCodeType)
{
this.systemCode = systemCodeType;
systemCodes.AddRange(SlmSystem.GetCodesOfType(systemCodeType));
PopulateSystemCodes();
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
// P o p u l a t i o n
//-------------------------------------------------------------------
public void PopulateSystemCodes ()
{
Items.Clear();
foreach (TypeCodeDesc systemCode in systemCodes)
{
AddItem(systemCode.Code, systemCode.Desc);
}
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,49 @@
using Sarand.Core.Mobile.Forms.Panels;
using Sarand.LogisticsMgr.Mobile.Core.App;
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;
namespace Sarand.LogisticsMgr.Mobile.Core.Forms.Panels
{
public class SlmPanel_ItemListHeader : SaxPanel_ItemListHeader
{
//-------------------------------------------------------------------
// Definitions.
public new class Config : SaxPanel_ItemListHeader.Config
{
public Config ()
{
Margin = new Thickness(0, 0, 0, 4.0);
HeaderBorderWidth = SlmMobile.ItemListHeaderBorderWidth;
HeaderBorderRadius = SlmMobile.ItemListHeaderBorderRadius;
HeaderBorderColor = SlmMobile.ItemListHeaderBorderColor;
HeaderBackgroundColor = SlmMobile.ItemListHeaderBackgroundColor;
LabelMargin = SlmMobile.LabelMargin;
CaptionLabelFontSizeRatio = SlmMobile.FontSizeRatio * SlmMobile.PageCaptionTextSizeRatio;
PagingLabelFontSizeRatio = SlmMobile.FontSizeRatio;
}
}
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SlmPanel_ItemListHeader (Config config) :
base(config)
{
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
// P a n e l E v e n t s
//-------------------------------------------------------------------
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -63,7 +63,6 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Mgr
public override SlmAssetMovement GetAssetMovement (SlmAssetMovement.Params prm)
{
ClearErrorState();
if (GetAssetMovementCount(prm) != 1) return null;
throw new NotImplementedException();
}
public async Task<SlmAssetMovement> GetAssetMovement_Mobile (SlmAssetMovement.Params prmAssetMovement, SacsTaskData taskData)
@@ -74,17 +73,17 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Mgr
// Request item data.
SlmWebServiceClient.ItemDataResponseData responseData = await webServiceClient.GetItemData(GetAssetMovementRequestConfig(SlmWebServiceRequest.RequestType.Data, taskData.Debug), GetAssetMovementQueryFilter_Mobile(prmAssetMovement), taskData);
XElement dataElement = responseData.DataElement;
if (dataElement == null) throw new NotSupportedException("No data element found in AssetMovement data response.");
if (responseData.DataElement == null) throw new NotSupportedException("No data element found in AssetMovement data response.");
if (responseData.ItemElement == null) throw new NotSupportedException("No item element found in AssetMovement data response.");
if (responseData.Item == null) throw new NotSupportedException("No item extracted from AssetMovement data response.");
// Item construction properties.
SysId id = new SysId(StringUtil.ToInt(dataElement.GetChildText(SlmAssetMovement.Column.Id.ToString())));
Slm.AssetItemType assetItemType = EnumUtil.ParseEnum(dataElement.GetChildText(SlmAssetMovement.Column.AssetItemType.ToString()), Slm.AssetItemType.Unknown);
ushort flags = (ushort)StringUtil.ToInt(dataElement.GetChildText(SlmAssetMovement.Column.Id.ToString()));
SysId id = responseData.Item.GetIdValue(nameof(SlmAssetMovement.Id));
Slm.AssetItemType assetItemType = EnumUtil.ParseEnum(responseData.Item.GetValue(nameof(SlmAssetMovement.AssetItemType)), Slm.AssetItemType.Unknown);
ushort flags = (ushort)responseData.Item.GetIntValue(nameof(SlmAssetMovement.Flags));
// Create item.
SlmAssetMovement_Mobile assetMovement = new SlmAssetMovement_Mobile(Site, id, assetItemType, flags);
// Populate item properties.
PopulateFrom(dataElement, assetMovement);
PopulateFrom(responseData.Item, assetMovement);
return assetMovement;
}
@@ -161,57 +160,57 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Mgr
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo (XElement assetMovementElement, SlmAssetMovement assetMovement, DbUpdateInfo dbUpdateInfo)
public static void PopulateTo (XElement assetMovementElement, SlmAssetMovement assetMovement, DbUpdateInfo dbUpdateInfo)
{
// Movement.
assetMovementElement.AppendElement("Id", SysId.ToString(assetMovement.Id));
assetMovementElement.AppendElement("MovementType", assetMovement.MovementType.ToString());
assetMovementElement.AppendElement("MovementAt", DateUtil.FormatXmlDateTime(assetMovement.MovementAt));
assetMovementElement.AppendElement("MovementRef", assetMovement.MovementRef);
assetMovementElement.AppendElement("MovementInfo", assetMovement.MovementInfo);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.Id), SysId.ToString(assetMovement.Id));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.MovementType), assetMovement.MovementType.ToString());
assetMovementElement.AppendElement(nameof(SlmAssetMovement.MovementAt), DateUtil.FormatXmlDateTime(assetMovement.MovementAt));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.MovementRef), assetMovement.MovementRef);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.MovementInfo), assetMovement.MovementInfo);
// Associated data.
assetMovementElement.AppendElement("MovementNotificationIdIn", SysId.ToString(assetMovement.MovementNotificationIdIn));
assetMovementElement.AppendElement("MovementNotificationIdOut", SysId.ToString(assetMovement.MovementNotificationIdOut));
assetMovementElement.AppendElement("VehicleMovementAssetIdIn", SysId.ToString(assetMovement.VehicleMovementAssetIdIn));
assetMovementElement.AppendElement("VehicleMovementAssetIdOut", SysId.ToString(assetMovement.VehicleMovementAssetIdOut));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.MovementNotificationIdIn), SysId.ToString(assetMovement.MovementNotificationIdIn));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.MovementNotificationIdOut), SysId.ToString(assetMovement.MovementNotificationIdOut));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.VehicleMovementAssetIdIn), SysId.ToString(assetMovement.VehicleMovementAssetIdIn));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.VehicleMovementAssetIdOut), SysId.ToString(assetMovement.VehicleMovementAssetIdOut));
// Customer.
assetMovementElement.AppendElement("Customer", assetMovement.Customer);
assetMovementElement.AppendElement("CustomerRef", assetMovement.CustomerRef);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.Customer), assetMovement.Customer);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.CustomerRef), assetMovement.CustomerRef);
// Locations.
assetMovementElement.AppendElement("LocationStart", assetMovement.LocationStart);
assetMovementElement.AppendElement("LocationCurrent", assetMovement.LocationCurrent);
assetMovementElement.AppendElement("LocationFinish", assetMovement.LocationFinish);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.LocationStart), assetMovement.LocationStart);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.LocationCurrent), assetMovement.LocationCurrent);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.LocationFinish), assetMovement.LocationFinish);
// Transport.
assetMovementElement.AppendElement("HaulierInitial", assetMovement.HaulierInitial);
assetMovementElement.AppendElement("Haulier", assetMovement.HaulierFinal);
assetMovementElement.AppendElement("RegistrationInitial", assetMovement.RegistrationInitial);
assetMovementElement.AppendElement("VehicleRegistration", assetMovement.RegistrationFinal);
assetMovementElement.AppendElement("WagonType", assetMovement.WagonType);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.HaulierInitial), assetMovement.HaulierInitial);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.HaulierFinal), assetMovement.HaulierFinal);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.RegistrationInitial), assetMovement.RegistrationInitial);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.RegistrationFinal), assetMovement.RegistrationFinal);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.WagonType), assetMovement.WagonType);
// Asset.
assetMovementElement.AppendElement("AssetItemType", assetMovement.AssetItemType.ToString());
assetMovementElement.AppendElement("AssetItemId", SysId.ToString(assetMovement.AssetItemId));
assetMovementElement.AppendElement("PinNumber", assetMovement.PinNumber);
assetMovementElement.AppendElement("SealNumber", assetMovement.SealNumber);
assetMovementElement.AppendElement("DangerousGoodsInfo", assetMovement.DangerousGoodsInfo);
assetMovementElement.AppendElement("AssetTypeCode", assetMovement.AssetTypeCode);
assetMovementElement.AppendElement("AssetSizeCode", assetMovement.AssetSizeCode);
assetMovementElement.AppendElement("AssetWidth", assetMovement.AssetWidth.ToString("N3"));
assetMovementElement.AppendElement("AssetHeight", assetMovement.AssetHeight.ToString("N3"));
assetMovementElement.AppendElement("AssetLength", assetMovement.AssetLength.ToString("N3"));
assetMovementElement.AppendElement("AssetWeightGross", assetMovement.AssetWeightGross.ToString("N3"));
assetMovementElement.AppendElement("AssetConditionCode", assetMovement.AssetConditionCode);
assetMovementElement.AppendElement("AssetHoldReasonCode", assetMovement.AssetHoldReasonCode);
assetMovementElement.AppendElement("AssetHoldReason", assetMovement.AssetHoldReason);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.AssetItemType), assetMovement.AssetItemType.ToString());
assetMovementElement.AppendElement(nameof(SlmAssetMovement.AssetItemId), SysId.ToString(assetMovement.AssetItemId));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.PinNumber), assetMovement.PinNumber);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.SealNumber), assetMovement.SealNumber);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.DangerousGoodsInfo), assetMovement.DangerousGoodsInfo);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.AssetTypeCode), assetMovement.AssetTypeCode);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.AssetSizeCode), assetMovement.AssetSizeCode);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.AssetWidth), assetMovement.AssetWidth.ToString("N3"));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.AssetHeight), assetMovement.AssetHeight.ToString("N3"));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.AssetLength), assetMovement.AssetLength.ToString("N3"));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.AssetWeightGross), assetMovement.AssetWeightGross.ToString("N3"));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.AssetConditionCode), assetMovement.AssetConditionCode);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.AssetHoldReasonCode), assetMovement.AssetHoldReasonCode);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.AssetHoldReason), assetMovement.AssetHoldReason);
// Status dates.
assetMovementElement.AppendElement("InProgressAt", DateUtil.FormatXmlDateTime(assetMovement.InProgressAt));
assetMovementElement.AppendElement("OnHoldAt", DateUtil.FormatXmlDateTime(assetMovement.OnHoldAt));
assetMovementElement.AppendElement("CompletedAt", DateUtil.FormatXmlDateTime(assetMovement.CompletedAt));
// TODO assetMovementElement.AppendElement("InvoicedAt", DateUtil.FormatXmlDateTime(assetMovement.InvoicedAt));
assetMovementElement.AppendElement("CancelledAt", DateUtil.FormatXmlDateTime(assetMovement.CancelledAt));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.InProgressAt), DateUtil.FormatXmlDateTime(assetMovement.InProgressAt));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.OnHoldAt), DateUtil.FormatXmlDateTime(assetMovement.OnHoldAt));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.CompletedAt), DateUtil.FormatXmlDateTime(assetMovement.CompletedAt));
// TODO assetMovementElement.AppendElement(nameof(SlmAssetMovement.InvoicedAt), DateUtil.FormatXmlDateTime(assetMovement.InvoicedAt));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.CancelledAt), DateUtil.FormatXmlDateTime(assetMovement.CancelledAt));
// Common properties.
assetMovementElement.AppendElement("Notes", assetMovement.Notes);
assetMovementElement.AppendElement("Status", SacsSystem.GetStatusCode(assetMovement.Status));
assetMovementElement.AppendElement("Flags", assetMovement.Flags.ToString());
assetMovementElement.AppendElement(nameof(SlmAssetMovement.Notes), assetMovement.Notes);
assetMovementElement.AppendElement(nameof(SlmAssetMovement.Status), SacsSystem.GetStatusCode(assetMovement.Status));
assetMovementElement.AppendElement(nameof(SlmAssetMovement.Flags), assetMovement.Flags.ToString());
if (!SysId.IsValid(assetMovement.Id))
{
assetMovementElement.AppendElement("CreateOn", DateUtil.FormatXmlDateTime(DateTime.Now));
@@ -222,58 +221,58 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Mgr
assetMovementElement.AppendElement("UpdateBy", SysId.ToString(dbUpdateInfo.UserId));
assetMovementElement.AppendElement("UpdateHost", dbUpdateInfo.Host);
}
private void PopulateFrom (XElement assetMovementElement, SlmAssetMovement assetMovement)
public static void PopulateFrom (SlmWebServiceItemData itemData, SlmAssetMovement assetMovement)
{
// Movement.
//assetMovement.Id = new SysId(StringUtil.ToInt(assetMovementElement.GetChildText("Id")));
assetMovement.MovementType = EnumUtil.ParseEnum(assetMovementElement.GetChildText("MovementType"), Slm.AssetMovementType.Unknown);
assetMovement.MovementAt = DateUtil.ParseXmlDateTime(assetMovementElement.GetChildText("MovementAt"));
assetMovement.MovementRef = assetMovementElement.GetChildText("MovementRef");
assetMovement.MovementInfo = assetMovementElement.GetChildText("MovementInfo");
//assetMovement.Id = itemData.GetIdValue(nameof(SlmAssetMovement.Id));
assetMovement.MovementType = EnumUtil.ParseEnum(itemData.GetValue(nameof(SlmAssetMovement.MovementType)), Slm.AssetMovementType.Unknown);
assetMovement.MovementAt = itemData.GetDateTimeValue(nameof(SlmAssetMovement.MovementAt));
assetMovement.MovementRef = itemData.GetValue(nameof(SlmAssetMovement.MovementRef));
assetMovement.MovementInfo = itemData.GetValue(nameof(SlmAssetMovement.MovementInfo));
// Associated data.
assetMovement.MovementNotificationIdIn = new SysId(StringUtil.ToInt(assetMovementElement.GetChildText("MovementNotificationIdIn")));
assetMovement.MovementNotificationIdOut = new SysId(StringUtil.ToInt(assetMovementElement.GetChildText("MovementNotificationIdOut")));
assetMovement.VehicleMovementAssetIdIn = new SysId(StringUtil.ToInt(assetMovementElement.GetChildText("VehicleMovementAssetIdIn")));
assetMovement.VehicleMovementAssetIdOut = new SysId(StringUtil.ToInt(assetMovementElement.GetChildText("VehicleMovementAssetIdOut")));
assetMovement.MovementNotificationIdIn = itemData.GetIdValue(nameof(SlmAssetMovement.MovementNotificationIdIn));
assetMovement.MovementNotificationIdOut = itemData.GetIdValue(nameof(SlmAssetMovement.MovementNotificationIdOut));
assetMovement.VehicleMovementAssetIdIn = itemData.GetIdValue(nameof(SlmAssetMovement.VehicleMovementAssetIdIn));
assetMovement.VehicleMovementAssetIdOut = itemData.GetIdValue(nameof(SlmAssetMovement.VehicleMovementAssetIdOut));
// Customer.
assetMovement.Customer = assetMovementElement.GetChildText("Customer");
assetMovement.CustomerRef = assetMovementElement.GetChildText("CustomerRef");
assetMovement.Customer = itemData.GetValue(nameof(SlmAssetMovement.Customer));
assetMovement.CustomerRef = itemData.GetValue(nameof(SlmAssetMovement.CustomerRef));
// Locations.
assetMovement.LocationStart = assetMovementElement.GetChildText("LocationStart");
assetMovement.LocationCurrent = assetMovementElement.GetChildText("LocationCurrent");
assetMovement.LocationFinish = assetMovementElement.GetChildText("LocationFinish");
assetMovement.LocationStart = itemData.GetValue(nameof(SlmAssetMovement.LocationStart));
assetMovement.LocationCurrent = itemData.GetValue(nameof(SlmAssetMovement.LocationCurrent));
assetMovement.LocationFinish = itemData.GetValue(nameof(SlmAssetMovement.LocationFinish));
// Transport.
assetMovement.HaulierInitial = assetMovementElement.GetChildText("HaulierInitial");
assetMovement.HaulierFinal = assetMovementElement.GetChildText("Haulier");
assetMovement.RegistrationInitial = assetMovementElement.GetChildText("RegistrationInitial");
assetMovement.RegistrationFinal = assetMovementElement.GetChildText("VehicleRegistration");
assetMovement.WagonType = assetMovementElement.GetChildText("WagonType");
assetMovement.HaulierInitial = itemData.GetValue(nameof(SlmAssetMovement.HaulierInitial));
assetMovement.HaulierFinal = itemData.GetValue(nameof(SlmAssetMovement.HaulierFinal));
assetMovement.RegistrationInitial = itemData.GetValue(nameof(SlmAssetMovement.RegistrationInitial));
assetMovement.RegistrationFinal = itemData.GetValue(nameof(SlmAssetMovement.RegistrationFinal));
assetMovement.WagonType = itemData.GetValue(nameof(SlmAssetMovement.WagonType));
// Asset.
//assetMovement.AssetItemType = (Slm.AssetItemType)dbAssetMovement._AssetItemType");
assetMovement.AssetItemId = new SysId(StringUtil.ToInt(assetMovementElement.GetChildText("AssetItemId")));
assetMovement.PinNumber = assetMovementElement.GetChildText("PinNumber");
assetMovement.SealNumber = assetMovementElement.GetChildText("SealNumber");
assetMovement.DangerousGoodsInfo = assetMovementElement.GetChildText("DangerousGoodsInfo");
assetMovement.AssetTypeCode = assetMovementElement.GetChildText("AssetTypeCode");
assetMovement.AssetSizeCode = assetMovementElement.GetChildText("AssetSizeCode");
assetMovement.AssetWidth = StringUtil.ToDecimal(assetMovementElement.GetChildText("AssetWidth"));
assetMovement.AssetHeight = StringUtil.ToDecimal(assetMovementElement.GetChildText("AssetHeight"));
assetMovement.AssetLength = StringUtil.ToDecimal(assetMovementElement.GetChildText("AssetLength"));
assetMovement.AssetWeightGross = StringUtil.ToDecimal(assetMovementElement.GetChildText("AssetWeightGross"));
assetMovement.AssetConditionCode = assetMovementElement.GetChildText("AssetConditionCode");
assetMovement.AssetHoldReasonCode = assetMovementElement.GetChildText("AssetHoldReasonCode");
assetMovement.AssetHoldReason = assetMovementElement.GetChildText("AssetHoldReason");
//assetMovement.AssetItemType = EnumUtil.ParseEnum(itemData.GetValue(nameof(SlmAssetMovement.AssetItemType)), Slm.AssetItemType.Unknown);
assetMovement.AssetItemId = itemData.GetIdValue(nameof(SlmAssetMovement.AssetItemId));
assetMovement.PinNumber = itemData.GetValue(nameof(SlmAssetMovement.PinNumber));
assetMovement.SealNumber = itemData.GetValue(nameof(SlmAssetMovement.SealNumber));
assetMovement.DangerousGoodsInfo = itemData.GetValue(nameof(SlmAssetMovement.DangerousGoodsInfo));
assetMovement.AssetTypeCode = itemData.GetValue(nameof(SlmAssetMovement.AssetTypeCode));
assetMovement.AssetSizeCode = itemData.GetValue(nameof(SlmAssetMovement.AssetSizeCode));
assetMovement.AssetWidth = itemData.GetDecimalValue(nameof(SlmAssetMovement.AssetWidth));
assetMovement.AssetHeight = itemData.GetDecimalValue(nameof(SlmAssetMovement.AssetHeight));
assetMovement.AssetLength = itemData.GetDecimalValue(nameof(SlmAssetMovement.AssetLength));
assetMovement.AssetWeightGross = itemData.GetDecimalValue(nameof(SlmAssetMovement.AssetWeightGross));
assetMovement.AssetConditionCode = itemData.GetValue(nameof(SlmAssetMovement.AssetConditionCode));
assetMovement.AssetHoldReasonCode = itemData.GetValue(nameof(SlmAssetMovement.AssetHoldReasonCode));
assetMovement.AssetHoldReason = itemData.GetValue(nameof(SlmAssetMovement.AssetHoldReason));
// Status dates.
assetMovement.InProgressAt = DateUtil.ParseXmlDateTime(assetMovementElement.GetChildText("InProgressAt"));
assetMovement.OnHoldAt = DateUtil.ParseXmlDateTime(assetMovementElement.GetChildText("OnHoldAt"));
assetMovement.CompletedAt = DateUtil.ParseXmlDateTime(assetMovementElement.GetChildText("CompletedAt"));
// TODO assetMovement.InvoicedAt = DateUtil.ParseXmlDateTime(assetMovementElement.GetChildText("InvoicedAt"));
assetMovement.CancelledAt = DateUtil.ParseXmlDateTime(assetMovementElement.GetChildText("CancelledAt"));
assetMovement.InProgressAt = itemData.GetDateTimeValue(nameof(SlmAssetMovement.InProgressAt));
assetMovement.OnHoldAt = itemData.GetDateTimeValue(nameof(SlmAssetMovement.OnHoldAt));
assetMovement.CompletedAt = itemData.GetDateTimeValue(nameof(SlmAssetMovement.CompletedAt));
// TODO assetMovement.InvoicedAt = assetMovementElement.GetDateTimeValue(nameof(SlmAssetMovement.InvoicedAt));
assetMovement.CancelledAt = itemData.GetDateTimeValue(nameof(SlmAssetMovement.CancelledAt));
// Common properties.
assetMovement.Notes = assetMovementElement.GetChildText("Notes");
assetMovement.Status = SacsSystem.GetStatusForCode(assetMovementElement.GetChildText("Status"));
assetMovement.SetCreateStamp(DateUtil.ParseXmlDateTime(assetMovementElement.GetChildText("CreateOn")), new SysId(StringUtil.ToInt(assetMovementElement.GetChildText("CreateBy"))), assetMovementElement.GetChildText("CreateHost"));
assetMovement.SetUpdateStamp(DateUtil.ParseXmlDateTime(assetMovementElement.GetChildText("UpdateOn")), new SysId(StringUtil.ToInt(assetMovementElement.GetChildText("UpdateBy"))), assetMovementElement.GetChildText("UpdateHost"));
assetMovement.Notes = itemData.GetValue(nameof(SlmAssetMovement.Notes));
assetMovement.Status = SacsSystem.GetStatusForCode(itemData.GetValue(nameof(SlmAssetMovement.Status)));
assetMovement.SetCreateStamp(itemData.GetDateTimeValue("CreateOn"), itemData.GetIdValue("CreateBy"), itemData.GetValue("CreateHost"));
assetMovement.SetUpdateStamp(itemData.GetDateTimeValue("UpdateOn"), itemData.GetIdValue("UpdateBy"), itemData.GetValue("UpdateHost"));
assetMovement.AcceptChanges();
}
@@ -2,13 +2,16 @@
using Sarand.Core.Base;
using Sarand.Core.Bus;
using Sarand.Core.Dbas.Base;
using Sarand.Core.Tasks;
using Sarand.Core.Xml;
using Sarand.LogisticsMgr.Core.App;
using Sarand.LogisticsMgr.Core.Bus;
using Sarand.LogisticsMgr.Core.WebService;
using Sarand.LogisticsMgr.Mobile.Core.Bus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace Sarand.LogisticsMgr.Mobile.Core.Mgr
@@ -41,6 +44,27 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Mgr
ClearErrorState();
throw new NotImplementedException();
}
public async Task<SlmContainer> GetContainer_Mobile (SlmContainer.Params prmContainer, SacsTaskData taskData)
{
ClearErrorState();
List<SlmContainer> companies = new List<SlmContainer>();
String fn = GetType().Name + ".GetContainer_Mobile";
// Request item data.
SlmWebServiceClient.ItemDataResponseData responseData = await webServiceClient.GetItemData(GetContainerRequestConfig(SlmWebServiceRequest.RequestType.Data, taskData.Debug), GetContainerQueryFilter_Mobile(prmContainer), taskData);
if (responseData.DataElement == null) throw new NotSupportedException("No data element found in Container data response.");
if (responseData.ItemElement == null) throw new NotSupportedException("No item element found in Container data response.");
if (responseData.Item == null) throw new NotSupportedException("No item extracted from Container data response.");
// Item construction properties.
SysId id = responseData.Item.GetIdValue(nameof(SlmContainer.Id));
String code = responseData.Item.GetValue(nameof(SlmContainer.Code));
ushort flags = (ushort)responseData.Item.GetIntValue(nameof(SlmContainer.Flags));
// Create item.
SlmContainer_Mobile container = new SlmContainer_Mobile(Site, id, code, flags);
PopulateFrom(responseData.Item, container);
return container;
}
//-------------------------------------------------------------------
// Validate Container.
@@ -93,16 +117,16 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Mgr
// Copy data properties to and from database.
private void PopulateTo (XElement containerElement, SlmContainer container, DbUpdateInfo dbUpdateInfo)
{
containerElement.AppendElement("Id", SysId.ToString(container.Id));
containerElement.AppendElement("Code", container.Code);
containerElement.AppendElement("SizeCode", container.SizeCode);
containerElement.AppendElement("Width", container.Width.ToString("N3"));
containerElement.AppendElement("Height", container.Height.ToString("N3"));
containerElement.AppendElement("Length", container.Length.ToString("N3"));
containerElement.AppendElement(nameof(SlmContainer.Id), SysId.ToString(container.Id));
containerElement.AppendElement(nameof(SlmContainer.Code), container.Code);
containerElement.AppendElement(nameof(SlmContainer.SizeCode), container.SizeCode);
containerElement.AppendElement(nameof(SlmContainer.Width), container.Width.ToString("N3"));
containerElement.AppendElement(nameof(SlmContainer.Height), container.Height.ToString("N3"));
containerElement.AppendElement(nameof(SlmContainer.Length), container.Length.ToString("N3"));
// Common properties.
containerElement.AppendElement("Notes", container.Notes);
containerElement.AppendElement("Status", SacsSystem.GetStatusCode(container.Status));
containerElement.AppendElement("Flags", container.Flags.ToString());
containerElement.AppendElement(nameof(SlmContainer.Notes), container.Notes);
containerElement.AppendElement(nameof(SlmContainer.Status), SacsSystem.GetStatusCode(container.Status));
containerElement.AppendElement(nameof(SlmContainer.Flags), container.Flags.ToString());
if (!SysId.IsValid(container.Id))
{
containerElement.AppendElement("CreateOn", DateUtil.FormatXmlDateTime(DateTime.Now));
@@ -113,19 +137,19 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Mgr
containerElement.AppendElement("UpdateBy", SysId.ToString(dbUpdateInfo.UserId));
containerElement.AppendElement("UpdateHost", dbUpdateInfo.Host);
}
private void PopulateFrom (XElement containerElement, SlmContainer container)
private void PopulateFrom (SlmWebServiceItemData itemData, SlmContainer container)
{
//container.Id = new SysId(StringUtil.ToInt(containerElement.GetChildText("Id")));
//container.Code = containerElement.GetChildText("Code");
container.SizeCode = containerElement.GetChildText("SizeCode");
container.Width = StringUtil.ToDecimal(containerElement.GetChildText("Width"));
container.Height = StringUtil.ToDecimal(containerElement.GetChildText("Height"));
container.Length = StringUtil.ToDecimal(containerElement.GetChildText("Length"));
//container.Id = itemData.GetIdValue(nameof(SlmContainer.Id)));
//container.Code = itemData.GetValue(nameof(SlmContainer.Code));
container.SizeCode = itemData.GetValue(nameof(SlmContainer.SizeCode));
container.Width = itemData.GetDecimalValue(nameof(SlmContainer.Width));
container.Height = itemData.GetDecimalValue(nameof(SlmContainer.Height));
container.Length = itemData.GetDecimalValue(nameof(SlmContainer.Length));
// Common properties.
container.Notes = containerElement.GetChildText("Notes");
container.Status = SacsSystem.GetStatusForCode(containerElement.GetChildText("Status"));
container.SetCreateStamp(DateUtil.ParseXmlDateTime(containerElement.GetChildText("CreateOn")), new SysId(StringUtil.ToInt(containerElement.GetChildText("CreateBy"))), containerElement.GetChildText("CreateHost"));
container.SetUpdateStamp(DateUtil.ParseXmlDateTime(containerElement.GetChildText("UpdateOn")), new SysId(StringUtil.ToInt(containerElement.GetChildText("UpdateBy"))), containerElement.GetChildText("UpdateHost"));
container.Notes = itemData.GetValue(nameof(SlmContainer.Notes));
container.Status = SacsSystem.GetStatusForCode(itemData.GetValue(nameof(SlmContainer.Status)));
container.SetCreateStamp(itemData.GetDateTimeValue("CreateOn"), itemData.GetIdValue("CreateBy"), itemData.GetValue("CreateHost"));
container.SetUpdateStamp(itemData.GetDateTimeValue("UpdateOn"), itemData.GetIdValue("UpdateBy"), itemData.GetValue("UpdateHost"));
container.AcceptChanges();
}
@@ -202,6 +226,19 @@ namespace Sarand.LogisticsMgr.Mobile.Core.Mgr
throw new NotImplementedException();
}
//-------------------------------------------------------------------
private SlmWebServiceRequest.Config GetContainerRequestConfig (SlmWebServiceRequest.RequestType requestType, bool debug = false)
{
SlmWebServiceRequest.Config configRequest = new SlmWebServiceRequest.Config();
configRequest.DataType = SlmWebServiceRequest.DataType.Container;
configRequest.RequestType = requestType;
configRequest.Context.SiteDefinition = SiteDefinition;
configRequest.Context.User = UserCode;
configRequest.Context.Email = EmailAddress;
configRequest.Context.Debug = debug;
return configRequest;
}
//-------------------------------------------------------------------
}
//=======================================================================