-
Notifications
You must be signed in to change notification settings - Fork 36
/
agencia.sol
86 lines (54 loc) · 2.11 KB
/
agencia.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//Contrato desenvolvido originalmente por @gabrilli
pragma solidity 0.5.8;
contract AgenciaViagem {
address payable public _Agencia;
address payable public _CiaArea;
uint256 public _ValorDaPassagem;
uint256 public _CapacidadeAeronave;
bool public Encerrado;
bool public EstornoFeito;
struct Interessado {
address payable Cliente;
string Nome;
}
Interessado[] public ListaA;
mapping(address => Interessado) private ListaM;
constructor (
address payable CiaAerea,
uint256 ValorDaPassagem,
address payable Agencia,
uint256 CapacidadeAeronave
)
public {
_Agencia = Agencia;
_CiaArea = CiaAerea;
_ValorDaPassagem = ValorDaPassagem;
_CapacidadeAeronave = CapacidadeAeronave;
}
modifier SomenteAgencia () {
require (msg.sender == _Agencia, "Aguarde o chamado da Agencia");
_;
}
function FazerReserva (address payable Cliente, string memory Nome) public payable {
require (msg.value == _ValorDaPassagem, "Pague o valor correto");
Interessado memory Passageiro = Interessado(Cliente, Nome);
ListaA.push(Passageiro);
ListaM[Cliente] = Passageiro;
}
function EncerrarLista () public SomenteAgencia {
Encerrado = true;
}
function Estorno () public SomenteAgencia payable {
require (Encerrado == true);
require (ListaA.length > _CapacidadeAeronave);
for (uint256 i=(_CapacidadeAeronave+1); i<=ListaA.length ; i++) {
Interessado memory PassageiroDescartado = ListaA[i];
PassageiroDescartado.Cliente.transfer(_ValorDaPassagem); //deu pau, ele não aceita uma variavel, apenas o que ta dentro da struct
EstornoFeito = true;
}
}
function PagarCia (uint256) public payable {
require (EstornoFeito == true);
_CiaArea.transfer(address(this).balance);
}
}