public void SearchPayerForDrugstoreWithoutSuppliersWithDrugsSearchRegion()
        {
            var client    = DataMother.CreateTestClientWithUser();
            var payer     = client.Payers.First();
            var recipient = session.Query <Recipient>().First();

            payer.Recipient = recipient;
            session.Save(payer);
            var homeRegion = session.Load <Region>(1UL);
            var supplier   = new Supplier(homeRegion, payer)
            {
                Name              = "Тестовый поставщик",
                FullName          = "Тестовый поставщик",
                ContactGroupOwner = new ContactGroupOwner(ContactGroupType.ClientManagers)
            };

            supplier.AddRegion(session.Query <Region>().First(r => r.DrugsSearchRegion), session);
            session.Save(supplier);

            var filter = new PayerFilter(session)
            {
                SearchBy         = SearchBy.PayerId,
                SearchText       = payer.Id.ToString(),
                ClientType       = SearchClientType.Drugstore,
                WithoutSuppliers = true
            };
            var items = filter.Find();

            Assert.That(items.Count, Is.EqualTo(1));
        }
Example #2
0
        public void Disable_region()
        {
            var regions = session.Query <Region>().ToList();
            var region  = regions
                          .Except(regions.Where(r => (r.Id & supplier.RegionMask) > 0).Concat(new[] { supplier.HomeRegion }))
                          .First();

            supplier.AddRegion(region, session);

            Open("managep.aspx?cc={0}", supplier.Id);
            var table = (Table)Css("#MainContentPlaceHolder_Regions");
            var row   = table.FindRow(region.Name, 1);

            Click(row, "Отключить");
            table = (Table)Css("#MainContentPlaceHolder_Regions");
            Assert.That(table.Text, Is.Not.Contains(region.Name));

            session.Refresh(supplier);
            Assert.AreEqual(0, supplier.RegionMask & region.Id);
        }
        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 });
            }
        }