-
Notifications
You must be signed in to change notification settings - Fork 36
/
bradesco_aula06.sol
97 lines (83 loc) · 3.11 KB
/
bradesco_aula06.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
87
88
89
90
91
92
93
94
95
96
97
/*
SPDX-License-Identifier: CC-BY-4.0
(c) Desenvolvido por Jeff Prestes
This work is licensed under a Creative Commons Attribution 4.0 International License.
*/
pragma solidity 0.8.19;
contract Aluguel {
string public locatario;
string public locador;
uint256 private valor;
uint256 constant public numeroMaximoLegalDeAlugueisParaMulta = 3;
bool[] public statusPagamento;
mapping (uint256 => uint256) public dataPagamento;
/*
0 - 01/2020 = true
1 - 02/2020 = true
2 - 03/2020 = true
3 - 04/2020 = true
*/
address payable public contaLocador;
address public contaLocatario;
modifier somenteLocador() {
require(msg.sender == contaLocador, "somente locador pode realizar essa operacao");
_;
}
constructor( string memory _nomeLocador,
string memory _nomeLocatario,
address _contaLocatario,
uint256 _valorDoAluguel) payable {
locador = _nomeLocador;
locatario = _nomeLocatario;
valor = _valorDoAluguel;
contaLocador = payable(msg.sender);
contaLocatario = _contaLocatario;
}
function valorAtualDoAluguel() public view returns (uint256) {
return valor;
}
function simulaMulta( uint256 mesesRestantes, uint256 totalMesesContrato) public view returns(uint256 valorMulta)
{
valorMulta = valor*numeroMaximoLegalDeAlugueisParaMulta;
valorMulta = valorMulta/totalMesesContrato;
valorMulta = valorMulta*mesesRestantes;
return valorMulta;
}
function reajustaAluguel(uint256 percentualReajuste) public somenteLocador {
if (percentualReajuste > 20) {
percentualReajuste = 20;
}
uint256 valorDoAcrescimo = 0;
valorDoAcrescimo = ((valor*percentualReajuste)/100);
valor = valor + valorDoAcrescimo;
}
function aditamentoValorAluguel(uint256 valorCerto) public somenteLocador {
valor = valorCerto;
}
function aplicaMulta(uint256 mesesRestantes, uint256 percentual) public {
require(mesesRestantes<30, "Periodo de contrato invalido");
for (uint numeroDeVoltas=0; numeroDeVoltas < mesesRestantes; numeroDeVoltas=numeroDeVoltas+2) {
valor = valor+((valor*percentual)/100);
}
}
function receberPagamento() public payable {
require(msg.value>=valor, "Valor insuficiente");
contaLocador.transfer(msg.value);
statusPagamento.push(true);
dataPagamento[statusPagamento.length] = block.timestamp;
}
//msg.value = valor em wei enviado ao contrato
function retornaTexto(uint256 _parametro) public view returns (string memory) {
if ((valor * _parametro) > 5000) {
return "Muito caro";
} else {
return "Preco razoavel";
}
}
function quantosPagamentosJaForamFeitos() public view returns (uint256) {
return statusPagamento.length;
}
function quandoPagou(uint256 _parcela) public view returns (uint256) {
return dataPagamento[_parcela];
}
}