private static void ConstructMemberFromXmlNode(XmlNode node, MembersContainer container, int current) { string[] names = node.Attributes["name"].Value.Split(','); // address format "2345 Front St., Seattle, WA 12345" string[] address = node.Attributes["address"].Value.Split(','); string postalcode = address[2].Trim().Split(' ')[1]; Member member = Member.CreateMember(0, "", "", "", "", "", "", "", ""); member.Address = Address.CreateAddress(0, "", "", "", ""); member.MemberDetais = MemberDetais.CreateMemberDetais(0, String.Format(CultureInfo.CurrentCulture, "{0}", current + 10000), "", "", "", "", "", "", ""); container.MemberSet.AddObject(member); member.Address.address = address[0]; member.Address.city = address[1]; member.Address.postalcode = postalcode; member.Address.country = ""; member.firstname = names[1].Trim(); member.middlenames = ""; member.lastname = names[0]; member.email = ""; member.phone = ""; member.mobile = node.Attributes["mobile"].Value; member.birthdate = "12.1.2010"; member.sex = "M"; member.MemberDetais.membergroup = node.Attributes["department"].Value; member.MemberDetais.memberjob = ""; member.MemberDetais.memberclass = ""; member.MemberDetais.joindate = DateTime.Now.ToString(); member.MemberDetais.changeddate = DateTime.Now.ToString(); member.MemberDetais.exitdate = ""; member.MemberDetais.paymentstatus = ""; }
public ChangelogRowViewModel(Changelog row, MembersContainer container) { _row = row; _container = container; _dateTime = DateTime.Parse(String.Format("{0} {1}", _row.date, _row.time)); _cachedDescription = new Lazy<string>(() => GetItemDescription(row)); }
/// <summary> /// Dispose the database handler. /// </summary> public void Dispose() { _database.SaveChanges(); _database.Connection.Close(); _database.Dispose(); _database = null; Debug.Print("Database saved, closed and disposed"); }
public static void InitializeNonAsync(MembersContainer container) { Members = new ThreadSafeObservableCollection<MemberViewModel>(); PopulateMembersCollectionTask(container); container.SavingChanges += (s, o) => RefreshMembersListTask(container.ObjectStateManager); }
/// <summary> /// Asynchronously construct initial list of members from database. /// Usually done at program startup. /// </summary> /// <param name="container"></param> public static void Initialize(MembersContainer container) { Members = new ThreadSafeObservableCollection<MemberViewModel>(); // do asynchronous update on the list new Task(delegate { PopulateMembersCollectionTask(container); }).Start(); container.SavingChanges += (s, o) => RefreshMembersListTask(container.ObjectStateManager); }
/// <summary> /// Construct new EditContactWindowViewModel. /// </summary> /// <param name="container">The member container</param> /// <param name="member">The member to which this contact belongs</param> /// <param name="contact">The contact to edit or null to create new</param> public EditContactWindowViewModel(MembersContainer container, MemberViewModel member, Contact contact) { _container = container; _contact = contact; _member = member; if (_contact == null) _contact = CreateEmptyContact(_member); }
/// <summary> /// Construct new menu builder with the view and member container. /// </summary> public MemberListViewMenu(IMemberListView view, MembersContainer container) { _container = container; _view = view; _dispatcher = Dispatcher.CurrentDispatcher; // menu needs to be rebuilt when selected items or the members in the container are changed _delayMenuRebuild = new EventDelayer<bool>(delegate { RebuildMenu(); return true; }, _dispatcher); _container.SavingChanges += delegate { _delayMenuRebuild.DelayEvent(); }; _view.SelectedItems.CollectionChanged += delegate { _delayMenuRebuild.DelayEvent(); }; }
/// <summary> /// Construct new application MainWindow. /// </summary> /// <param name="container"></param> /// <param name="dispatcher"></param> /// <param name="startTime"></param> public MainWindowViewModel(MembersContainer container, Dispatcher dispatcher, DateTime startTime) { SynchronizedMemberList.RefreshFinished += (s, e) => dispatcher.BeginInvoke(new Action<DateTime>(Compose), startTime); SynchronizedMemberList.RefreshFinished += (s, e) => SetTitle(); SynchronizedMemberList.Initialize(container); this.ActiveDatabase = container; this.Dispatcher = dispatcher; this.TabPages = new ObservableCollection<ClosableViewModel>(); this.TabPages.CollectionChanged += this.OnTabPagesChanged; ShowDefaultView(); }
/// <summary> /// Construct new MemberListViewModel. /// </summary> /// <param name="name">Name of the view. To be displayed in the user interface</param> /// <param name="container">The member container</param> /// <param name="restrictor">The filter to restrict members shown in this view.</param> public MemberListViewModel(string name, MembersContainer container, Dispatcher dispatcher, MemberCollectionView mcv) { base.DisplayName = name; this.Collection = mcv.CollectionView; this.SelectedItems = new ObservableCollection<MemberViewModel>(); this.MenuOptions = new ObservableCollection<Control>(); new MemberListViewMenu(this, container); this.SelectedItems.CollectionChanged += delegate { this.OnPropertyChanged("StatusText"); }; // Gather list of implemented filters in this assembly. CompositionHelper.ComposeInExecutingAssemblyWithExported<IMemberListView>(this); DefineFilters(mcv); }
public static void TestChangingMemberGroupToSystemValueSavesOldValue(MembersContainer container, string systemValue) { const string group = "TheGroup"; Member m = CreateJohnDoe(); m.MemberDetais.membergroup = group; container.MemberSet.AddObject(m); container.SaveChanges(); m.MemberDetais.membergroup = systemValue; container.SaveChanges(); IEnumerable<Changelog> entries = container.ChangelogSet.AsEnumerable(). Where(entry => entry.action.Equals(DBConstants.NewNonMember)); Assert.AreEqual(1, entries.Count()); Changelog log = entries.First(); Assert.AreEqual(group, log.oldvalue); }
/// <summary> /// Import member database from XML file. /// </summary> /// <param name="path"></param> /// <param name="container">Table adapter for member table</param> public override void Import(string path, MembersContainer container) { if (container == null) throw new ArgumentNullException("container"); _document = new XmlDocument(); _document.Load(path); try { //EmptyDatabase(container); OnProgressChanged(0.0); ImportOrganization(container); ImportMembers(container); container.SaveChanges(); OnProgressChanged(1.0); } finally { } }
/// <summary> /// Import member database from CoW access database. /// </summary> /// <param name="path">The source (CoW) database</param> /// <param name="container">The target database</param> public override void Import(string path, MembersContainer container) { if (container == null) throw new ArgumentNullException("container"); string connectionString = String.Format(CultureInfo.CurrentCulture, "Provider=Microsoft.JET.OLEDB.4.0;data source=\"{0}\"", path); _connection = new OleDbConnection(connectionString); _connection.Open(); try { ImportOrganization(container); ImportMembers(container); HandleResignedMembers(container, _connection); container.SaveChanges(); // the important part! ;o OnProgressChanged(1.0); } finally { _connection.Close(); } }
/// <summary> /// Open the database. Will create tables if they don't exist. /// Throws exceptions if opening fails! /// </summary> public void Open() { if (!IsDatabaseCreated(_path, _password)) CreateDatabaseTables(_path, _password); else CreateBakFile(_path); Debug.Print("Opened database file {0}", _path); _database = new MembersContainerImpl(BuildConnectionString()); }
private static void EmptyDatabase(MembersContainer container) { foreach(var m in container.MemberSet.AsEnumerable()) { container.MemberSet.DeleteObject(m); } container.SaveChanges(); }
/// <summary> /// Checks if the member exists only in local database and marks as resigned if so. /// </summary> private static void HandleResignedMembers(MembersContainer container, IDbConnection connection) { foreach(var member in container.MemberSet.AsEnumerable()) { if(member.IsMember()) // we don't care if non-members don't exist in source database { if(!MemberExistsInDatabase(member, connection)) { member.MemberDetais.membergroup = DBConstants.ResignedMember; Debug.Print("Member resigned: {0} {1}", member.firstname, member.lastname); } } } }
private void ImportMembers(MembersContainer container) { XmlNodeList nodes = _document.DocumentElement.SelectNodes("*/*"); int maxMembers = nodes.Count; int currentMember = 0; foreach (XmlNode node in nodes) { ConstructMemberFromXmlNode(node, container, currentMember); if (currentMember++ % 10 == 0) OnProgressChanged((currentMember / (double)maxMembers) - 0.2); } Debug.Print("Import members done: " + maxMembers); }
private static void ImportOrganization(MembersContainer container) { container.OrganizationSet.AddObject(Organization.CreateOrganization(0, "DistrictName", "District Name")); container.OrganizationSet.AddObject(Organization.CreateOrganization(0, "OrgName", "Sample Organization")); container.OrganizationSet.AddObject(Organization.CreateOrganization(0, "BankAccount", "110000-110000")); }
/// <summary> /// Implement to do the import and update /// </summary> public abstract void Import(string path, MembersContainer container);
private void ImportOrganization(MembersContainer container) { IDbCommand cmd = _connection.CreateCommand(); cmd.CommandText = "SELECT * FROM Org;"; IDataReader reader = cmd.ExecuteReader(); reader.Read(); container.OrganizationSet.AddObject(Organization.CreateOrganization(0, "DistrictName", reader.Get<string>("DistrictName"))); container.OrganizationSet.AddObject(Organization.CreateOrganization(0, "OrgName", reader.Get<string>("OrgName"))); container.OrganizationSet.AddObject(Organization.CreateOrganization(0, "BankAccount", reader.Get<string>("BankAccount"))); Debug.Print("Imported organization name {0}/{1}", reader.Get<string>("OrgName"), reader.Get<string>("DistrictName")); }
public FakeMainWindow(Database.MembersContainer database) { _database = database; }
private void ImportMember(MembersContainer container, IDataReader reader) { string firstName = reader.Get<string>("NameFirst"); string lastName = reader.Get<string>("NameFamily"); Member member = container.MemberSet.AsEnumerable().FirstOrDefault(m => m.firstname.Equals(firstName) && m.lastname.Equals(lastName)); // If the member doesn't exist yet if (member == null) { member = Member.CreateMember(0, "", "", "", "", "", "", "", ""); member.Address = Address.CreateAddress(0, "", "", "", ""); member.MemberDetais = MemberDetais.CreateMemberDetais(0, "", "", "", "", "", "", "", ""); container.MemberSet.AddObject(member); Debug.Print("Importing a NEW member {0} {1}", firstName, lastName); } else { Debug.Print("Updating an existing member {0} {1}", firstName, lastName); } // Update or construct a member ConstructMemberAndUpdate(member, reader); }
private void ImportMembers(IDbCommand cmd, MembersContainer container) { int maxMembers = GetMemberCountInCow(); int currentMember = 0; Debug.Print("Importing {0} members", maxMembers); IDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { ImportMember(container, reader); if (currentMember++ % 10 == 0) OnProgressChanged((currentMember / (double)maxMembers) - 0.2); } OnProgressChanged(0.8); Debug.Print("Import members done: " + maxMembers); }
private static void PopulateMembersCollectionTask(MembersContainer container) { try { var members = container.MemberSet.AsEnumerable(). Select(me => new MemberViewModel(me)); // updating the screen looks better if done group by group members = members.OrderBy(me => me.MemberGroup); foreach (var member in members) { Members.Add(member); } if (RefreshFinished != null) RefreshFinished(null, null); } catch (Exception e) { Debug.Print(e.Message); Debug.Print(e.StackTrace); } }
public virtual void Initialize() { _handler = new DatabaseHandler(_testDatabaseName, "password"); _handler.Open(); _container = _handler.Database; }
public ImportWindowViewModel(MembersContainer targetDatabase, IDatabaseImporter importer) { _container = targetDatabase; _importer = importer; }
private void ImportMembers(MembersContainer container) { IDbCommand cmd = _connection.CreateCommand(); cmd.CommandText = @"SELECT Department.DepName, Department.SortOrder, Memb.MembId, Memb.MembNo, Memb.DateOfBirth, Memb.Sex, Memb.NameFamily, Memb.NameFirst, Memb.Address1, Memb.Address2, Memb.Address3, Memb.PostalCode1, Memb.PostalCode2, Memb.City, Memb.Country, Memb.CountryCode, Memb.MembType, Memb.NoMagazine, Memb.DateChange, Memb.EnterDate, Memb.DateFee, Memb.FeeAmount FROM Memb LEFT JOIN Department ON (Memb.OrgId = Department.OrgId) AND (Memb.MembId = Department.MembId);"; try { ImportMembers(cmd, container); } catch (Exception e) { Debug.WriteLine(e.Message); throw; } }