コード例 #1
0
ファイル: Change.cs プロジェクト: apazureck/bierstrichler
 /// <summary>
 /// Constructor for Buying or selling an Item
 /// </summary>
 /// <param name="Initiator">Initiator of the action.</param>
 /// <param name="Customer">Customer, who bought the article.</param>
 /// <param name="Date">DateTime when the action was initiated.</param>
 /// <param name="Amount">Change amount</param>
 /// <param name="ID">Change number</param>
 public Change(Person Initiator, Person Customer, DateTime Date, int Amount, int ID)
 {
     this.Initiator = Initiator.ID;
     this.Customer = Customer.ID;
     this.Date = Date;
     this.Amount = Amount;
     this.ID = ID;
 }
コード例 #2
0
ファイル: Consumed.cs プロジェクト: apazureck/bierstrichler
 /// <summary>
 /// Constructor for buying an item. The constructor will remove one unit of the item.
 /// </summary>
 /// <param name="item">Item to buy</param>
 /// <param name="price">Paid price for the item</param>
 /// <param name="Initiator">Person, who sold the item</param>
 /// <param name="Customer">Person, who bought the item</param>
 /// <param name="ID">Item ID</param>
 public Consumed(Item item, decimal price, Person Initiator, Person Customer, int ID)
 {
     ItemID = item.ID;
     Value = price;
     Type = ConsumeType.Purchase;
     ItemChangeID = item.Remove(Initiator, Customer);
     Date = DateTime.Now;
     Comment = "";
     this.ID = ID;
 }
コード例 #3
0
ファイル: Consumed.cs プロジェクト: apazureck/bierstrichler
 /// <summary>
 /// Constructor 
 /// </summary>
 /// <param name="amount">Amount of money to pay in, pay out or for special payment.</param>
 /// <param name="Initiator">Initiator who did the pay in</param>
 /// <param name="ID">Item ID</param>
 /// <param name="comment">Comment, fill out if special payment is intended.</param>
 public Consumed(decimal amount, Person Initiator, int ID, string comment = "")
 {
     ItemID = new Guid();
     Value = amount;
     if (comment == "")
     {
         if (amount < 0)
             Type = ConsumeType.Inpayment;
         else
             Type = ConsumeType.Payout;
         Comment = EnumHelper.GetDescription(Type);
     }
     else
     {
         Type = ConsumeType.SpecialPayment;
         if (amount < 0)
             throw new Exception("Amount must not be negative with special payment.");
         Comment = comment;
     }
     this.ID = ID;
     Date = DateTime.Now;
     ItemChangeID = -1;
 }
コード例 #4
0
        private void CheckPassword()
        {
            wrongLoginMsg.Visibility = Visibility.Collapsed;
            wrongRightsMsg.Visibility = Visibility.Collapsed;
            try
            {
                if(App.Persons.Count<1)
                {
                    FoundUser = App.CurrentVendor;
                    Close();
                    return;
                }

                IList<Person> pl = new List<Person>();
                foreach (Person x in App.Persons)
                {
                    if(x.Name.Trim() == NameBox.Text.Trim() || x.Initials == NameBox.Text.Trim().ToUpper())
                    {
                        pl.Add(x);
                        continue;
                    }
                    if(x is Korpo && !string.IsNullOrEmpty(((Korpo)x).Vulgo) && ((Korpo)x).Vulgo == NameBox.Text.Trim())
                    {
                        pl.Add(x);
                        continue;
                    }
                }

                FoundUser = null;

                foreach(Person p in pl)
                    if(CompareHashes(GetHash(PasswordBox), p.Password))
                    {
                        if (!(p.Rights.Worker || p.Rights.Moderator || p.Rights.Cashier || p.Rights.BeerAdmin || p.Rights.Administrator))
                        {
                            wrongRightsMsg.Visibility = System.Windows.Visibility.Visible;
                        }
                        else
                        {
                            FoundUser = p;
                            Close();
                            return;
                        }
                    }
                throw new Exception();

            }
            catch (Exception e)
            {
                wrongLoginMsg.Visibility = System.Windows.Visibility.Visible;
            }
        }
コード例 #5
0
ファイル: Special.cs プロジェクト: apazureck/bierstrichler
 public Special(Person p)
     : base()
 {
     GetProperties(p);
 }
コード例 #6
0
 private bool IsAlreadyInList(Person p)
 {
     return Persons.FirstOrDefault(x => x.Model == p) == default(PersonViewModel) ? false : true;
 }
コード例 #7
0
 internal void Remove(Person p)
 {
     RemoveViewModelFromList(p);
     Model.Remove(p);
     RaisePropertyChanged("Count");
 }
コード例 #8
0
ファイル: Consumer.cs プロジェクト: apazureck/bierstrichler
 public void SpecialPayment(decimal amount, Person Initiator, string Comment)
 {
     if (amount <= 0)
         throw new ArgumentOutOfRangeException("Der Wert muss positiv sein.");
     Guthaben -= amount;
     History.Add(new Consumed(amount, Initiator, History.Count>0?History.Last().ID+1:0, Comment));
 }
