public void Message_on_status_change() { Assert.That(AuditRecord.StatusChange(new Client { Status = ClientStatus.Off }).Message, Is.EqualTo("$$$Клиент отключен")); Assert.That(AuditRecord.StatusChange(new Client { Status = ClientStatus.On }).Message, Is.EqualTo("$$$Клиент включен")); }
public void MoveUserOrAddress(uint clientId, uint userId, uint addressId, uint legalEntityId, bool moveAddress) { var newClient = DbSession.Load <Client>(clientId); var address = DbSession.Get <Address>(addressId); var user = DbSession.Get <User>(userId); Client oldClient = null; if (user != null) { oldClient = user.Client; } if (address != null) { oldClient = address.Client; } var legalEntity = DbSession.Get <LegalEntity>(legalEntityId); if (legalEntity == null) { legalEntity = newClient.Orgs().Single(); } // Если нужно перенести вместе с пользователем, // адрес привязан только к этому пользователю и у пользователя нет других адресов, // тогда переносим пользователя if ((user != null && user.AvaliableAddresses.Count > 1) || (address != null && address.AvaliableForUsers.Count > 1)) { if (moveAddress) { Error("Адрес доставки не может быть перемещен, т.к. имеет доступ к нему подключены пользователи"); RedirectUsingRoute("deliveries", "Edit", new { id = address.Id }); return; } else { Error("Пользователь не может быть перемещен т.к. имеет доступ к адресам доставки"); RedirectUsingRoute("users", "Edit", new { id = user.Id }); return; } } if (user != null && user.AvaliableAddresses.Any(a => a.AvaliableForUsers.Count > 1)) { Error("Пользователь не может быть перемещен т.к. подключен к адресу который связан с другими пользователями"); RedirectUsingRoute("users", "Edit", new { id = user.Id }); return; } if (address != null) { user = address.AvaliableForUsers.SingleOrDefault(); } if (user != null) { address = user.AvaliableAddresses.SingleOrDefault(); } AuditRecord log = null; var query = new UpdateOrders(newClient, user, address); if (user != null) { log = user.MoveToAnotherClient(DbSession, newClient, legalEntity); } if (address != null) { log = address.MoveToAnotherClient(DbSession, newClient, legalEntity); } query.Execute(DbSession); DbSession.Save(log); if (address != null) { Mail().AddressMoved(address, oldClient, address.OldValue(a => a.LegalEntity)); } if (user != null) { Mail().UserMoved(user, oldClient, user.OldValue(u => u.Payer)); } if (moveAddress) { Notify("Адрес доставки успешно перемещен"); RedirectUsingRoute("deliveries", "Edit", new { id = address.Id }); } else { Notify("Пользователь успешно перемещен"); RedirectUsingRoute("users", "Edit", new { id = user.Id }); } //нужно сохранить изменения, иначе oldClient.Refresh(); не зафиксирует их DbSession.Flush(); DbSession.Refresh(oldClient); if (oldClient.Users.Count == 0 && oldClient.Addresses.Count == 0 && oldClient.Enabled) { oldClient.Disabled = true; Mail().EnableChanged(oldClient); DbSession.Save(AuditRecord.StatusChange(oldClient)); } DbSession.Save(oldClient); }