effectivePeriod of any two marriages of the same husband or wife must not overlapped
Ejemplo n.º 1
0
 public void Update(Marriage marriage)
 => _db.Execute(
     $"UPDATE {TableName}"
     + $" SET {string.Join(",", GetNames().Select(x => $"{x}=@{x}"))}"
     + $" WHERE {nameof(Marriage.id)}={marriage.id}",
     GetObj(marriage)
     );
Ejemplo n.º 2
0
        private JsonItem GetMarriageNode(Person person, Marriage marriage)
        {
            var marriageStr = Utils.GetMarriageDescription(marriage);

            var partnerId   = (marriage.husband_id == person.id) ? marriage.wife_id : marriage.husband_id;
            var partner     = _persons.Where(x => x.id == partnerId).SingleOrDefault();
            var partnerNode = default(JsonItem);

            if (partner != null)
            {
                if (_processed.ContainsKey(partner))
                {
                    partnerNode = new JsonItem(GetFullMarriageDescription(marriageStr, Utils.GetDuplicateStr(partner)));
                }
                else
                {
                    partnerNode = new JsonItem(GetFullMarriageDescription(marriageStr, Utils.GetPersonDescription(partner)));
                }
            }
            else
            {
                partnerNode = new JsonItem(GetFullMarriageDescription(marriageStr, "(unknown)"));
            }

            return(partnerNode);
        }
Ejemplo n.º 3
0
        public void CloneObjectAndRefenceListObjects()
        {
            var sut = this.SetupMapper();

            var husband = new Person {
                Age = 46, FirstName = "Eddard", LastName = "Stark"
            };
            var wife = new Person {
                Age = 44, FirstName = "Catelyn", LastName = "Stark"
            };

            var children = this.SetupPersonList();

            husband.Children = children;
            wife.Children    = children;

            var marriage = new Marriage {
                Husband = husband, Wife = wife
            };

            var clone = sut.Clone(marriage);

            for (int i = 0; i < clone.Husband.Children.Count; i++)
            {
                var child1 = clone.Husband.Children[i];
                var child2 = clone.Wife.Children[i];

                Assert.AreSame(child1, child2);
            }
        }
Ejemplo n.º 4
0
        public ActionResult Marriage(Marriage marriage)
        {
            if (ModelState != null)
            {
                using (RevenueManagementDbContext db = new RevenueManagementDbContext())
                {
                    var result1 = db.Marriages.Where(a => a.Email == marriage.Email).FirstOrDefault();
                    if (result1 != null)
                    {
                        ViewBag.Feedback = "Record Already Exist.";
                        return(RedirectToAction("Marriage"));
                    }
                    db.SaveChanges();

                    var result = db.Citizens.Single(a => a.Email == marriage.Email);
                    db.SaveChanges();

                    if (result == null)
                    {
                        return(View());
                    }


                    marriage.CitizenId = result.CitizenId;
                    db.Marriages.Add(marriage);

                    db.SaveChanges();

                    ModelState.Clear();

                    ViewBag.Feedback = "Successfully Registered.";
                }
            }
            return(View());
        }
Ejemplo n.º 5
0
        public void ImportEmptyObject()
        {
            Marriage m = (Marriage)Import(typeof(Marriage), "{}");

            Assert.IsNull(m.Husband, "Husband");
            Assert.IsNull(m.Wife, "Wife");
        }
Ejemplo n.º 6
0
        public ActionResult EditMarriage(Marriage emp)
        {
            using (RevenueManagementDbContext db = new RevenueManagementDbContext())
            {
                var emp1 = db.Marriages.Where(row => row.Id == emp.Id).FirstOrDefault();
                if (emp1 == null)
                {
                    return(RedirectToAction("RegisteredMarriage"));
                }

                emp1.Id             = emp.Id;
                emp1.Occupation     = emp.Occupation;
                emp1.AmountPaid     = emp.AmountPaid;
                emp1.NameOfCouple   = emp.NameOfCouple;
                emp1.Date           = emp.Date;
                emp1.DateRegistered = emp.DateRegistered;
                emp1.Email          = emp.Email;
                int res = db.SaveChanges();
                if (res > 0)
                {
                    ViewBag.Message = "Successfully Updated";
                }
            }
            return(View());
        }
