예제 #1
0
        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 = "";
        }
예제 #2
0
 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));
 }
예제 #3
0
 /// <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");
 }
예제 #4
0
        public static void InitializeNonAsync(MembersContainer container)
        {
            Members = new ThreadSafeObservableCollection<MemberViewModel>();

            PopulateMembersCollectionTask(container);

            container.SavingChanges += (s, o) => RefreshMembersListTask(container.ObjectStateManager);
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
        /// <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);
        }
예제 #7
0
        /// <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(); };
        }
예제 #8
0
        /// <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();
        }
예제 #9
0
        /// <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);
        }
예제 #10
0
        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);
        }
예제 #11
0
        /// <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
            {

            }
        }
예제 #12
0
파일: CowImport.cs 프로젝트: markusl/jro
        /// <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();
            }
        }
예제 #13
0
        /// <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());
        }
예제 #14
0
 private static void EmptyDatabase(MembersContainer container)
 {
     foreach(var m in container.MemberSet.AsEnumerable())
     {
         container.MemberSet.DeleteObject(m);
     }
     container.SaveChanges();
 }
예제 #15
0
파일: CowImport.cs 프로젝트: markusl/jro
 /// <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);
             }
         }
     }
 }
예제 #16
0
        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);
        }
예제 #17
0
 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"));
 }
예제 #18
0
 /// <summary>
 /// Implement to do the import and update 
 /// </summary>
 public abstract void Import(string path, MembersContainer container);
예제 #19
0
파일: CowImport.cs 프로젝트: markusl/jro
        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"));
        }
예제 #20
0
 public FakeMainWindow(Database.MembersContainer database)
 {
     _database = database;
 }
예제 #21
0
파일: CowImport.cs 프로젝트: markusl/jro
        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);
        }
예제 #22
0
파일: CowImport.cs 프로젝트: markusl/jro
        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);
        }
예제 #23
0
        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);
            }
        }
예제 #24
0
 public virtual void Initialize()
 {
     _handler = new DatabaseHandler(_testDatabaseName, "password");
     _handler.Open();
     _container = _handler.Database;
 }
예제 #25
0
 public ImportWindowViewModel(MembersContainer targetDatabase, IDatabaseImporter importer)
 {
     _container = targetDatabase;
     _importer = importer;
 }
예제 #26
0
파일: CowImport.cs 프로젝트: markusl/jro
        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;
            }
        }