COOPENOMICS  v1
Кооперативная Экономика
programs.hpp
См. документацию.
1#pragma once
2
3#include <map>
4#include <optional>
5
6#include "../consts.hpp"
7#include "utils.hpp"
8
9using namespace eosio;
10
24program get_program_or_fail(eosio::name coopname, uint64_t program_id) {
25 programs_index programs(_soviet, coopname.value);
26 print("program_id: ", program_id);
27 auto program_itr = programs.find(program_id);
28 eosio::check(program_itr != programs.end(), "Программа не найдена");
29
30 return program(*program_itr);
31}
32
33inline bool has_signed_program_agreement(eosio::name coopname, eosio::name username, uint64_t program_id) {
34 WalletTables::users_index users(_wallet, coopname.value);
35 auto user_it = users.find(username.value);
36 if (user_it == users.end()) return false;
37 for (const auto &p : user_it->programs) {
38 if (p.program_id == program_id) return true;
39 }
40 return false;
41}
42
43bool is_participant_of_cpp_by_program_id(eosio::name coopname, eosio::name username, uint64_t program_id) {
44 return has_signed_program_agreement(coopname, username, program_id);
45}
46
47bool is_valid_participant_of_program_by_type(eosio::name coopname, eosio::name username,
48 eosio::name program_type) {
49 coagreements_index coagreements(_soviet, coopname.value);
50 auto coagreement_row = coagreements.find(program_type.value);
51 if (coagreement_row == coagreements.end())
52 return false;
53
54 programs_index programs(_soviet, coopname.value);
55 auto exist = programs.find(coagreement_row->program_id);
56 if (exist == programs.end())
57 return false;
58
59 return has_signed_program_agreement(coopname, username, exist->id);
60}
61
63 uint64_t program_id;
64 uint64_t draft_id;
65};
66
89static const std::map<eosio::name, ProgramInfo> program_map = {
90 {_wallet_program, {1, 1}},
91 {_marketplace_program, {2, 1102}},
92 {_source_program, {3, 996}},
93 {_capital_program, {4, 1000}}};
94
95inline void check_valid_program(const eosio::name &type) {
96 eosio::check(program_map.find(type) != program_map.end(), "Недопустимый тип программы");
97}
98
99inline uint64_t get_program_id(const eosio::name &type) {
100 auto it = program_map.find(type);
101 eosio::check(it != program_map.end(), "Недопустимый тип программы");
102 return it->second.program_id;
103}
104
105inline uint64_t get_draft_id(const eosio::name &type) {
106 auto it = program_map.find(type);
107 eosio::check(it != program_map.end(), "Недопустимый тип программы");
108 return it->second.draft_id;
109}
110
119bool has_program_wallet(eosio::name coopname, eosio::name username, eosio::name type) {
120 return has_signed_program_agreement(coopname, username, get_program_id(type));
121}
static constexpr eosio::name _wallet_program
Главный Кошелёк
Definition: consts.hpp:83
static constexpr eosio::name _wallet
Definition: consts.hpp:169
static constexpr eosio::name _source_program
Кошелёк для генерации по договору УХД
Definition: consts.hpp:86
static constexpr eosio::name _capital_program
Кошелёк программы "Благорост".
Definition: consts.hpp:87
static constexpr eosio::name _marketplace_program
Кошелёк программы "Маркетплейс".
Definition: consts.hpp:84
static constexpr eosio::name _soviet
Definition: consts.hpp:172
multi_index<"users"_n, user > users_index
Definition: table_wallet_users.hpp:44
Definition: eosio.msig.hpp:34
bool has_program_wallet(eosio::name coopname, eosio::name username, eosio::name type)
Definition: programs.hpp:119
bool is_valid_participant_of_program_by_type(eosio::name coopname, eosio::name username, eosio::name program_type)
Definition: programs.hpp:47
uint64_t get_draft_id(const eosio::name &type)
Definition: programs.hpp:105
program get_program_or_fail(eosio::name coopname, uint64_t program_id)
Definition: programs.hpp:24
bool has_signed_program_agreement(eosio::name coopname, eosio::name username, uint64_t program_id)
Definition: programs.hpp:33
bool is_participant_of_cpp_by_program_id(eosio::name coopname, eosio::name username, uint64_t program_id)
Definition: programs.hpp:43
void check_valid_program(const eosio::name &type)
Definition: programs.hpp:95
uint64_t get_program_id(const eosio::name &type)
Definition: programs.hpp:99
static const std::map< eosio::name, ProgramInfo > program_map
Definition: programs.hpp:89
Definition: programs.hpp:62
uint64_t draft_id
Definition: programs.hpp:64
uint64_t program_id
Definition: programs.hpp:63
Definition: table_soviet_programs.hpp:15
eosio::multi_index<"coagreements"_n, coagreement > coagreements_index
Definition: table_soviet_coagreements.hpp:21
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: table_soviet_programs.hpp:54