123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- using System;
- using System.ComponentModel;
- using System.Linq;
- namespace InABox.Core
- {
- public class CountryLink : EntityLink<Country>
- {
- [NullEditor]
- public override Guid ID { get; set; }
-
- [CodeEditor(Editable=Editable.Disabled)]
- [EditorSequence(1)]
- public string Code { get; set; }
-
- [Caption("Country")]
- [EditorSequence(2)]
- public string Name { get; set; }
- }
-
- public class Country : Entity, IRemotable, IPersistent
- {
-
- [UniqueCodeEditor(Editable=Editable.Enabled)]
- [EditorSequence(1)]
- public string Code { get; set; }
-
- [Caption("Country")]
- [EditorSequence(2)]
- public string Name { get; set; }
-
- static Country()
- {
- DefaultColumns.Add<State>(x => x.Code, 100);
- DefaultColumns.Add<Country>(x => x.Name, caption: "Country");
- }
- }
- public class StateLink : EntityLink<State>
- {
- [LookupEditor(typeof(State))]
- public override Guid ID { get; set; }
- [NullEditor]
- public CountryLink Country => InitializeField(ref _country);
- private CountryLink? _country;
-
- [CodeEditor(Editable = Editable.Disabled)]
- [EditorSequence(1)]
- public string Code { get; set; }
-
- [Caption("State")]
- [EditorSequence(2)]
- public string Name { get; set; }
- }
-
- public class State : Entity, IRemotable, IPersistent
- {
- [EntityRelationship(DeleteAction.Cascade)]
- [EditorSequence(1)]
- public CountryLink Country => InitializeField(ref _country);
- private CountryLink? _country;
-
- [UniqueCodeEditor(Editable = Editable.Enabled)]
- [EditorSequence(2)]
- public string Code { get; set; }
-
- [EditorSequence(3)]
- public string Name { get; set; }
-
- static State()
- {
- DefaultColumns.Add<State>(x => x.Code, 100);
- DefaultColumns.Add<State>(x => x.Name, caption: "State");
- }
-
- }
- public class LocalityLink : EntityLink<Locality>
- {
- public override Guid ID { get; set; }
-
- [EditorSequence(1)]
- public StateLink State => InitializeField(ref _state);
- private StateLink? _state;
-
- [EditorSequence(3)]
- public string Name { get; set; }
-
- [EditorSequence(4)]
- public string PostCode { get; set; }
- }
- public class Locality : Entity, IRemotable, IPersistent
- {
- [EntityRelationship(DeleteAction.Cascade)]
- [EditorSequence(1)]
- public StateLink State => InitializeField(ref _state);
- private StateLink? _state;
-
- [EditorSequence(3)]
- public string? Name { get; set; }
-
- [EditorSequence(4)]
- public string? PostCode { get; set; }
- static Locality()
- {
- DefaultColumns.Add<Locality>(x => x.Name, caption: "Locality");
- DefaultColumns.Add<Locality>(x => x.PostCode, 100);
- }
- }
- public enum LocalityType
- {
- Country,
- State,
- Locality
- }
-
- public interface ILocalitySummary
- {
- Guid ID { get; set; }
- Guid ParentID { get; set; }
- LocalityType Type { get; set; }
- string CountryCode { get; set; }
- string CountryName { get; set; }
- string StateCode { get; set; }
- string StateName { get; set; }
- string LocalityCode { get; set; }
- string LocalityName { get; set; }
- string Name { get; set; }
- string Code { get; set; }
- }
-
- public class LocalitySummaryGenerator : AutoEntityUnionGenerator<ILocalitySummary>
- {
- protected override void Configure()
- {
- AddTable<Locality>()
- .AliasField(x => x.ParentID, x => x.State.ID)
- .AliasField(x =>x.CountryCode, x=>x.State.Country.Code)
- .AliasField(x =>x.CountryName, x=>x.State.Country.Name)
- .AliasField(x =>x.StateCode, x=>x.State.Code)
- .AliasField(x =>x.StateName, x=>x.State.Name)
- .AliasField(x =>x.LocalityCode, x=>x.PostCode)
- .AliasField(x =>x.LocalityName, x=>x.Name)
- .AliasField(x =>x.Code, x => x.PostCode)
- .AddConstant(x=>x.Type, LocalityType.Locality);
-
- AddTable<State>()
- .AliasField(x=>x.ParentID, x => x.Country.ID)
- .AliasField(x =>x.CountryCode, x=>x.Country.Code)
- .AliasField(x =>x.CountryName, x=>x.Country.Name)
- .AliasField(x =>x.StateCode, x=>x.Code)
- .AliasField(x =>x.StateName, x=>x.Name)
- .AddConstant(x=>x.LocalityCode, "")
- .AddConstant(x=>x.LocalityName, "")
- .AddConstant(x=>x.Type, LocalityType.State);
-
- AddTable<Country>()
- .AddConstant(x => x.ParentID, Guid.Empty)
- .AliasField(x =>x.CountryCode, x=>x.Code)
- .AliasField(x =>x.CountryName, x=>x.Name)
- .AddConstant(x=>x.StateCode, "")
- .AddConstant(x=>x.StateName, "")
- .AddConstant(x=>x.LocalityCode, "")
- .AddConstant(x=>x.LocalityName, "")
- .AddConstant(x=>x.Type, LocalityType.Country);
- }
- public override bool Distinct => false;
- public override Column<ILocalitySummary>[] IDColumns => Columns.None<ILocalitySummary>().Add(x => x.ID).ToArray();
- }
-
- [AutoEntity(typeof(LocalitySummaryGenerator))]
- public class LocalitySummary : Entity, IRemotable, IPersistent, ILocalitySummary
- {
- [NullEditor]
- public Guid ParentID { get; set; }
-
- [NullEditor]
- public LocalityType Type { get; set; }
-
- [EditorSequence(1)]
- public string Name { get; set; }
-
- [EditorSequence(2)]
- public string Code { get; set; }
-
- [EditorSequence(3)]
- public string CountryCode { get; set; }
-
- [EditorSequence(4)]
- public string CountryName { get; set; }
-
- [EditorSequence(5)]
- public string StateCode { get; set; }
-
- [EditorSequence(6)]
- public string StateName { get; set; }
-
- [EditorSequence(7)]
- public string LocalityCode { get; set; }
-
- [EditorSequence(8)]
- public string LocalityName { get; set; }
- static LocalitySummary()
- {
- DefaultColumns.Add<LocalitySummary>(x=>x.Name, caption: "Locality");
- DefaultColumns.Add<LocalitySummary>(x => x.Code, 100, "Code");
- }
- }
- public class Address : EnclosedEntity, IPersistent, IRemotable
- {
- [EditorSequence(1)]
- [MemoEditor]
- public string Street { get; set; } = "";
- [EditorSequence(2)] public LocalityLink LocalityLink => InitializeField(ref _locality);
- private LocalityLink _locality;
-
- [EditorSequence(2)]
- [TextBoxEditor(Buttons = [])]
- public string City { get; set; } = "";
- [EditorSequence(3)]
- [ComboLookupEditor(typeof(StateLookups))]
- public string State { get; set; } = "";
- [EditorSequence(4)]
- [CodeEditor(Editable = Editable.Enabled)]
- public string PostCode { get; set; } = "";
- [NullEditor]
- public Location Location => InitializeField(ref _location, nameof(Location));
- private Location? _location;
- private class StateLookups : LookupGenerator<object>
- {
- public StateLookups(object[] items) : base(items)
- {
- AddValue("Australian Capital Territory", "Australian Capital Territory");
- AddValue("New South Wales", "New South Wales");
- AddValue("Northern Territory", "Northern Territory");
- AddValue("Queensland", "Queensland");
- AddValue("South Australia", "South Australia");
- AddValue("Tasmania", "Tasmania");
- AddValue("Victoria", "Victoria");
- AddValue("Western Australia", "Western Australia");
- }
- }
- public void CopyFrom(Address address)
- {
- Street = address.Street;
- City = address.City;
- State = address.State;
- PostCode = address.PostCode;
- Location.CopyFrom(address.Location);
- }
- }
- }
|