public void UpdateLogWithOtherTypeTest()
        {
            var client  = DataMother.CreateTestClientWithUser();
            var user    = client.Users[0];
            var oldName = user.Name;

            user.Name += "1";
            session.SaveOrUpdate(user);

            Flush();
            var logs = session.Query <AuditRecord>().Where(l => l.ObjectId == user.Id && l.Type == LogObjectType.User).ToList();

            Assert.That(logs.Implode(x => x.Message),
                        Is.StringContaining(String.Format("$$$Изменено 'Комментарий' было '{0}' стало '{1}'", oldName, user.Name)));
            Assert.That(logs[0].Service.Id, Is.EqualTo(client.Id));
            session.Clear();
            var newClient = DataMother.TestClient();
            var address   = new Address()
            {
                Id = user.Id
            };

            AuditRecord.UpdateLogs(newClient.Id, address);
            logs = session.Query <AuditRecord>().Where(l => l.ObjectId == user.Id && l.Type == LogObjectType.User).ToList();
            Assert.That(logs.Implode(x => x.Message),
                        Is.StringContaining(String.Format("$$$Изменено 'Комментарий' было '{0}' стало '{1}'", oldName, user.Name)));
            Assert.That(logs[0].Service.Id, Is.EqualTo(client.Id));
        }
        public virtual AuditRecord MoveToAnotherClient(ISession session, Client newOwner, LegalEntity legalEntity)
        {
            if (!newOwner.Orgs().Any(o => o.Id == legalEntity.Id))
            {
                throw new Exception(String.Format("Не могу переместить пользователя {0} т.к. юр. лицо {1} не принадлежит клиенту {2}",
                                                  this, legalEntity, newOwner));
            }

            var regions = session.Query <Region>().ToArray();

            // Если маски регионов не совпадают, добавляем записи в UserPrices для тех регионов,
            // которых не было у старого клиента, но они есть у нового клиента
            if (Client.MaskRegion != newOwner.MaskRegion)
            {
                foreach (var region in regions)
                {
                    // Если этот регион есть у старого клиента, пропускаем его
                    if ((region.Id & Client.MaskRegion) > 0)
                    {
                        continue;
                    }
                    // Если региона нет у старого клиента, но он есть у нового,
                    // и для этого пользователя нет прайсов в этом регионе добавляем прайсы для этого региона
                    if ((region.Id & newOwner.MaskRegion) > 0)
                    {
                        if (!HavePricesInRegion(session, region))
                        {
                            AddPrices(session, newOwner, region);
                        }
                    }
                }
            }
            var message = String.Format("Перемещение пользователя от {0} к {1}", Client, newOwner);

            AuditRecord.UpdateLogs(newOwner.Id, this);
            Client      = newOwner;
            RootService = newOwner;
            if (Payer != legalEntity.Payer)
            {
                Payer = legalEntity.Payer;
            }
            InheritPricesFrom = null;
            ContactGroup?.MoveTo(newOwner.ContactGroupOwner);
            session.Save(this);

            return(new AuditRecord(message, this));
        }
        public virtual AuditRecord MoveToAnotherClient(ISession session, Client newOwner, LegalEntity newLegalEntity)
        {
            if (!newOwner.Orgs().Any(o => o.Id == newLegalEntity.Id))
            {
                throw new Exception(String.Format("Не могу переместить адрес {0} т.к. юр. лицо {1} не принадлежит клиенту {2}",
                                                  this, newLegalEntity, newOwner));
            }

            Maintainer.MaintainIntersection(session, newOwner, newLegalEntity);
            MoveAddressIntersection(session, newOwner, newLegalEntity, Client, LegalEntity);

            var message = String.Format("Перемещение адреса доставки от {0} к {1}", Client, newOwner);

            Client      = newOwner;
            Payer       = newLegalEntity.Payer;
            LegalEntity = newLegalEntity;
            ContactGroup?.MoveTo(newOwner.ContactGroupOwner);
            AuditRecord.UpdateLogs(newOwner.Id, this);
            session.Save(this);

            return(new AuditRecord(message, this));
        }