3#include "../core/gamification/gamification.hpp"
26 bool is_external_contract =
false;
31 uint64_t hours_per_day = 0;
43 double energy = 99.9999999999;
48 checksum256
by_hash()
const {
return contributor_hash; }
55 uint64_t
by_rating()
const {
return contributed_as_investor.amount + contributed_as_creator.amount + contributed_as_author.amount + contributed_as_coordinator.amount + contributed_as_contributor.amount + contributed_as_propertor.amount; }
58typedef eosio::multi_index<
60 indexed_by<
"byusername"_n, const_mem_fun<contributor, uint64_t, &contributor::by_username>>,
61 indexed_by<
"byhash"_n, const_mem_fun<contributor, checksum256, &contributor::by_hash>>,
62 indexed_by<
"byinvrate"_n, const_mem_fun<contributor, uint64_t, &contributor::by_investor_rating>>,
63 indexed_by<
"bycreatorate"_n, const_mem_fun<contributor, uint64_t, &contributor::by_creator_rating>>,
64 indexed_by<
"byauthorate"_n, const_mem_fun<contributor, uint64_t, &contributor::by_author_rating>>,
65 indexed_by<
"bycoordrate"_n, const_mem_fun<contributor, uint64_t, &contributor::by_coordinator_rating>>,
66 indexed_by<
"bycontrate"_n, const_mem_fun<contributor, uint64_t, &contributor::by_contributor_rating>>,
67 indexed_by<
"byprprate"_n, const_mem_fun<contributor, uint64_t, &contributor::by_propertor_rating>>,
68 indexed_by<
"byrating"_n, const_mem_fun<contributor, uint64_t, &contributor::by_rating>>
82 const eosio::name
ACTIVE =
"active"_n;
83 const eosio::name
IMPORT =
"import"_n;
86 inline void create_contributor(eosio::name coopname, eosio::name username, checksum256 contributor_hash,
bool is_external_contract,
document2 contract, eosio::asset rate_per_hour, uint64_t hours_per_day){
89 contributors.emplace(coopname, [&](
auto &c) {
91 c.coopname = coopname;
92 c.username = username;
93 c.contributor_hash = contributor_hash;
95 c.is_external_contract = is_external_contract;
97 c.created_at = eosio::current_time_point();
98 c.rate_per_hour = rate_per_hour;
99 c.hours_per_day = hours_per_day;
103 c.energy = 99.9999999999;
104 c.last_energy_update = eosio::current_time_point();
113 eosio::name coopname,
114 eosio::name username,
115 checksum256 contributor_hash,
116 eosio::asset contribution_amount,
121 contributors.emplace(coopname, [&](
auto &c) {
123 c.coopname = coopname;
124 c.username = username;
125 c.contributor_hash = contributor_hash;
127 c.is_external_contract =
true;
128 c.created_at = eosio::current_time_point();
132 c.contributed_as_investor = contribution_amount;
136 c.energy = 99.9999999999;
137 c.last_energy_update = eosio::current_time_point();
147 auto contributor_itr = contributors.find(contributor_id);
148 eosio::check(contributor_itr != contributors.end(),
"Контрибьютор не найден");
150 contributors.modify(contributor_itr,
_capital, [&](
auto &c) {
151 c.appendixes.push_back(project_hash);
158 inline std::optional<contributor>
get_contributor(eosio::name coopname, eosio::name username) {
160 auto username_index = contributors.get_index<
"byusername"_n>();
162 auto itr = username_index.find(username.value);
163 if (itr == username_index.end()) {
178 auto hash_index = contributors.get_index<
"byhash"_n>();
180 auto itr = hash_index.find(contributor_hash);
181 if (itr == hash_index.end()) {
194 auto contributor = contributors.find(contributor_id);
202 if (appendix_project_hash == project_hash) {
216 eosio::check(
contributor.has_value(),
"Исполнитель не подписывал договор УХД");
228 "Пайщик не подписывал приложение к договору УХД для данного проекта");
239 eosio::check(
contributor.has_value(),
"Исполнитель не подписывал договор УХД");
242 "Договор УХД с пайщиком не в статусе active или import");
254 auto contributor = contributors.find(contributor_id);
256 eosio::check(
contributor != contributors.end(),
"Контрибьютор не найден");
263 c.contributed_as_author += (segment.author_base + segment.author_bonus);
267 c.contributed_as_creator += (segment.creator_base + segment.creator_bonus);
271 c.contributed_as_coordinator += segment.coordinator_base;
275 c.contributed_as_contributor += segment.contributor_bonus;
279 c.contributed_as_propertor += segment.property_base;
292 auto contributor = contributors.find(contributor_id);
294 eosio::check(
contributor != contributors.end(),
"Контрибьютор не найден");
306 auto contributor = contributors.find(contributor_id);
308 eosio::check(
contributor != contributors.end(),
"Контрибьютор не найден");
320inline void edit_contributor(eosio::name coopname, uint64_t contributor_id, eosio::asset rate_per_hour, uint64_t hours_per_day) {
322 auto contributor = contributors.find(contributor_id);
324 eosio::check(
contributor != contributors.end(),
"Участник не найден");
326 contributors.modify(
contributor, coopname, [&](
auto &c) {
328 c.hours_per_day = hours_per_day;
340 auto contributor = contributors.find(contributor_id);
342 eosio::check(
contributor != contributors.end(),
"Участник не найден");
345 c.contributed_as_investor +=
amount;
356 eosio::name coopname,
357 uint64_t contributor_id,
358 eosio::asset rate_per_hour,
359 uint64_t hours_per_day,
360 bool is_external_contract,
364 auto contributor = contributors.find(contributor_id);
366 eosio::check(
contributor != contributors.end(),
"Участник не найден");
370 contributors.modify(
contributor, coopname, [&](
auto &c) {
372 c.hours_per_day = hours_per_day;
374 if (!is_external_contract) {
Контракт Contributor управляет вкладами, распределением вознаграждений и выводом средств для участник...
Definition: contributor.hpp:17
static constexpr eosio::name _capital
Definition: consts.hpp:150
static constexpr eosio::symbol _root_govern_symbol
Definition: consts.hpp:209
contract
Definition: eosio.msig_tests.cpp:977
share_type amount
Definition: eosio.token_tests.cpp:174
const eosio::name ACTIVE
Авторизован/активен
Definition: contributors.hpp:82
const eosio::name IMPORT
Импортирован, требует завершения регистрации
Definition: contributors.hpp:83
const eosio::name PENDING
Ожидает подтверждения
Definition: contributors.hpp:81
Definition: contributors.hpp:72
void complete_imported_contributor_registration(eosio::name coopname, uint64_t contributor_id, eosio::asset rate_per_hour, uint64_t hours_per_day, bool is_external_contract, document2 contract)
Завершает регистрацию импортированного участника Обновляет импортированного участника (статус IMPORT)...
Definition: contributors.hpp:355
void import_contributor(eosio::name coopname, eosio::name username, checksum256 contributor_hash, eosio::asset contribution_amount, std::string memo)
Создаёт импортированного участника; contributed_as_investor сразу равен сумме импортируемого взноса в...
Definition: contributors.hpp:112
std::optional< contributor > get_active_contributor_with_appendix_or_fail(eosio::name coopname, const checksum256 &project_hash, eosio::name username)
Получает участника по имени аккаунта, проверяет активность и членство в проекте.
Definition: contributors.hpp:225
void create_contributor(eosio::name coopname, eosio::name username, checksum256 contributor_hash, bool is_external_contract, document2 contract, eosio::asset rate_per_hour, uint64_t hours_per_day)
Definition: contributors.hpp:86
void push_appendix_to_contributor(eosio::name coopname, uint64_t contributor_id, checksum256 project_hash)
Добавляет project_hash в вектор appendixes у контрибьютора
Definition: contributors.hpp:145
void increase_investor_contribution(eosio::name coopname, uint64_t contributor_id, eosio::asset amount)
Увеличивает инвестиционный вклад участника
Definition: contributors.hpp:338
std::optional< contributor > get_contributor_by_hash(eosio::name coopname, const checksum256 &contributor_hash)
Получает участника по хэшу контрибьютора.
Definition: contributors.hpp:176
bool is_contributor_has_appendix_in_project(eosio::name coopname, const checksum256 &project_hash, uint64_t contributor_id)
Проверяет есть ли у контрибьютора приложение для проекта
Definition: contributors.hpp:192
void edit_contributor(eosio::name coopname, uint64_t contributor_id, eosio::asset rate_per_hour, uint64_t hours_per_day)
Обновляет параметры участника (часы в день и информацию о себе)
Definition: contributors.hpp:320
std::optional< contributor > get_contributor(eosio::name coopname, eosio::name username)
Получает участника по имени аккаунта.
Definition: contributors.hpp:158
std::optional< contributor > get_active_contributor_or_fail(eosio::name coopname, eosio::name username)
Получает участника по имени аккаунта и проверяет на активность.
Definition: contributors.hpp:214
std::optional< contributor > get_contributor_for_regshare_or_fail(eosio::name coopname, eosio::name username)
Контрибьютор, допустимый для capital::regshare без приложения к проекту. Статусы import (импорт с бал...
Definition: contributors.hpp:237
void increase_debt_amount(eosio::name coopname, uint64_t contributor_id, eosio::asset amount)
Увеличивает долг контрибьютора
Definition: contributors.hpp:290
void decrease_debt_amount(eosio::name coopname, uint64_t contributor_id, eosio::asset amount)
Увеличивает долг контрибьютора
Definition: contributors.hpp:304
void update_contributor_ratings_from_segment(eosio::name coopname, uint64_t contributor_id, const Capital::Segments::segment &segment)
Обновляет накопительные показатели контрибьютора на основе его ролей и вкладов в сегменте
Definition: contributors.hpp:252
void update_gamification_from_segment(eosio::name coopname, uint64_t contributor_id, const Capital::Segments::segment &segment)
Обновляет геймификацию (уровень и энергию) на основе вкладов из сегмента
Definition: gamification.cpp:95
Definition: balances.cpp:6
eosio::multi_index< "contributors"_n, contributor, indexed_by<"byusername"_n, const_mem_fun< contributor, uint64_t, &contributor::by_username > >, indexed_by<"byhash"_n, const_mem_fun< contributor, checksum256, &contributor::by_hash > >, indexed_by<"byinvrate"_n, const_mem_fun< contributor, uint64_t, &contributor::by_investor_rating > >, indexed_by<"bycreatorate"_n, const_mem_fun< contributor, uint64_t, &contributor::by_creator_rating > >, indexed_by<"byauthorate"_n, const_mem_fun< contributor, uint64_t, &contributor::by_author_rating > >, indexed_by<"bycoordrate"_n, const_mem_fun< contributor, uint64_t, &contributor::by_coordinator_rating > >, indexed_by<"bycontrate"_n, const_mem_fun< contributor, uint64_t, &contributor::by_contributor_rating > >, indexed_by<"byprprate"_n, const_mem_fun< contributor, uint64_t, &contributor::by_propertor_rating > >, indexed_by<"byrating"_n, const_mem_fun< contributor, uint64_t, &contributor::by_rating > > > contributor_index
Definition: contributors.hpp:69
Definition: eosio.msig.hpp:34
Таблица сегментов хранит данные о вкладах участника в проект.
Definition: segments.hpp:34
bool is_coordinator
Является ли участник координатором
Definition: segments.hpp:46
bool is_creator
Является ли участник создателем
Definition: segments.hpp:45
bool is_author
Является ли участник автором
Definition: segments.hpp:44
bool is_propertor
Является ли участник пропертором
Definition: segments.hpp:48
bool is_contributor
Является ли участник участником
Definition: segments.hpp:49
Таблица участников хранит данные индивидуального участника кооператива.
Definition: contributors.hpp:18
bool is_external_contract
Флаг, указывающий на внешний контракт
Definition: contributors.hpp:26
time_point_sec last_energy_update
Время последнего обновления энергии
Definition: contributors.hpp:44
std::string memo
Мемо для импортированных контрибьюторов
Definition: contributors.hpp:25
uint64_t id
ID контрибьютора (внутренний ключ)
Definition: contributors.hpp:19
uint64_t primary_key() const
Первичный ключ (1)
Definition: contributors.hpp:46
time_point_sec created_at
Время создания контрибьютора
Definition: contributors.hpp:23
uint64_t by_contributor_rating() const
Индекс по рейтингу контрибьютора (8)
Definition: contributors.hpp:53
uint64_t by_rating() const
Индекс по общему рейтингу (10)
Definition: contributors.hpp:55
name coopname
Имя кооператива
Definition: contributors.hpp:20
name status
Статус контрибьютора
Definition: contributors.hpp:24
document2 contract
Договор УХД
Definition: contributors.hpp:27
uint64_t by_propertor_rating() const
Индекс по рейтингу пропертора (9)
Definition: contributors.hpp:54
eosio::asset rate_per_hour
Ставка за час
Definition: contributors.hpp:30
uint64_t by_username() const
Индекс по имени пользователя (2)
Definition: contributors.hpp:47
uint64_t by_author_rating() const
Индекс по рейтингу автора (6)
Definition: contributors.hpp:51
uint64_t by_coordinator_rating() const
Индекс по рейтингу координатора (7)
Definition: contributors.hpp:52
uint64_t by_investor_rating() const
Индекс по рейтингу инвестора (4)
Definition: contributors.hpp:49
uint64_t by_creator_rating() const
Индекс по рейтингу создателя (5)
Definition: contributors.hpp:50
checksum256 by_hash() const
Индекс по хэшу контрибьютора (3)
Definition: contributors.hpp:48
name username
Имя пользователя
Definition: contributors.hpp:21
std::vector< checksum256 > appendixes
Вектор хэшей проектов, для которых подписаны приложения
Definition: contributors.hpp:28
eosio::asset debt_amount
Сумма долга
Definition: contributors.hpp:32
checksum256 contributor_hash
Внешний идентификатор контрибьютора
Definition: contributors.hpp:22
Definition: document_core.hpp:27
uint64_t get_global_id_in_scope(eosio::name _me, eosio::name scope, eosio::name key)
Definition: table_counts.hpp:58