Ejemplo n.º 7
0
        public void EmbeddedObjects()
        {
            Person snow = new Person();

            snow.Id       = 2;
            snow.FullName = "Snow White";

            Person albert = new Person();

            albert.Id       = 1;
            albert.FullName = "Albert White";

            Marriage m = new Marriage();

            m.Husband = albert;
            m.Wife    = snow;

            Test(new JsonObject(
                     new string[] { "husband", "wife" },
                     new object[] {
                /* Husband */ new JsonObject(
                    new string[] { "id", "fullName" },
                    new object[] { albert.Id, albert.FullName }),
                /* Wife */ new JsonObject(
                    new string[] { "id", "fullName" },
                    new object[] { snow.Id, snow.FullName })
            }), m);
        }
Ejemplo n.º 8
0
        public static IOccassion GetOccassionInputs(Occasion occasion, ILog logger)
        {
            IOccassion newOccassion = null;
            string     name1 = string.Empty, name2 = string.Empty;

            switch (occasion)
            {
            case Occasion.Birthday:
                Console.WriteLine("Get birthyguy name");
                name1        = Console.ReadLine();
                newOccassion = new Birthday(name1);
                break;

            case Occasion.HouseWarming:
                Console.WriteLine("Get houseonwers name");
                name1        = Console.ReadLine();
                newOccassion = new HouseWarming(name1);
                break;

            case Occasion.Marriage:
                Console.WriteLine("Get bride and grooms name");
                name1        = Console.ReadLine();
                name2        = Console.ReadLine();
                newOccassion = new Marriage(name1, name2);
                break;
            }
            return(newOccassion);
        }
