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
16program get_program_or_fail(eosio::name coopname, uint64_t program_id) {
17 programs_index programs(_soviet, coopname.value);
18 print("program_id: ", program_id);
19 auto program_itr = programs.find(program_id);
20 eosio::check(program_itr != programs.end(), "Программа не найдена");
21
22 return program(*program_itr);
23}
24
25bool is_participant_of_cpp_by_program_id(eosio::name coopname, eosio::name username, uint64_t program_id) {
26 progwallets_index progwallets(_soviet, coopname.value);
27
28 auto wallets_by_username_and_program = progwallets.template get_index<"byuserprog"_n>();
29 auto username_and_program_index = combine_ids(username.value, program_id);
30 auto wallet = wallets_by_username_and_program.find(username_and_program_index);
31
32 if (wallet == wallets_by_username_and_program.end())
33 return false;
34
35 auto program_row = get_program_or_fail(coopname, program_id);
36
37 agreements2_index agreements(_soviet, coopname.value);
38 auto agreement_row = agreements.find(wallet->agreement_id);
39
40 if (agreement_row->status == "declined"_n)
41 return false;
42
43 return true;
44}
45
46bool is_valid_participant_of_program_by_type(eosio::name coopname, eosio::name username,
47 eosio::name program_type) {
48 programs_index programs(_soviet, coopname.value);
49 progwallets_index progwallets(_soviet, coopname.value);
50
51 coagreements_index coagreements(_soviet, coopname.value);
52 auto coagreement_row = coagreements.find(program_type.value);
53
54 if (coagreement_row == coagreements.end())
55 return false;
56
57 auto exist = programs.find(coagreement_row->program_id);
58
59 if (exist == programs.end())
60 return false;
61
62 auto wallets_by_username_and_program = progwallets.template get_index<"byuserprog"_n>();
63 auto username_and_program_index = combine_ids(username.value, exist->id);
64 auto wallet = wallets_by_username_and_program.find(username_and_program_index);
65
66 if (wallet == wallets_by_username_and_program.end())
67 return false;
68
69 agreements2_index agreements(_soviet, coopname.value);
70 auto agreement_row = agreements.find(wallet->agreement_id);
71
72 if (agreement_row->status == "declined"_n)
73 return false;
74
75 return true;
76}
77
79 uint64_t program_id;
80 uint64_t draft_id;
81};
82
83static const std::map<eosio::name, ProgramInfo> program_map = {
84 {_wallet_program, {1, 1}},
85 {_marketplace_program, {2, 699}},
86 {_source_program, {3, 0}},
87 {_capital_program, {4, 1000}}};
88
89inline void check_valid_program(const eosio::name &type) {
90 eosio::check(program_map.find(type) != program_map.end(), "Недопустимый тип программы");
91}
92
93inline uint64_t get_program_id(const eosio::name &type) {
94 auto it = program_map.find(type);
95 eosio::check(it != program_map.end(), "Недопустимый тип программы");
96 return it->second.program_id;
97}
98
99inline uint64_t get_draft_id(const eosio::name &type) {
100 auto it = program_map.find(type);
101 eosio::check(it != program_map.end(), "Недопустимый тип программы");
102 return it->second.draft_id;
103}
104
105std::optional<progwallet> get_program_wallet(eosio::name coopname, eosio::name username, eosio::name type) {
106 auto program_id = get_program_id(type);
107
108 progwallets_index progwallets(_soviet, coopname.value);
109
110 auto balances_by_username_and_program = progwallets.template get_index<"byuserprog"_n>();
111 auto username_and_program_index = combine_ids(username.value, program_id);
112 auto wallet = balances_by_username_and_program.find(username_and_program_index);
113
114 if (wallet == balances_by_username_and_program.end()) {
115 return std::nullopt;
116 }
117
118 return *wallet;
119}
Контракт 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
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:46
uint64_t get_draft_id(const eosio::name &type)
Definition: programs.hpp:99
program get_program_or_fail(eosio::name coopname, uint64_t program_id)
Definition: programs.hpp:16
bool is_participant_of_cpp_by_program_id(eosio::name coopname, eosio::name username, uint64_t program_id)
Definition: programs.hpp:25
void check_valid_program(const eosio::name &type)
Definition: programs.hpp:89
uint64_t get_program_id(const eosio::name &type)
Definition: programs.hpp:93
std::optional< progwallet > get_program_wallet(eosio::name coopname, eosio::name username, eosio::name type)
Definition: programs.hpp:105
static const std::map< eosio::name, ProgramInfo > program_map
Definition: programs.hpp:83
Definition: programs.hpp:78
uint64_t draft_id
Definition: programs.hpp:80
uint64_t program_id
Definition: programs.hpp:79
Definition: table_soviet_programs.hpp:15
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: table_soviet_agreements3.hpp:40
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
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: table_soviet_progwallets.hpp:42
static uint128_t combine_ids(const uint64_t &x, const uint64_t &y)
Definition: utils.hpp:7