Потреб. кооперация на Друпал

Главные вкладки

Аватар пользователя Kottov Kottov 19 сентября 2014 в 0:52

Такой вопрос для социального проекта, близкого к http://vk.com/coopsoc

Как оргазизовать Потреб. Кооперацию (Массовые закупки) на Друпал?

Один пользователь предлагает где-то закупиться оптом. Создает материл "массовая запупка". Другие пользователи должны "подписать" себя под это и указать количество.
Пока что вижу такой вариант:
К "массовой запупке" добавляем ссылку "Заказать" ведущую (с помошью Entity Ref. prepopulate via URL) на создание ноды Заказа. Там вводиться количество заказа. Потом это можно выводить предствалением, с суммированием по столбцам.

Есть ли более удобные способы? Чтоб пользвателю не надо было уходить со страницы "массоврй запупки" и он мог отредактировать заказ прямо на ней.

Комментарии

Аватар пользователя Nikit Nikit 19 сентября 2014 в 1:44

Простой случай:
либо как ты описал, либо:
Материал - массовая закупка -> поле field_collection (uid + кол-во) = кастомная форма для добавления заказа с проверкой на количество.
--------------------------------
Сложный случай:
Organic Group - позволяет создавать мини-сообщества, например по какой-то закупке.
Внутри есть главная тема - описание массовой закупки.
Люди могут создавать определенный материал в группе - кол-во закупок.
Там же общаются по массовой закупке, или внутри своих заказов.
Создатель (контролер) может определять, кто будет смотреть его закупку (общедоступно, приватно по приглашению).

Аватар пользователя Kottov Kottov 19 сентября 2014 в 4:15

Спасибо за идеи, попробую их развить.

Через Entity Ref. prepopulate via URL: как сделать по типу basic cart - добавление "заказа". Как-то не серьезно для того чтоб одну цифру ввести переходить на создание ноды? Через программное создание ноды с получением количества через Ajax?

Через field_collection - как другие пользователи смогут добавлять свои данные в чужую ноду? Можно дать права всем править поля в таком-то типе содержимого. Но как еще при этом запретить не менять чужие данные?

Через ОG: Добавить Group Content "Заказ" с полем количества, ассоциировать его с Группой "массовая закупка". Через Views/Pane сделать выборку по полям с выводом суммы.

Надо еще будет учесть особенности "математики" потреб кооперации. Будет цена за единицу по себестоимости и + накладные расходы. Чем больше заказов тем цена приходящаяся на каждого будет уменьшатся за счет распределения накладных расходов на всех. (я так понимаю что через представление это будет делать не просто.)
Далее - подтверждение готовности купить. Так как необходимое количество заказов могу собираться долго, и цена может быть уже измениться.
Ну еще что продавец (если его предложение имеется на сайте) скорее всего не будет заниматься "массовой закупкой" - он может указать цену за опт, стоимость доставки, а собирать заказы надо на местном уровне. То есть цепочка связных нод в общем случае будет такая: "Предложение" продавца/производителя - "массовая закупка" от местного активиста/потреб.кооператива - "Заказы" потребителей.
Тогда "Предложение" - обычная нода
"массовою закупку" можно создавать по Entity Ref. prepopulate via URL с "Предложения" (или с "нуля" если продавец вне системы)
"массовою закупку" сделать Группой
"Заказы" потребителей - Групповым контентом

еще один попутный вопрос: как сделать чтоб фиктивные группы не путались вместе с настоящими?
это надо создать дополнительный OG membership type в /admin/config/group/group-membership
или надо создать еще одно Grope Field (og_group_ref) в OG field settings /admin/config/group/fields

Аватар пользователя Nikit Nikit 19 сентября 2014 в 4:30

"Kottov" wrote:
Через field_collection - как другие пользователи смогут добавлять свои данные в чужую ноду? Можно дать права всем править поля в таком-то типе содержимого. Но как еще при этом запретить не менять чужие данные?

Кастомная форма для подписки/изменения/удаления...

Аватар пользователя Nikit Nikit 19 сентября 2014 в 4:34

"Kottov" wrote:
еще один попутный вопрос: как сделать чтоб фиктивные группы не путались вместе с настоящими?

что за фиктивные группы?

Аватар пользователя Kottov Kottov 19 сентября 2014 в 4:38

то есть с нуля ее сделать?
нода должна запоминить кто и что ввел в поле.
не могли бы ссылку дать на подобное, или модуль который работает аналогичным образом.