コード例 #9
0
ファイル: Consumer.cs プロジェクト: apazureck/bierstrichler
 public bool Pay(Items.Item item, decimal factor, Person Initiator)
 {
     decimal amount = PaysBuingPrice ? item.PriceBuying : item.PriceSelling * factor;
     Guthaben -= amount;
     History.Add(new Consumed(item, amount, Initiator, this, History.Count>0 ? History.Last().ID+1 : 0));
     return true;
 }
コード例 #10
0
        public static void SendReminderToUser(Person p)
        {
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress(MailAddress);
            mail.To.Add(new MailAddress(p.Email));
            mail.Subject = "Reminder: Unterschreitung deines Mindestguthabens";
            mail.Body = SetValuesInPlaceHolders(File.ReadAllText(MailFolder + @"\standardReminder.txt", Encoding.Default), p);
            // Can set to false, if you are sending pure text.

            SendMailNow(mail);
        }
コード例 #11
0
ファイル: Item.cs プロジェクト: apazureck/bierstrichler
 /// <summary>
 /// Funktion zum Verkaufen.
 /// </summary>
 /// <param name="Initiator">Verkäufer</param>
 /// <param name="Customer">Käufer</param>
 /// <param name="Amount">Anzahl</param>
 public int Remove(Person Initiator, Person Customer, uint Amount)
 {
     Change c = new Change(Initiator, Customer, DateTime.Now, -Convert.ToInt32(Amount), Changes.Count > 0 ? Changes.Last().ID + 1 : 0);
     Changes.Add(c);
     UpdateStock(-Convert.ToInt32(Amount));
     Log.WriteInformation(Initiator.Name + " sold " + Amount.ToString() + " of " + this.Name + " to " + Customer.Name);
     if (ItemRemoved != null)
         ItemRemoved(this, new ChangeEventArgs(c));
     return c.ID;
 }
コード例 #12
0
ファイル: Item.cs プロジェクト: apazureck/bierstrichler
 /// <summary>
 /// Standard Strichelfunktion, entfernt 1 Item aus der Liste
 /// </summary>
 /// <param name="Initiator">Verkäufer</param>
 /// <param name="Customer">Käufer</param>
 public int Remove(Person Initiator, Person Customer)
 {
     return Remove(Initiator, Customer, 1);
 }
コード例 #13
0
ファイル: Item.cs プロジェクト: apazureck/bierstrichler
 /// <summary>
 /// Entfernt ein Item aus dem Stock
 /// </summary>
 /// <param name="Initiator">Verantwortlicher für die Änderung</param>
 public int Remove(Person Initiator)
 {
     return Remove(Initiator, 1);
 }
コード例 #14
0
ファイル: Item.cs プロジェクト: apazureck/bierstrichler
 /// <summary>
 /// Fügt eine gewünschte Anzahl zum Stock hinzu.
 /// </summary>
 /// <param name="Initiator">Verantwortlicher für die Änderung</param>
 /// <param name="Amount">Anzahl der Items</param>
 public void Add(Person Initiator, uint Amount)
 {
     Changes.Add(new Change(Initiator, DateTime.Now, Convert.ToInt32(Amount), Changes.Count>0? Changes.Last().ID+1 : 0));
     UpdateStock(Convert.ToInt32(Amount));
     Log.WriteInformation(Initiator.Name + " added " + Amount.ToString() + " " + this.Name);
 }
コード例 #15
0
ファイル: Item.cs プロジェクト: apazureck/bierstrichler
 /// <summary>
 /// Fügt ein Item dem Stock hinzu
 /// </summary>
 /// <param name="Initiator">Verantwortlicher für die Änderung</param>
 public void Add(Person Initiator)
 {
     Add(Initiator, 1);
 }
コード例 #16
0
 public static void SendReminderToUserAsync(Person p)
 {
     Task.Run(() =>
         {
             lock (sendLock)
             {
                 SendReminderToUser(p);
             }
         });
 }
コード例 #17
0
        internal static void SendTestMail(Person p)
        {
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress(MailAddress);
            mail.To.Add(new MailAddress(p.Email));
            mail.Subject = "Testmail";
            mail.Body = "Testmail";

            SendMailNow(mail);
        }
コード例 #18
0
ファイル: Person.cs プロジェクト: apazureck/bierstrichler
 /// <summary>
 /// Clone Constructor.
 /// </summary>
 /// <param name="p">Person to clone</param>
 public Person(Person origin)
 {
     GetProperties(origin);
 }
