Exemple #1
0
        public void After_drugstore_registration_should_insert_record_in_user_update_info_table()
        {
            var defaults = session.Query <DefaultValues>().First();

            defaults.AnalitFVersion = 705;
            Save(defaults);
            FlushAndCommit();

            SetupGeneralInformation();
            Css("#options_FillBillingInfo").Checked = false;
            browser.Button(Find.ById("RegisterButton")).Click();

            var client     = GetRegistredClient();
            var user       = client.Users.First();
            var updateInfo = session.Load <UserUpdateInfo>(user.Id);

            Assert.That(updateInfo.AFAppVersion, Is.EqualTo(705u));

            Assert.That(client.Status, Is.EqualTo(ClientStatus.On));
            Assert.That(client.Addresses.Count, Is.EqualTo(1), "не создали адрес доставки");

            var logs           = PasswordChangeLogEntity.GetByLogin(user.Login, DateTime.Today, DateTime.Today.AddDays(1));
            var passwordChange = logs.SingleOrDefault();

            Assert.That(passwordChange, Is.Not.Null);
            Assert.That(passwordChange.UserName, Is.EqualTo(Environment.UserName));
            Assert.That(passwordChange.TargetUserName, Is.EqualTo(user.Login));
            Assert.That(passwordChange.SentTo.Contains(String.Format(_randomClientName + _mailSuffix)), Is.True);
            Assert.That(passwordChange.SmtpId, Is.Not.EqualTo(0));
            Assert.That(updateInfo, Is.Not.Null, "Не создали запись в UserUpdateInfo");
        }
Exemple #2
0
        public void Sent_to_must_be_set_into_concatenatio_of_client_mails_and_adddition_mails()
        {
            var passwordChanged = new PasswordChangeLogEntity();

            passwordChanged.SetSentTo(1, "*****@*****.**");
            Assert.That(passwordChanged.SmtpId, Is.EqualTo(1));
            Assert.That(passwordChanged.SentTo, Is.EqualTo("*****@*****.**"));
        }