Ejemplo n.º 9
0
        //访问者
        public static void testVisitor()
        {
            ObjectStructure o = new ObjectStructure();

            o.Attach(new Man());
            o.Attach(new Woman());

            Success v1 = new Success();

            o.Display(v1);

            Failing v2 = new Failing();

            o.Display(v2);

            Amativeness v3 = new Amativeness();

            o.Display(v3);

            Marriage v4 = new Marriage();

            o.Display(v4);

            Console.Read();
        }
        public void EmbeddedObjects()
        {
            Person snow = new Person();
            snow.Id = 2;
            snow.FullName = "Snow White";

            Person albert = new Person();
            albert.Id = 1;
            albert.FullName = "Albert White";
            
            Marriage m = new Marriage();
            m.Husband = albert;
            m.Wife = snow;

            Test(new JsonObject(
                new string[] { "Husband", "Wife" },
                new object[] {
                    /* Husband */ new JsonObject(
                        new string[] { "Id", "FullName" },
                        new object[] { albert.Id, albert.FullName }),
                    /* Wife */ new JsonObject(
                        new string[] { "Id", "FullName" },
                        new object[] { snow.Id, snow.FullName })
                }), m);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Рандомное создание персоны
        /// </summary>
        /// <returns>Возвращает персону типа Adult</returns>
        public static Adult GetRandomPerson()
        {
            //TODO: RSDN
            Random random = new Random();

            Thread.Sleep(20);
            Gender   gender        = new Gender();
            Marriage maritalStatus = new Marriage();

            if (random.Next(0, 10) < 5)
            {
                gender = Gender.Male;
                Thread.Sleep(20);
            }
            if (random.Next(0, 10) < 7)
            {
                maritalStatus = Marriage.Married;
                Thread.Sleep(20);
            }
            else if (random.Next(0, 10) >= 7)
            {
                maritalStatus = Marriage.Unmarried;
                Thread.Sleep(20);
            }
            return(GetPerson(gender, maritalStatus));
        }
Ejemplo n.º 12
0
        public void EmbeddedObjects()
        {
            var snow = new Person {
                Id = 2, FullName = "Snow White"
            };
            var albert = new Person {
                Id = 1, FullName = "Albert White"
            };
            var m = new Marriage {
                Husband = albert, Wife = snow
            };

            var obj = new JsonObject
            {
                new JsonMember("husband", new JsonObject
                {
                    new JsonMember("id", albert.Id),
                    new JsonMember("fullName", albert.FullName),
                }),
                new JsonMember("wife", new JsonObject
                {
                    new JsonMember("id", snow.Id),
                    new JsonMember("fullName", snow.FullName),
                }),
            };

            Test(obj, m);
        }
Ejemplo n.º 13
0
        public async Task DivorceAsync(EventContext e)
        {
            using (MikiContext context = new MikiContext())
            {
                var marriages = await Marriage.GetMarriagesAsync(context, e.Author.Id.ToDbLong());

                if (marriages.Count == 0)
                {
                    throw new Exception("You're not married to anyone.");
                }

                UserMarriedTo m = await SelectMarriageAsync(e, context, marriages);

                string otherName = await User.GetNameAsync(context, m.GetOther(e.Author.Id.ToDbLong()));

                EmbedBuilder embed = Utils.Embed;
                embed.Title       = $"🔔 {e.GetResource("miki_module_accounts_divorce_header")}";
                embed.Description = e.GetResource("miki_module_accounts_divorce_content", e.Author.Username, otherName);
                embed.Color       = new Color(0.6f, 0.4f, 0.1f);
                embed.ToEmbed().QueueToChannel(e.Channel);

                m.Remove(context);
                await context.SaveChangesAsync();
            }
        }
Ejemplo n.º 14
0
        public async Task <Result <bool, Error> > TryAddMarriage(ulong user1, ulong user2)
        => await _soraTransactor.TryDoInTransactionAsync(async context =>
        {
            this.OrderUserIdsRef(ref user1, ref user2);

            // Check if already exists
            var marr = await context.Marriages.FirstOrDefaultAsync(x => x.Partner1Id == user1 && x.Partner2Id == user2);
            if (marr != null)
            {
                return(new Result <bool, Error>(new Error("You are already married to this person")));
            }

            // Make sure users exists :)
            await context.Users.GetOrCreateUserNoSaveAsync(user1);
            await context.Users.GetOrCreateUserNoSaveAsync(user2);

            var user1Count = await this.GetUserMarriageCount(user1);
            var user2Count = await this.GetUserMarriageCount(user2);
            if (user1Count >= _MAX_MARRIAGES || user2Count >= _MAX_MARRIAGES)
            {
                return(new Result <bool, Error>(new Error("Marriage limit has been reached")));
            }

            // Otherwise we create it
            var marriage = new Marriage()
            {
                Partner1Id   = user1,
                Partner2Id   = user2,
                PartnerSince = DateTime.UtcNow
            };

            context.Marriages.Add(marriage);
            await context.SaveChangesAsync();
            return(true);
        }).ConfigureAwait(false);
Ejemplo n.º 15
0
        private List <JsonItem> GetChildrenNodes(Marriage marriage)
        {
            var childrenNodes = default(List <JsonItem>);
            var sons          = _sons.Where(x => x.marriage_id == marriage.id).ToList();

            if (sons.Any())
            {
                childrenNodes = new List <JsonItem>();
                foreach (var son in sons)
                {
                    var sonPerson = _persons.Where(x => x.id == son.person_id).Single();
                    var sonNode   = default(JsonItem);
                    if (_processed.ContainsKey(sonPerson))
                    {
                        sonNode = new JsonItem(_processed[sonPerson]);
                    }
                    else
                    {
                        sonNode = GetDeepNode(sonPerson);
                    }
                    childrenNodes.Add(sonNode);
                }
            }

            return(childrenNodes);
        }
Ejemplo n.º 16
0
        public async Task DeclineMarriageAsync(EventContext e)
        {
            using (MikiContext context = new MikiContext())
            {
                var marriages = await Marriage.GetProposalsReceived(context, e.Author.Id.ToDbLong());

                if (marriages.Count == 0)
                {
                    throw new Exception("You do not have any proposals.");
                }

                UserMarriedTo m = await SelectMarriageAsync(e, context, marriages);

                string otherName = await User.GetNameAsync(context, m.GetOther(e.Author.Id.ToDbLong()));

                new EmbedBuilder()
                {
                    Title       = $"🔫 You shot down {otherName}!",
                    Description = $"Aww, don't worry {otherName}. There is plenty of fish in the sea!",
                    Color       = new Color(191, 105, 82)
                }.ToEmbed().QueueToChannel(e.Channel);

                m.Remove(context);
                await context.SaveChangesAsync();
            }
        }
Ejemplo n.º 17
0
        public async Task MarryAsync(EventContext e)
        {
            Locale locale = Locale.GetEntity(e.Channel.Id);

            if (e.message.MentionedUserIds.Count == 0)
            {
                await e.Channel.QueueMessageAsync(locale.GetString("miki_module_accounts_marry_error_no_mention"));

                return;
            }

            using (MikiContext context = new MikiContext())
            {
                IDiscordUser user = await e.Guild.GetUserAsync(e.message.MentionedUserIds.First());

                User mentionedPerson = await User.GetAsync(context, user);

                User currentUser = await User.GetAsync(context, e.Author);

                if (mentionedPerson.Banned)
                {
                    return;
                }

                if (currentUser == null || mentionedPerson == null)
                {
                    await Utils.ErrorEmbed(locale, "miki_module_accounts_marry_error_null").QueueToChannel(e.Channel);

                    return;
                }

                if (mentionedPerson.Id == currentUser.Id)
                {
                    await Utils.ErrorEmbed(locale, locale.GetString("miki_module_accounts_marry_error_null")).QueueToChannel(e.Channel);

                    return;
                }

                if (await Marriage.ExistsAsync(context, mentionedPerson.Id, currentUser.Id))
                {
                    await Utils.ErrorEmbed(locale, locale.GetString("miki_module_accounts_marry_error_exists")).QueueToChannel(e.Channel);

                    return;
                }

                if (await Marriage.ProposeAsync(context, currentUser.Id, mentionedPerson.Id))
                {
                    await Utils.Embed
                    .SetTitle("💍" + e.GetResource("miki_module_accounts_marry_text", $"**{e.Author.Username}**", $"**{user.Username}**"))
                    .SetDescription(locale.GetString("miki_module_accounts_marry_text2", user.Username, e.Author.Username))
                    .SetColor(0.4f, 0.4f, 0.8f)
                    .SetThumbnailUrl("https://i.imgur.com/TKZSKIp.png")
                    .AddInlineField("✅ To accept", $">acceptmarriage @user")
                    .AddInlineField("❌ To decline", $">declinemarriage @user")
                    .SetFooter("Take your time though! This proposal won't disappear", "")
                    .QueueToChannel(e.Channel);
                }
            }
        }
Ejemplo n.º 18
0
 private object GetObj(Marriage marriage) => new
 {
     husband_id = marriage.husband_id,
     wife_id    = marriage.wife_id,
     date       = marriage.date,
     place      = marriage.place,
     comments   = marriage.comments
 };
Ejemplo n.º 19
0
        public MarriageViewer(string connStr, Marriage matrimoni)
        {
            _personaRepository   = new PersonRepository(connStr);
            _matrimoniRepository = new MarriageRepository(connStr);
            _fillRepository      = new SonRepository(connStr);

            _matrimoni = matrimoni;
        }
Ejemplo n.º 20
0
        private ActionResult Marriage(Marriage marriage)
        {
            var people = _personRepository.GetAll();

            ViewBag.men   = Utils.GetPersonsSelectListByGender(people, isMale: true);
            ViewBag.women = Utils.GetPersonsSelectListByGender(people, isMale: false);

            return(View(nameof(MarriageController.Marriage), marriage));
        }
Ejemplo n.º 21
0
        public async ValueTask AcceptProposalAsync(Marriage marriage)
        {
            marriage.TimeOfMarriage = DateTime.Now;
            marriage.IsProposing    = false;

            await marriageRepository.EditAsync(marriage);

            await unitOfWork.CommitAsync();
        }
Ejemplo n.º 22
0
 /// <summary>
 /// Конструктор взрослого
 /// </summary>
 /// <param name="name">Имя</param>
 /// <param name="surname">Фамилия</param>
 /// <param name="age">Возраст</param>
 /// <param name="sex">Пол</param>
 /// <param name="passport">Паспортные данные</param>
 /// <param name="marriage">Семейное положение</param>
 public Adult(string name, string surname, int age, Gender sex,
              string passport, Marriage marriage, string job)
     : base(name, surname, sex)
 {
     Age      = age;
     Passport = passport;
     Marriage = marriage;
     Job      = job;
 }
Ejemplo n.º 23
0
        public async Task <IActionResult> AddRelative(AddRelativeModel addRelativeModel)
        {
            if (addRelativeModel.RelativeTypeId == 1)
            {
                var toPerson   = _db.Persons.FirstOrDefault(n => n.Id == addRelativeModel.ToPersonId);
                var fromPerson = _db.Persons.FirstOrDefault(n => n.Id == addRelativeModel.FromPersonId);

                if (toPerson is null || fromPerson is null)
                {
                    return(RedirectToAction("Profile"));
                }

                Marriage marriage = new Marriage()
                {
                    WeddDate    = addRelativeModel.WeddDate,
                    IsDivorced  = addRelativeModel.IsDivorced,
                    DivorceDate = addRelativeModel.DivorceDate,
                    Description = $"{toPerson.Firstname} и {fromPerson.Firstname}"
                };

                try
                {
                    await _db.Marriages.AddAsync(marriage);

                    await _db.SaveChangesAsync();

                    addRelativeModel.MarriageId = marriage.Id;
                }
                catch (InvalidOperationException ex)
                {
                    return(RedirectToAction("Profile"));
                }
            }

            var relative = new UserRelative()
            {
                ToUserId       = addRelativeModel.ToPersonId,
                FromUserId     = addRelativeModel.FromPersonId,
                RelativeTypeId = addRelativeModel.RelativeTypeId,
                MarriageId     = addRelativeModel.MarriageId
            };

            try
            {
                await _db.UserRelatives.AddAsync(relative);

                await _db.SaveChangesAsync();
            }
            catch (InvalidOperationException ex)
            {
                return(RedirectToAction("Profile"));
            }
            return(RedirectToAction("Profile", "User", new { id = addRelativeModel.ToPersonId }));
        }
Ejemplo n.º 24
0
        public void modifyOccasion_PositiveTest1()
        {
            //Arrange
            var marriage  = new Marriage("bride1", "groom1");
            var marriage2 = new Marriage("bride2", "groom2");

            //Act
            marriage.modifyOccasion(marriage2);
            //Assert
            Assert.AreEqual(marriage.Bride, "bride2");
            Assert.AreEqual(marriage.Groom, "groom2");
        }
Ejemplo n.º 25
0
        public Marriage Add(Marriage marriage)
        {
            var id = _db.Query <int>(
                $"INSERT INTO {TableName}"
                + $" ({string.Join(",", GetNames().Select(x => $"{x}"))})"
                + $" VALUES ({string.Join(",", GetNames().Select(x => $"@{x}"))});"
                + $" SELECT LAST_INSERT_ID();",
                GetObj(marriage)
                ).Single();

            marriage.id = id;
            return(marriage);
        }
Ejemplo n.º 26
0
        private Marriage FindMarriageData(Marriage marriage)
        {
            var father = DB.Database.GetDatabase().FetchBy <Person>(sql => sql.Where(x => x.id.Equals(marriage.husband_id))).FirstOrDefault();
            var mother = DB.Database.GetDatabase().FetchBy <Person>(sql => sql.Where(x => x.id.Equals(marriage.wife_id))).FirstOrDefault();
            var sonIds = (DB.Database.GetDatabase().FetchBy <MarriageSon>(sql => sql.Where(x => x.marriage_id.Equals(marriage.id)))).Select(x => x.son_id).ToList();
            var sons   = DB.Database.GetDatabase().FetchBy <Person>(sql => sql.Where(x => sonIds.Contains((long)x.id))).ToList();

            marriage.Husband = father;
            marriage.Wife    = mother;
            marriage.Sons    = sons;

            return(marriage);
        }
Ejemplo n.º 27
0
        public async Task MarryAsync(EventContext e)
        {
            Locale locale = Locale.GetEntity(e.Channel.Id);

            if (e.message.MentionedUserIds.Count == 0)
            {
                await e.Channel.SendMessage(locale.GetString("miki_module_accounts_marry_error_no_mention"));

                return;
            }

            using (MikiContext context = new MikiContext())
            {
                User mentionedPerson = await context.Users.FindAsync(e.message.MentionedUserIds.First().ToDbLong());

                User currentUser = await context.Users.FindAsync(e.Author.Id.ToDbLong());

                IDiscordUser user = await e.Guild.GetUserAsync(e.message.MentionedUserIds.First());

                if (currentUser == null || mentionedPerson == null)
                {
                    await Utils.ErrorEmbed(locale, "miki_module_accounts_marry_error_null").SendToChannel(e.Channel);

                    return;
                }

                if (mentionedPerson.Id == currentUser.Id)
                {
                    await Utils.ErrorEmbed(locale, locale.GetString("miki_module_accounts_marry_error_null")).SendToChannel(e.Channel);

                    return;
                }

                if (await Marriage.ExistsAsync(context, mentionedPerson.Id, currentUser.Id))
                {
                    await Utils.ErrorEmbed(locale, locale.GetString("miki_module_accounts_marry_error_exists")).SendToChannel(e.Channel);

                    return;
                }

                if (await Marriage.ProposeAsync(context, currentUser.Id, mentionedPerson.Id))
                {
                    await e.Channel.SendMessage(
                        $"💍 " +
                        locale.GetString("miki_module_accounts_marry_text", $"**{e.Author.Username}**", $"**{user.Username}**") +
                        " 💍\n\n⛪ " + user.Username + " " +
                        locale.GetString("miki_module_accounts_marry_text2") +
                        $" ⛪\n\n✅ **>acceptmarriage [@{locale.GetString("miki_terms_mention")}]**\n❌ **>declinemarriage [@{locale.GetString("miki_terms_mention")}]**");
                }
            }
        }
Ejemplo n.º 28
0
        public Parser(string path)
        {
            people = new List <Person>();

            XmlReaderSettings settings = new XmlReaderSettings();

            settings.DtdProcessing    = DtdProcessing.Parse;
            settings.ValidationType   = ValidationType.DTD;
            settings.IgnoreWhitespace = true;

            using (XmlReader reader = XmlReader.Create(path, settings))
            {
                Person   currentPerson   = null;
                Marriage currentMarriage = null;

                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        switch (reader.Name)
                        {
                        case "Person":
                        {
                            currentPerson = new Person(reader.GetAttribute("name"), ParseDateString(reader.GetAttribute("birth_date")));
                            people.Add(currentPerson);

                            break;
                        }

                        case "Marriage":
                        {
                            currentMarriage =
                                new Marriage(reader.GetAttribute("spouse_name"), ParseDateString(reader.GetAttribute("marriage_date")), ParseDateString(reader.GetAttribute("divorce_date")));

                            currentPerson.Marriages.Add(currentMarriage);

                            break;
                        }

                        case "Child":
                        {
                            var child = new Child(reader.GetAttribute("name"));

                            currentMarriage.Childs.Add(child);
                            break;
                        }
                        }
                    }
                }
            }
        }