コード例 #19
0
        /// <summary>
        /// Replaces the values in the string with the information by the person using a "$Token|Format$" Syntax. The Tokens are the Property names of the person.
        /// </summary>
        /// <param name="s">strings where the tokens should be replaced.</param>
        /// <param name="p"></param>
        /// <returns></returns>
        private static string SetValuesInPlaceHolders(string s, Person p, Dictionary<string, object> additionalValues = null)
        {
            try
            {
                s = regIf.Replace(s, delegate(Match m)
                {
                    string compare = m.Groups[1].Value;
                    Match cm = regComparer.Match(compare);
                    string left = cm.Groups[1].Value;
                    dynamic leftValue = p.GetType().GetProperty(left).GetValue(p);
                    string right = cm.Groups[3].Value;
                    dynamic rightValue = CastOtherValue(right, leftValue);
                    string comparer = cm.Groups[2].Value;
                    string replacement = "";
                    switch (comparer)
                    {
                        case "<":
                            replacement = leftValue < rightValue ? m.Groups[2].Value : m.Groups[3].Value;
                            break;
                        case ">":
                            replacement = leftValue > rightValue ? m.Groups[2].Value : m.Groups[3].Value;
                            break;
                        case "<=":
                            replacement = leftValue <= rightValue ? m.Groups[2].Value : m.Groups[3].Value;
                            break;
                        case ">=":
                            replacement = leftValue >= rightValue ? m.Groups[2].Value : m.Groups[3].Value;
                            break;
                        case "=":
                            replacement = leftValue == rightValue ? m.Groups[2].Value : m.Groups[3].Value;
                            break;
                        case "<>":
                            replacement = leftValue != rightValue ? m.Groups[2].Value : m.Groups[3].Value;
                            break;
                        default:
                            throw new InvalidOperationException("Not a valid comparer");
                    }
                    return SetValuesInPlaceHolders(replacement, p, additionalValues);
                });

                s = regToken.Replace(s, delegate(Match m)
                {
                    string[] values = m.Groups[1].Value.Split('|');
                    object repValue;
                    switch (values[0])
                    {
                        case "CurrentDate":
                            repValue = DateTime.Now;
                            break;
                        default:
                            try
                            {
                                repValue = p.GetType().GetProperty(values[0]).GetValue(p);
                            }
                            catch
                            {
                                if (additionalValues == null)
                                    return m.Value;
                                repValue = additionalValues[values[0]];
                            }
                            break;
                    }
                    return FormatValue(values, repValue);
                });
            }
            catch (Exception e)
            {
                if (DebugMode)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("Konnte Token nicht finden.");
                    sb.AppendLine("Erlaubte Token:");
                    foreach (PropertyInfo pi in p.GetType().GetProperties())
                        sb.AppendLine(pi.Name);
                    MessageBox.Show(sb.ToString(), "Fehler beim Versenden der Test Email.", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Asterisk);
                }
                else
                    Log.WriteErrorFromException("The Method MailScheduler.SetValuesInPlaceholders threw an exception.", e);
            }
            return s;
        }
コード例 #20
0
ファイル: Consumer.cs プロジェクト: apazureck/bierstrichler
 public void PayoutMoney(decimal amount, Person Initiator)
 {
     if (amount <= 0)
         throw new ArgumentOutOfRangeException("Der Wert muss positiv sein.");
     Guthaben -= amount;
     History.Add(new Consumed(amount, Initiator, History.Count != 0 ? History.Last().ID + 1 : 0));
 }
コード例 #21
0
 public PersonEventArgs(Person person = null)
 {
     this.Person = person;
     Index = -1;
 }
コード例 #22
0
 internal void Add(Person p)
 {
     Model.Add(p);
     AddViewModelToList(p);
     RaisePropertyChanged("Count");
 }
コード例 #23
0
 public PersonEventArgs(Person person, int index)
 {
     this.Person = person;
     Index = index;
 }
コード例 #24
0
 private void AddViewModelToList(Person p)
 {
     Persons.Add(new PersonViewModel(p));
 }
コード例 #25
0
        private void RemovePersonFromPresentList(Person p)
        {
            // Remove from PresentList
            AllPersons.Add(p);
            PresentPersons.Remove(p);

            int foundIndex = -1;

            // remove Timer
            try
            {
                if(logoutTimers[p.ID]!=null)
                {
                    logoutTimers[p.ID].Stop();
                    logoutTimers[p.ID].Tick -= logoutTimer_Tick;
                    logoutTimers.Remove(p.ID);
                }
                logoutTimers.Remove(p.ID);
            }
            catch
            {
                Log.WriteDebug("Could not remove Timer");
            }

            // Remove from saved list
            for (int i = 0; i < LoggedInUsers.Count; i++)
                if (LoggedInUsers[i].Contains(p.ID.ToString()))
                {
                    foundIndex = i;
                    break;
                }
            if (foundIndex<0)
            {
                Log.WriteDebug("No valid user Timer to remove found");
                return;
            }
            LoggedInUsers.RemoveAt(foundIndex);
            Bierstrichler.Properties.Settings.Default.Save();

            Log.WriteInformation(App.CurrentVendor.Name + " removed " + p.Name + " from Present List.");
        }
コード例 #26
0
 private void RemoveViewModelFromList(Person p)
 {
     try
     {
         Persons.Remove(Persons.First(x => x.Model == p));
     }
     catch { }
 }
コード例 #27
0
 public PersonViewModel(Person Model)
 {
     this.Model = Model;
     BeerCharts.ChartsUpdated += BeerCharts_ChartsUpdated;
     App.CurrentVendorChanged += App_CurrentVendorChanged;
 }