Exemple #3
0
        public void PasswordChangeLog(uint id, DateTime beginDate, DateTime endDate)
        {
            var user = DbSession.Load <User>(id);

            PropertyBag["logEntities"] = PasswordChangeLogEntity.GetByLogin(user.Login,
                                                                            beginDate,
                                                                            endDate.AddDays(1));
            PropertyBag["login"]     = user.Login;
            PropertyBag["beginDate"] = beginDate;
            PropertyBag["endDate"]   = endDate;
        }
        private PasswordChangeLogEntity SendRegistrationCard(PasswordChangeLogEntity log, User user, string password, string additionalEmails)
        {
            var mailTo = EmailHelper.JoinMails(user.GetAddressForSendingClientCard(), user.GetEmails(), additionalEmails);
            var smtpid = ReportHelper.SendClientCard(user,
                                                     password,
                                                     true,
                                                     Defaults,
                                                     mailTo,
                                                     additionalEmails);

            log.SetSentTo(smtpid, mailTo);
            return(log);
        }
        public void Is_change_password_by_one_self_return_true_if_last_password_change_done_by_client()
        {
            var entities = PasswordChangeLogEntity.GetByLogin(user.Login, DateTime.MinValue, DateTime.MaxValue);

            if (entities.Count > 0)
            {
                entities.Each(l => session.Delete(l));
            }
            Assert.That(user.IsChangePasswordByOneself(), Is.False);
            Save(new PasswordChangeLogEntity(user.Login, user.Login, Environment.MachineName));
            Assert.That(user.IsChangePasswordByOneself(), Is.True);
            Save(new PasswordChangeLogEntity(user.Login, user.Login, Environment.MachineName)
            {
                LogTime = DateTime.Now.AddSeconds(10)
            });
        }
        public void DoPasswordChange(uint userId,
                                     string emailsForSend,
                                     bool isSendClientCard,
                                     bool isFree,
                                     bool changeLogin,
                                     string reason,
                                     string[] phonesForSendToUserArray,
                                     string[] phonesForSendToAdminArray)
        {
            var user = DbSession.Load <User>(userId);

            user.CheckLogin();

            var password = user.ChangePassword(Session);

            if (changeLogin)
            {
                ADHelper.RenameUser(user.Login, user.Id.ToString());
                user.Login = user.Id.ToString();
            }
            user.ResetUin();

            var passwordChangeLog = new PasswordChangeLogEntity(user.Login);

            if (isSendClientCard)
            {
                var smtpId = ReportHelper.SendClientCard(
                    user,
                    password.Password,
                    false,
                    Defaults,
                    emailsForSend);
                passwordChangeLog.SetSentTo(smtpId, emailsForSend);
            }

            string smsLog = ReportHelper.SendSmsPasswordToUser(user, password.Password, phonesForSendToUserArray);

            smsLog = smsLog + " " + ReportHelper.SendSmsToRegionalAdmin(user, password.Password, phonesForSendToAdminArray);
            passwordChangeLog.SmsLog = smsLog;

            DbSession.Save(user);
            DbSession.Save(AuditRecord.PasswordChange(user, isFree, reason));
            DbSession.Save(passwordChangeLog);

            NotificationHelper.NotifyAboutPasswordChange(Admin,
                                                         user,
                                                         password.Password,
                                                         isFree,
                                                         Context.Request.UserHostAddress,
                                                         reason);

            if (isSendClientCard)
            {
                Notify("Пароль успешно изменен.");
                RedirectTo(user, "Edit");
            }
            else
            {
                Redirect("main", "report", new { id = user.Id, isPasswordChange = true, passwordId = password.PasswordId });
            }
        }
        public void Add(
            [DataBind("contacts")] Contact[] contacts,
            [DataBind("regionSettings")] RegionSettings[] regionSettings,
            [DataBind("persons")] Person[] persons,
            string comment,
            bool sendClientCard,
            uint clientId,
            string mails,
            string jsonSource,
            string[] phonesForSendToUserArray,
            string[] phonesForSendToAdminArray)
        {
            /*Грязный ХАК, почему-то если принудительно не загрузить так, не делается Service.FindAndCheck<Service>(clientId)*/
            DbSession.Get <Client>(clientId);
            DbSession.Get <Supplier>(clientId);
            var service = Service.FindAndCheck <Service>(clientId);
            var user    = new User(service);
            var address = new Address();

            SetARDataBinder(AutoLoadBehavior.NullIfInvalidKey);
            var account = user.Accounting;

            BindObjectInstanceForUser(user, "user", jsonSource);
            BindObjectInstance(address, "address", AutoLoadBehavior.NewInstanceIfInvalidKey);
            BindObjectInstance(account, "account", AutoLoadBehavior.NewInstanceIfInvalidKey);

            if (!IsValid(user))
            {
                Add(clientId, user);
                PropertyBag["account"]                  = account;
                PropertyBag["UserMessage"]              = comment;
                PropertyBag["SendToEmail"]              = sendClientCard;
                PropertyBag["emailForSend"]             = mails;
                PropertyBag["InputPersonsList"]         = persons;
                PropertyBag["InputContactsList"]        = contacts;
                PropertyBag["SelectedRegions"]          = regionSettings;
                PropertyBag["deliveryAddress"]          = address.Value ?? "";
                PropertyBag["phonesForSendToUserList"]  = user.GetPhonesForSendingSms();
                PropertyBag["phonesForSendToAdminList"] = GetAdminByRegionForSms(user.RootService.HomeRegion.Id);
                if (!String.IsNullOrEmpty(jsonSource))
                {
                    var errorSummary = Validator.GetErrorSummary(user);
                    throw new Exception(errorSummary.InvalidProperties.Implode(x => $"{x} {errorSummary.GetErrorsForProperty(x).Implode()}"));
                }
                return;
            }

            if (String.IsNullOrEmpty(address.Value))
            {
                address = null;
            }

            if (service.IsClient() && ((Client)service).Payers.Count > 1)
            {
                if ((user.AvaliableAddresses.Any() && user.AvaliableAddresses.Select(s => s.LegalEntity).All(l => l.Payer.Id != user.Payer.Id)) || (address != null && address.LegalEntity.Payer.Id != user.Payer.Id))
                {
                    Add(service.Id);
                    PropertyBag["user"]    = user;
                    PropertyBag["address"] = address;
                    Error("Ошибка регистрации: попытка зарегистрировать пользователя и адрес в различных Плательщиках");
                    return;
                }
            }

            service.AddUser(user);
            user.Setup(DbSession);
            var password = user.CreateInAd(Session);

            if (string.IsNullOrEmpty(jsonSource))
            {
                user.WorkRegionMask  = regionSettings.GetBrowseMask();
                user.OrderRegionMask = regionSettings.GetOrderMask();
            }
            else
            {
                mails = user.EmailForCard;
            }
            user.SetFtpAccess(user.FtpAccess);

            var passwordChangeLog = new PasswordChangeLogEntity(user.Login);

            DbSession.Save(passwordChangeLog);
            user.UpdateContacts(contacts);
            user.UpdatePersons(persons);

            if (service.IsClient() && address != null)
            {
                address = ((Client)service).AddAddress(address);
                user.RegistredWith(address);
                address.SaveAndFlush();
                address.Maintain(DbSession);
            }
            DbSession.Save(service);

            if (address != null)
            {
                address.CreateFtpDirectory();
            }

            new Mailer(DbSession).Registred(user, comment, Defaults);
            user.AddBillingComment(comment);
            if (address != null)
            {
                address.AddBillingComment(comment);
                new Mailer(DbSession).Registred(address, comment, Defaults);
            }
            if (user.Client != null)
            {
                var message = string.Format("$$$Пользователю {0} - ({1}) подключены следующие адреса доставки: \r\n {2}",
                                            user.Id,
                                            user.Name,
                                            user.AvaliableAddresses.Implode(a => string.Format("\r\n {0} - ({1})", a.Id, a.Name)));
                DbSession.Save(new AuditRecord(message, user.Client)
                {
                    MessageType = LogMessageType.System
                });
            }

            string smsLog = ReportHelper.SendSmsPasswordToUser(user, password.Password, phonesForSendToUserArray);

            smsLog = smsLog + " " + ReportHelper.SendSmsToRegionalAdmin(user, password.Password, phonesForSendToAdminArray);
            passwordChangeLog.SmsLog = smsLog;

            var haveMails = !String.IsNullOrEmpty(mails) && !String.IsNullOrEmpty(mails.Trim());

            // Если установлена галка отсылать рег. карту на email и задан email (в спец поле или в контактной информации)
            if (sendClientCard && (haveMails || !string.IsNullOrEmpty(user.EmailForCard)))
            {
                var smtpId = ReportHelper.SendClientCard(user,
                                                         password.Password,
                                                         false,
                                                         Defaults,
                                                         mails);
                passwordChangeLog.SetSentTo(smtpId, new[] { mails }.Where(s => !String.IsNullOrWhiteSpace(s)).Implode());
                DbSession.Save(passwordChangeLog);

                Notify("Пользователь создан");

                if (string.IsNullOrEmpty(jsonSource))
                {
                    if (service.IsClient())
                    {
                        RedirectUsingRoute("Clients", "show", new { service.Id });
                    }
                    else
                    {
                        RedirectUsingRoute("Suppliers", "show", new { service.Id });
                    }
                }
                else
                {
                    Response.StatusCode = 200;
                    CancelView();
                }
            }
            else if (string.IsNullOrEmpty(jsonSource))
            {
                Redirect("main", "report", new { id = user.Id, passwordId = password.PasswordId });
            }
            else
            {
                Response.StatusCode = 200;
                CancelView();
            }
        }
        /// <summary>
        /// Добавление ftp-пользователя по Id клиента (для стороннего приложения)
        /// </summary>
        /// <param name="id">Id клиента</param>
        public void AddClient(uint id)
        {
            Person[] persons = new Person[0];
            string   comment = "Пользователь создан из интерфейса поставщика";
            /*Грязный ХАК, почему-то если принудительно не загрузить так, не делается Service.FindAndCheck<Service>(id)*/
            var currentClient = DbSession.Get <Client>(id);

            DbSession.Get <Supplier>(id);
            var service = Service.FindAndCheck <Service>(id);
            var user    = new User(service);

            service.AddUser(user);
            user.Setup(DbSession);
            var password = user.CreateInAd(Session);

            user.SetFtpAccess(user.FtpAccess);
            var passwordChangeLog = new PasswordChangeLogEntity(user.Login);

            DbSession.Save(passwordChangeLog);
            user.UpdatePersons(persons);
            DbSession.Save(service);

            new Mailer(DbSession).Registred(user, comment, Defaults);
            user.AddBillingComment(comment);

            if (user.Client != null)
            {
                var message = string.Format("$$$Пользователю {0} - ({1}) подключены следующие адреса доставки: \r\n {2}",
                                            user.Id,
                                            user.Name,
                                            user.AvaliableAddresses.Implode(a => string.Format("\r\n {0} - ({1})", a.Id, a.Name)));
                DbSession.Save(new AuditRecord(message, user.Client)
                {
                    MessageType = LogMessageType.System
                });
            }
            user.UseFtpGateway = true;
#if !DEBUG
            //создаем папку
            var root     = ConfigurationManager.AppSettings["FtpUserFolder"] + user.Login;
            var username = String.Format(@"ANALIT\{0}", user.Login);
            Directory.CreateDirectory(root);

            //раздаем права на папку
            var rootDirectorySecurity = Directory.GetAccessControl(root);
            var rule =
                new FileSystemAccessRule(username,
                                         FileSystemRights.Read,
                                         InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                         PropagationFlags.InheritOnly,
                                         AccessControlType.Allow);
            rootDirectorySecurity.AddAccessRule(rule);

            rule = new FileSystemAccessRule(username,
                                            FileSystemRights.Write,
                                            InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                            PropagationFlags.InheritOnly,
                                            AccessControlType.Allow);
            rootDirectorySecurity.AddAccessRule(rule);

            rule = new FileSystemAccessRule(username,
                                            FileSystemRights.Delete,
                                            InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                            PropagationFlags.InheritOnly,
                                            AccessControlType.Allow);
            rootDirectorySecurity.AddAccessRule(rule);

            rule = new FileSystemAccessRule(username,
                                            FileSystemRights.ExecuteFile,
                                            InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                            PropagationFlags.InheritOnly,
                                            AccessControlType.Allow);
            rootDirectorySecurity.AddAccessRule(rule);

            rule = new FileSystemAccessRule(username,
                                            FileSystemRights.ListDirectory,
                                            InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                            PropagationFlags.InheritOnly,
                                            AccessControlType.Allow);
            rootDirectorySecurity.AddAccessRule(rule);

            rule = new FileSystemAccessRule(username,
                                            FileSystemRights.CreateDirectories,
                                            InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                            PropagationFlags.InheritOnly,
                                            AccessControlType.Allow);
            rootDirectorySecurity.AddAccessRule(rule);

            rule = new FileSystemAccessRule(username,
                                            FileSystemRights.WriteAttributes,
                                            InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                            PropagationFlags.InheritOnly,
                                            AccessControlType.Deny);
            rootDirectorySecurity.AddAccessRule(rule);
            Directory.SetAccessControl(root, rootDirectorySecurity);
#endif

            DbSession.Save(currentClient);
            DbSession.Save(user);
            Response.StatusCode = 200;
            RenderText(user.Login + "," + password.Password);
            CancelView();
        }
        public void RegisterClient([DataBind("client")] Client client,
                                   ulong homeRegion,
                                   [DataBind("regionSettings")] RegionSettings[] regionSettings,
                                   [DataBind("permissions")] UserPermission[] permissions,
                                   [DataBind("options")] AdditionalSettings options,
                                   [DataBind("payer")] Payer payer,
                                   uint?existingPayerId,
                                   [DataBind("supplier")] Supplier supplier,
                                   [DataBind("clientContacts")] Contact[] clientContacts,
                                   [DataBind("userContacts")] Contact[] userContacts,
                                   [DataBind("userPersons")] Person[] userPersons,
                                   string additionalEmailsForSendingCard,
                                   string comment)
        {
            PasswordCreation password = null;
            var fullName     = client.FullName.Replace("№", "N").Trim();
            var name         = client.Name.Replace("№", "N").Trim();
            var currentPayer = RegisterPayer(options, payer, existingPayerId, name, fullName);

            client = new Client(currentPayer, DbSession.Load <Region>(homeRegion))
            {
                FullName          = fullName,
                Name              = name,
                MaskRegion        = regionSettings.GetBrowseMask(),
                Registration      = new RegistrationInfo(Admin),
                ContactGroupOwner = new ContactGroupOwner()
            };
            Defaults.Apply(client);
            client.Settings.WorkRegionMask  = client.MaskRegion;
            client.Settings.OrderRegionMask = regionSettings.GetOrderMask();
            var     user    = new User(client);
            var     address = new Address();
            Account account = user.Accounting;

            BindObjectInstance(client.Settings, "client.Settings");
            BindObjectInstance(user, "user");
            BindObjectInstance(account, "account");
            SetARDataBinder(AutoLoadBehavior.NullIfInvalidKey);
            BindObjectInstance(address, "address");

            var equalClientInRegion = DbSession.QueryOver <Client>().Where(c => c.HomeRegion.Id == homeRegion && c.Name == name).RowCount() > 0;
            var forValidation       = new List <object> {
                client
            };

            if (!options.RegisterEmpty)
            {
                forValidation.Add(user);
                client.AddUser(user);
            }

            if (!IsValid(forValidation) || equalClientInRegion)
            {
                DbSession.Delete(currentPayer);
                RegisterClient();
                PropertyBag["clientContacts"] = clientContacts;
                PropertyBag["client"]         = client;
                PropertyBag["user"]           = user;
                PropertyBag["address"]        = address;
                PropertyBag["options"]        = options;
                PropertyBag["account"]        = account;
                if (equalClientInRegion)
                {
                    Error(string.Format("В данном регионе уже существует клиент с таким именем {0}", name));
                }
                return;
            }

            if (String.IsNullOrEmpty(address.Value) || options.RegisterEmpty)
            {
                address = null;
            }

            if (options.RegisterEmpty)
            {
                user = null;
            }

            if (address != null)
            {
                address.Value = address.Value.Replace("№", "N").Trim();
                client.AddAddress(address);
            }

            CreateDrugstore(client, options, supplier);
            AddContacts(client.ContactGroupOwner, clientContacts);

            if (user != null)
            {
                CreateUser(user, permissions, userPersons);
                user.UpdateContacts(userContacts);
                user.RegistredWith(client.Addresses.LastOrDefault());

                password = user.CreateInAd(Session);

                var log = new PasswordChangeLogEntity(user.Login);
                if (options.SendRegistrationCard)
                {
                    log = SendRegistrationCard(log, user, password.Password, additionalEmailsForSendingCard);
                }

                string smsLog = "";
                if (options.SendSmsToUser)
                {
                    var phonesForSendToUserArray = user.GetPhonesForSendingSms().Select(x => x.Number).ToArray();
                    smsLog = smsLog + " " + ReportHelper.SendSmsPasswordToUser(user, password.Password, phonesForSendToUserArray);
                }

                if (options.SendSmsToAdmin)
                {
                    var phonesForSendToAdminArray = GetPhoneSupportByRegionForSms(user.RootService.HomeRegion.Id);
                    smsLog = smsLog + " " + ReportHelper.SendSmsToRegionalAdmin(user, password.Password, phonesForSendToAdminArray);
                }
                log.SmsLog = smsLog;

                DbSession.Save(log);
            }

            client.Addresses.Each(a => a.CreateFtpDirectory());
            client.AddBillingComment(comment);
            new Mailer(DbSession).ClientRegistred(client, comment, Defaults);

            if (!options.FillBillingInfo)
            {
                Mail().NotifyBillingAboutClientRegistration(client);
            }

            if (options.FillBillingInfo)
            {
                Redirect("Register", "RegisterPayer", new {
                    id = client.Payers.Single().Id,
                    showRegistrationCard = options.ShowRegistrationCard,
                    passwordId           = password != null ? password.PasswordId : ""
                });
            }
            else if (client.Users.Count > 0 && options.ShowRegistrationCard)
            {
                Redirect("main", "report", new {
                    id         = client.Users.First().Id,
                    passwordId = password.PasswordId
                });
            }
            else
            {
                Notify("Регистрация завершена успешно");
                RedirectTo(client);
            }
        }
        public void RegisterSupplier(
            [DataBind("supplierContacts")] Contact[] supplierContacts,
            ulong homeRegion,
            [DataBind("regionSettings")] RegionSettings[] regionSettings,
            [DataBind("options")] AdditionalSettings options,
            [DataBind("payer")] Payer payer,
            uint?existingPayerId,
            [DataBind("userContacts")] Contact[] userContacts,
            [DataBind("userPersons")] Person[] userPersons,
            string additionalEmailsForSendingCard,
            string comment)
        {
            var supplier = new Supplier();

            supplier.RegionMask = regionSettings.GetBrowseMask();
            SetARDataBinder(AutoLoadBehavior.NewRootInstanceIfInvalidKey);
            BindObjectInstance(supplier, "supplier");
            SetBinder(new DataBinder());

            var currentPayer = RegisterPayer(options, payer, existingPayerId, supplier.Name, supplier.FullName);

            supplier.HomeRegion        = DbSession.Load <Region>(homeRegion);
            supplier.Payer             = currentPayer;
            supplier.Account           = new SupplierAccount(supplier);
            supplier.ContactGroupOwner = new ContactGroupOwner(supplier.GetAditionalContactGroups());
            supplier.Registration      = new RegistrationInfo(Admin);

            var user = new User(supplier.Payer, supplier);

            BindObjectInstance(user, "user");

            if (!IsValid(supplier, user, options))
            {
                RegisterSupplier();
                PropertyBag["options"]  = options;
                PropertyBag["supplier"] = supplier;
                PropertyBag["user"]     = user;
                PropertyBag["options"]  = options;
                return;
            }
            var tokens = DbSession.Query <FederalSupplierToken>().ToList();

            supplier.IsFederal = tokens.Select(x => x.Name)
                                 .Any(x => supplier.Name.IndexOf(x, StringComparison.CurrentCultureIgnoreCase) >= 0 ||
                                      supplier.FullName.IndexOf(x, StringComparison.CurrentCultureIgnoreCase) >= 0);
            supplier.ContactGroupOwner.AddContactGroup(new ContactGroup(ContactGroupType.MiniMails));
            currentPayer.Suppliers.Add(supplier);
            currentPayer.UpdatePaymentSum();
            AddContacts(supplier.ContactGroupOwner, supplierContacts);
            supplier.OrderRules.Add(new OrderSendRules(Defaults, supplier));
            DbSession.Save(supplier);

            foreach (var group in supplier.ContactGroupOwner.ContactGroups)
            {
                var persons  = BindObject <List <Person> >(group.Type + "Persons");
                var contacts = BindObject <List <Contact> >(group.Type + "Contacts");

                group.Persons  = persons;
                group.Contacts = contacts;
            }

            var groups = BindObject <RegionalDeliveryGroup[]>("orderDeliveryGroup");

            foreach (var group in groups)
            {
                group.Region            = DbSession.Load <Region>(group.Region.Id);
                group.Name              = "Доставка заказов " + group.Region.Name;
                group.ContactGroupOwner = supplier.ContactGroupOwner;
                supplier.ContactGroupOwner.ContactGroups.Add(group);

                //повторная валидация, тк когда производился binding валидация не прошла
                //тк не было заполнено поле Name
                Validator.IsValid(group);
            }

            foreach (var group in supplier.ContactGroupOwner.ContactGroups)
            {
                group.Adopt();
                DbSession.Save(group);
                group.Persons.Each(p => DbSession.Save(p));
            }

            DbSession.Flush();

            DbSession.Query <Region>()
            .Where(r => (r.Id & supplier.RegionMask) > 0)
            .Each(r => supplier.AddRegion(r, DbSession));
            CreateSupplier(supplier);
            Maintainer.MaintainIntersection(supplier, DbSession);

            user.UpdateContacts(userContacts);
            foreach (var person in userPersons)
            {
                user.AddContactPerson(person.Name);
            }
            user.AssignDefaultPermission(DbSession);
            user.Setup(DbSession);

            var password = user.CreateInAd(Session);

            supplier.AddBillingComment(comment);

            Mailer.SupplierRegistred(supplier, comment);
            //Создание директорий для поставщика на фтп
            supplier.CreateDirs();

            var log = new PasswordChangeLogEntity(user.Login);

            if (options.SendRegistrationCard)
            {
                log = SendRegistrationCard(log, user, password.Password, additionalEmailsForSendingCard);
            }

            string smsLog = "";

            if (options.SendSmsToUser)
            {
                var phonesForSendToUserArray = user.GetPhonesForSendingSms().Select(x => x.Number).ToArray();
                smsLog = smsLog + " " + ReportHelper.SendSmsPasswordToUser(user, password.Password, phonesForSendToUserArray);
            }

            if (options.SendSmsToAdmin)
            {
                var phonesForSendToAdminArray = GetPhoneSupportByRegionForSms(user.RootService.HomeRegion.Id);
                smsLog = smsLog + " " + ReportHelper.SendSmsToRegionalAdmin(user, password.Password, phonesForSendToAdminArray);
            }
            log.SmsLog = smsLog;

            DbSession.Save(log);

            if (options.FillBillingInfo)
            {
                Redirect("Register", "RegisterPayer", new {
                    id = supplier.Payer.Id,
                    showRegistrationCard = options.ShowRegistrationCard,
                    passwordId           = password.PasswordId
                });
            }
            else if (supplier.Users.Count > 0 && options.ShowRegistrationCard)
            {
                Redirect("main", "report", new {
                    id         = supplier.Users.First().Id,
                    passwordId = password.PasswordId
                });
            }
            else
            {
                Notify("Регистрация завершена успешно");
                Redirect("Suppliers", "Show", new { id = supplier.Id });
            }
        }