Ejemplo n.º 29
0
        public ActionResult MarriageByPersonId(int personId)
        {
            var person = _personRepository.GetById(personId);

            if (person.is_male)
            {
                // MAN:
                var marriagesByHusband = _marriageRepository.GetAllByHusbandId(personId);
                if (marriagesByHusband.Any())
                {
                    if (marriagesByHusband.Count() == 1)
                    {
                        return(Marriage(marriagesByHusband.Single()));
                    }
                    else
                    {
                        return(RedirectToMessage("Error: more than one marriage", false));
                    }
                }
                else
                {
                    var marriage = new Marriage {
                        husband_id = personId
                    };
                    return(Marriage(marriage));
                }
            }
            else
            {
                // WOMAN:
                var marriagesByWife = _marriageRepository.GetAllByWifeId(personId);
                if (marriagesByWife.Any())
                {
                    if (marriagesByWife.Count() == 1)
                    {
                        return(Marriage(marriagesByWife.Single()));
                    }
                    else
                    {
                        return(RedirectToMessage("Error: more than one marriage", false));
                    }
                }
                else
                {
                    var marriage = new Marriage {
                        wife_id = personId
                    };
                    return(Marriage(marriage));
                }
            }
        }
Ejemplo n.º 30
0
        private Marriage GetMarriageFromHusbandLine(string line, Person husband, Person wife)
        {
            var cells    = line.Split(',');
            var marriage = new Marriage()
            {
                date       = GetDate(cells[7]),
                place      = cells[9],
                husband_id = husband?.id,
                wife_id    = wife?.id
            };

            marriage.id = (long)_db.Insert(marriage);
            return(marriage);
        }
