COOPENOMICS  v1
Кооперативная Экономика
programs.hpp
См. документацию.
1#pragma once
2
14struct [[eosio::table, eosio::contract(SOVIET)]] program {
15 uint64_t id;
16 uint64_t draft_id;
17 eosio::name program_type;
18
19 eosio::name coopname;
20 bool is_active;
21 std::string title;
22 std::string announce;
23 std::string description;
24 std::string preview;
25 std::string images;
26 std::string meta;
27
28 eosio::name calculation_type;
31
32 eosio::time_point_sec start_at;
33 eosio::time_point_sec expired_at;
34
35 eosio::binary_extension<eosio::asset> available;
36 eosio::binary_extension<eosio::asset> spendeded;
37 eosio::binary_extension<eosio::asset> blocked;
38
39 eosio::binary_extension<bool> is_can_coop_spend_share_contributions;
40
41 eosio::binary_extension<eosio::asset> share_contributions;
42 eosio::binary_extension<eosio::asset> membership_contributions;
43
44 uint64_t primary_key() const { return id; }
45 uint64_t by_program_type() const { return program_type.value;}
46 uint64_t by_draft() const { return draft_id; };
47};
48
49typedef eosio::multi_index<
50 "programs"_n,
51 program,
52 eosio::indexed_by<"programtype"_n, eosio::const_mem_fun<program, uint64_t, &program::by_program_type>>,
53 eosio::indexed_by<"bydraft"_n, eosio::const_mem_fun<program, uint64_t, &program::by_draft>>
57program get_program_or_fail(eosio::name coopname, uint64_t program_id) {
58 programs_index programs(_soviet, coopname.value);
59 print("program_id: ", program_id);
60 auto program = programs.find(program_id);
61 eosio::check(program != programs.end(), "Программа не найдена");
62
63 return *program;
64};
65
66
67bool is_participant_of_cpp_by_program_id(eosio::name coopname, eosio::name username, uint64_t program_id) {
68 progwallets_index progwallets(_soviet, coopname.value);
69
70 auto wallets_by_username_and_program = progwallets.template get_index<"byuserprog"_n>();
71 auto username_and_program_index = combine_ids(username.value, program_id);
72 auto wallet = wallets_by_username_and_program.find(username_and_program_index);
73
74 if (wallet == wallets_by_username_and_program.end())
75 return false;
76
77 auto program = get_program_or_fail(coopname, program_id);
78
79 //достать agreement и проверить статус
80 agreements2_index agreements(_soviet, coopname.value);
81 auto agreement = agreements.find(wallet -> agreement_id);
82
83 if (agreement -> status == "declined"_n)
84 return false;
85
86 return true;
87}
88
89
90
91bool is_valid_participant_of_program_by_type(eosio::name coopname, eosio::name username, eosio::name program_type) {
92 programs_index programs(_soviet, coopname.value);
93 progwallets_index progwallets(_soviet, coopname.value);
94
95 coagreements_index coagreements(_soviet, coopname.value);
96 auto coagreement = coagreements.find(program_type.value);
97
98 if (coagreement == coagreements.end())
99 return false;
100
101 auto exist = programs.find(coagreement -> program_id);
102
103 if (exist == programs.end())
104 return false;
105
106 auto wallets_by_username_and_program = progwallets.template get_index<"byuserprog"_n>();
107 auto username_and_program_index = combine_ids(username.value, exist -> id);
108 auto wallet = wallets_by_username_and_program.find(username_and_program_index);
109
110 if (wallet == wallets_by_username_and_program.end())
111 return false;
112
113 //достать agreement и проверить статус
114 agreements2_index agreements(_soviet, coopname.value);
115 auto agreement = agreements.find(wallet -> agreement_id);
116
117 if (agreement -> status == "declined"_n)
118 return false;
119
120 return true;
121}
122
123
125 uint64_t program_id;
126 uint64_t draft_id;
127};
128
129static const std::map<eosio::name, ProgramInfo> program_map = {
130 {_wallet_program, {1, 1}}, // program_id = 1, draft_id = 1
131 {_marketplace_program, {2, 699}}, // program_id = 2, draft_id = 699
132 {_source_program, {3, 0}}, // program_id = 3, draft_id = 0
133 {_capital_program, {4, 1000}} // program_id = 4, draft_id = 1000
134};
135
136// Проверка валидности программы
137inline void check_valid_program(const eosio::name& type) {
138 eosio::check(program_map.find(type) != program_map.end(), "Недопустимый тип программы");
139}
140
141// Получение ID программы
142inline uint64_t get_program_id(const eosio::name& type) {
143 auto it = program_map.find(type);
144 eosio::check(it != program_map.end(), "Недопустимый тип программы");
145 return it->second.program_id;
146}
147
148// Получение draft_id программы
149inline uint64_t get_draft_id(const eosio::name& type) {
150 auto it = program_map.find(type);
151 eosio::check(it != program_map.end(), "Недопустимый тип программы");
152 return it->second.draft_id;
153}
154
155
156std::optional<progwallet> get_program_wallet (eosio::name coopname, eosio::name username, name type) {
157 auto program_id = get_program_id(type);
158
159 progwallets_index progwallets(_soviet, coopname.value);
160
161 auto balances_by_username_and_program = progwallets.template get_index<"byuserprog"_n>();
162 auto username_and_program_index = combine_ids(username.value, program_id);
163 auto wallet = balances_by_username_and_program.find(username_and_program_index);
164
165 if (wallet == balances_by_username_and_program.end()) {
166 return std::nullopt;
167 }
168
169 return *wallet;
170}
eosio::multi_index<"coagreements"_n, coagreement > coagreements_index
Definition: agreements.hpp:22
eosio::multi_index<"agreements3"_n, agreement2, eosio::indexed_by<"byusername"_n, eosio::const_mem_fun< agreement2, uint64_t, &agreement2::by_username > >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun< agreement2, uint64_t, &agreement2::by_status > >, eosio::indexed_by<"bydraft"_n, eosio::const_mem_fun< agreement2, uint64_t, &agreement2::by_draft > >, eosio::indexed_by<"byuserdraft"_n, eosio::const_mem_fun< agreement2, uint128_t, &agreement2::by_user_and_draft > > > agreements2_index
Definition: agreements.hpp:121
Контракт Wallet управляет взносами и возвратами взносов по ЦПП "Цифровой Кошелёк".
Definition: wallet.hpp:16
static constexpr eosio::name _wallet_program
Главный Кошелёк
Definition: consts.hpp:79
static constexpr eosio::name _source_program
Кошелёк для генерации по договору УХД
Definition: consts.hpp:82
static constexpr eosio::name _capital_program
Кошелёк программы "Капитализация".
Definition: consts.hpp:83
static constexpr eosio::name _marketplace_program
Кошелёк программы "Маркетплейс".
Definition: consts.hpp:80
static constexpr eosio::name _soviet
Definition: consts.hpp:156
contract
Definition: eosio.msig_tests.cpp:977
eosio::multi_index< "progwallets"_n, progwallet, eosio::indexed_by<"byusername"_n, eosio::const_mem_fun< progwallet, uint64_t, &progwallet::by_username > >, eosio::indexed_by<"byprogram"_n, eosio::const_mem_fun< progwallet, uint64_t, &progwallet::by_program > >, eosio::indexed_by<"byuserprog"_n, eosio::const_mem_fun< progwallet, uint128_t, &progwallet::by_username_and_program > >, eosio::indexed_by<"byagreement"_n, eosio::const_mem_fun< progwallet, uint64_t, &progwallet::by_agreement > > > progwallets_index
Definition: balances.hpp:67
Definition: eosio.msig.hpp:34
bool is_valid_participant_of_program_by_type(eosio::name coopname, eosio::name username, eosio::name program_type)
Definition: programs.hpp:91
uint64_t get_draft_id(const eosio::name &type)
Definition: programs.hpp:149
program get_program_or_fail(eosio::name coopname, uint64_t program_id)
Definition: programs.hpp:57
eosio::multi_index< "programs"_n, program, eosio::indexed_by<"programtype"_n, eosio::const_mem_fun< program, uint64_t, &program::by_program_type > >, eosio::indexed_by<"bydraft"_n, eosio::const_mem_fun< program, uint64_t, &program::by_draft > > > programs_index
Definition: programs.hpp:54
bool is_participant_of_cpp_by_program_id(eosio::name coopname, eosio::name username, uint64_t program_id)
Definition: programs.hpp:67
std::optional< progwallet > get_program_wallet(eosio::name coopname, eosio::name username, name type)
Definition: programs.hpp:156
void check_valid_program(const eosio::name &type)
Definition: programs.hpp:137
uint64_t get_program_id(const eosio::name &type)
Definition: programs.hpp:142
static const std::map< eosio::name, ProgramInfo > program_map
Definition: programs.hpp:129
Definition: programs.hpp:124
uint64_t draft_id
Definition: programs.hpp:126
uint64_t program_id
Definition: programs.hpp:125
Таблица соглашений (устаревшая версия)
Definition: agreements.hpp:45
Таблица типовых соглашений кооператива
Definition: agreements.hpp:12
Таблица программ кооператива
Definition: programs.hpp:14
eosio::binary_extension< eosio::asset > spendeded
Расходы из числа паевых взносов ЦПП
Definition: programs.hpp:36
std::string preview
Предварительный просмотр
Definition: programs.hpp:24
eosio::binary_extension< eosio::asset > membership_contributions
собранные членские взносы
Definition: programs.hpp:42
eosio::asset fixed_membership_contribution
LEGACY Членский взнос
Definition: programs.hpp:30
eosio::name coopname
Имя аккаунта кооператива
Definition: programs.hpp:19
eosio::binary_extension< eosio::asset > share_contributions
Паевые взносы ///< собранные паевые взносы
Definition: programs.hpp:41
eosio::name program_type
Тип кооперативной программы (wallet | market | capital)
Definition: programs.hpp:17
eosio::time_point_sec start_at
Время открытия программы
Definition: programs.hpp:32
uint64_t by_program_type() const
Definition: programs.hpp:45
bool is_active
Флаг активности программы
Definition: programs.hpp:20
std::string title
Название программы
Definition: programs.hpp:21
std::string meta
Метаданные программы
Definition: programs.hpp:26
eosio::binary_extension< eosio::asset > available
Доступные паевые взносы для расходов по ЦПП
Definition: programs.hpp:35
std::string description
Описание программы
Definition: programs.hpp:23
uint64_t by_draft() const
Definition: programs.hpp:46
uint64_t draft_id
Ссылка на шаблон условий
Definition: programs.hpp:16
eosio::time_point_sec expired_at
Время истечения программы
Definition: programs.hpp:33
uint64_t id
Уникальный идентификатор программы
Definition: programs.hpp:15
std::string announce
Анонс программы
Definition: programs.hpp:22
uint64_t primary_key() const
Definition: programs.hpp:44
eosio::binary_extension< bool > is_can_coop_spend_share_contributions
Может ли кооператив использовать паевые взносы программы на расходы
Definition: programs.hpp:39
eosio::binary_extension< eosio::asset > blocked
Недоступные средства из числа паевых взносов для расходов по ЦПП
Definition: programs.hpp:37
uint64_t membership_percent_fee
LEGACY процент комиссии со взноса
Definition: programs.hpp:29
std::string images
Изображения программы
Definition: programs.hpp:25
eosio::name calculation_type
LEGACY тип настройки платежей по программе ( absolute | relative | free )
Definition: programs.hpp:28
static uint128_t combine_ids(const uint64_t &x, const uint64_t &y)
Definition: utils.hpp:5