Аватар пользователя Nikit Nikit 19 сентября 2014 в 4:47

Заказчик создает закупку - нода с collection field (которая пуста).
Люди заходят на эту ноду, внизу видят блок с формой. Форма сделана через кастомный модуль - берет параметр nid, и имеет поле - кол-во и кнопку Подписаться. Валидейт формы - проверяешь количество на допустимость. При сабмите: в главную ноду пишешь field collection с кол-м и uid.

Аватар пользователя Orion76 Orion76 19 сентября 2014 в 8:54

А если для заказа комментарии к закупке использовать?...
Добавить поле для Кол-ва, а далее рулесами разрулить..

Аватар пользователя adubovskoy adubovskoy 19 сентября 2014 в 11:25

Так идея нежизнеспособная в принципе. Т.к. массовые закупки работают только в контексте форумов и соц.сетей. Всякие форумы мамочек и т.п. Сколько было попыток пересадить их с бесконечных лент обсуждений phpbb на автоматизированные площадки для этого - все провалились, которые я видел.

Аватар пользователя Kottov Kottov 20 сентября 2014 в 4:13

в одном из вариантов так оно и может быть соц сеть с элементами сотрудничества.

тут речь идет о специализированном сервисе для идейных людей, кооператоров, коммунаров. Для них это практически часть трудового процесса. Так что пока что важнее функционал.

Аватар пользователя Kottov Kottov 23 сентября 2014 в 22:08

"orion76" wrote:
А если для заказа комментарии к закупке использовать?...

думал об этом, но так как уже использовались OG - то уже приделал к ним
сделал вывод представления под "массовой закупкой" с выводом всех заказов и агрегацией суммы
через Global PHP внедрил перерасчет цены (от количества общего заказа) и сумму к оплате для каждого участника

теперь надо организовать сбор общей суммы:
в ноду заказа можно добавить чек-бокс "внес средства по своему заказу" и в представлении отобразить это
но как для организатора (хозяина ноды "массовой закупки") внести в таблицу свою пометку в строку заказчика что оп "получил средства от этого участника"?

пока что вижу такой вариант:
Добавить в ноду заказа (или прямо в таблицу представления) кнопку видимую только организатору
по которой если он кникнет - по ajax, добавится значение в скрытое поле на ноде заказа - "получил средства от этого участника"
которое будет выводится представлении.

Может есть более правильные варианты?

Аватар пользователя Kottov Kottov 25 сентября 2014 в 16:10

для взаимодействия "администратор-пользователи" - это вариант.
тут же пользователи взаимодействуют между собой и каждый "хозяин" только своей ноды.
т.е. у организатора (OG "массовая закупка") нет прав редактировать заказы участников закупки. Да и не нужны они ему, так как он не может принимать решения за них.

Сделал пока через Флаги. Организатор может ставить (глобальные) флаги на заказы участников, отмечая свои действия по ним. Это можно все делать примо из представления. Также и пользователи могут ставиить "метки" флагами по своим заказам - например: "оплатил", "получил", и тп. Ну и все это через аякс.

Тут показано как добавлять флаги к предствавлению через GLOBAL PHP
http://projectricochet.com/blog/how-add-flag-link-drupal-view#.VCLgEvmSxJk
но там же говорят что уже есть прямой путь - не могу понять/найти как.

Аватар пользователя Kottov Kottov 25 сентября 2014 в 16:31

Единственная трудность возникла ограничить тех кому не надо в том чтобы ставить/менять глобальные флаги
если делать через родную функцию модуля access - то и блокируется флаг полностью (с отображением)
также настройка "Users may only flag content they own" - (что можно было использовать для участников) - блокирует отображение глобального флага для всех "не хозяев".

Пришлось добавить пару строк в flag.module в function template_preprocess_flag(&$variables)

<?phpif($flag->name == 'received_contribution'){
        $node_this = node_load( $entity_id, null, true);

        $node_group_ref_nid = $node_this->og_group_ref['und'][0]['target_id'];
        $node_group_ref = node_load($node_group_ref_nid, null, true);
            if($node_group_ref->uid != $user->uid) {
            unset($link['href']);
                    }
    }

    if($flag->name == 'sent_contribution'){
        $node = node_load( $entity_id);
        if($node->uid != $user->uid) {
            unset($link['href']);
        }
    }?>

чтобы убрать ссылки (и оставить значения флага) для тех кому не надо

вбить в строку ссылку на прямую чтобы поменять чужие значения не получиться так как в ссылки генерируются с уникальными токенами