Ejemplo n.º 31
0
        public async Task AcceptMarriageAsync(EventContext e)
        {
            if (e.message.MentionedUserIds.Count == 0)
            {
                await e.Channel.SendMessage("Please mention the person you want to marry.");

                return;
            }

            using (var context = new MikiContext())
            {
                Marriage marriage = await Marriage.GetProposalReceivedAsync(context, e.message.MentionedUserIds.First(), e.Author.Id);

                if (marriage != null)
                {
                    User person1 = await context.Users.FindAsync(marriage.Id1);

                    User person2 = await context.Users.FindAsync(marriage.Id2);

                    if (person1.MarriageSlots < Marriage.GetMarriages(context, person1.Id).Count)
                    {
                        await e.Channel.SendMessage($"{person1.Name} do not have enough marriage slots, sorry :(");

                        return;
                    }

                    if (person2.MarriageSlots < Marriage.GetMarriages(context, person2.Id).Count)
                    {
                        await e.Channel.SendMessage($"{person2.Name} does not have enough marriage slots, sorry :(");

                        return;
                    }

                    marriage.AcceptProposal(context);

                    Log.Message(marriage.Proposing.ToString());

                    await context.SaveChangesAsync();

                    await e.Channel.SendMessage($"❤️ Congratulations { person1.Name } and { person2.Name } ❤️");
                }
                else
                {
                    await e.Channel.SendMessage("This user hasn't proposed to you!");

                    return;
                }
            }
        }