MyContract.sol 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. pragma solidity ^0.4.18;
  2. /*contract Simple {
  3. uint private a;
  4. function getA() constant returns (uint) {
  5. return a;
  6. }
  7. function setP(uint newValue) {
  8. a = newValue;
  9. }
  10. }*/
  11. contract MyContract {
  12. uint currentMonth = 3;
  13. struct Auto {
  14. string category;
  15. uint cost;
  16. uint age;
  17. bool registr;
  18. uint strVzn;
  19. address owner;
  20. }
  21. struct Drivers {
  22. string name;
  23. uint stage;
  24. uint kDTP;
  25. uint kSTRF;
  26. address addr;
  27. }
  28. struct Drivercard {
  29. uint number;
  30. uint day;
  31. uint month;
  32. uint year;
  33. string category;
  34. address driver;
  35. bool verify;
  36. }
  37. Drivers[] public drivers;
  38. mapping (address => uint) public numberDriver;
  39. mapping (address => uint) public numberAuto;
  40. mapping (address => uint) public numberCard;
  41. mapping (uint => address) public numberNum;
  42. Drivercard[] public drivercards;
  43. Drivercard[] public verifyDrCards;
  44. Auto[] public autos;
  45. Auto[] public autosReg;
  46. address bank = 0xdD870fA1b7C4700F2BD7f44238821C26f7392148;
  47. address company = 0x583031D1113aD414F02576BD6afaBfb302140225;
  48. // водитель
  49. function AddDriver (string _name, uint _stage, uint _kDTP, uint _kSTRF) public {
  50. drivers.push(Drivers({name : _name, stage : _stage, kDTP : _kDTP, kSTRF : _kSTRF, addr : msg.sender}));
  51. numberDriver[msg.sender] = drivers.length - 1;
  52. }
  53. function AddVerifyDriverCard (uint _number, string _category, uint _day, uint _month, uint _year) public { // Порешать дату
  54. verifyDrCards.push(Drivercard({number : _number, category : _category,day : _day, month : _month, year : _year, verify : false, driver : msg.sender}));
  55. //numberCard[_number] = msg.sender;
  56. }
  57. function RequestRegistration (string _category, uint _cost, uint _age) public { // Вписать текущую дату
  58. autosReg.push(Auto({category : _category, cost : _cost, age : _age, registr : false, owner : msg.sender, strVzn : 0}));
  59. }
  60. function ValidPeriod() public {
  61. uint ab = numberCard[msg.sender];
  62. uint kPen = drivers[numberDriver[msg.sender]].kSTRF;
  63. if (currentMonth == 1)
  64. {
  65. uint diff = 13 - drivercards[ab].month;
  66. } else {
  67. diff = currentMonth - drivercards[ab].month;
  68. }
  69. if (drivercards[ab].verify == true && ab < 2 && kPen == 0 ) {
  70. drivercards[ab].year += 10;
  71. }
  72. }
  73. /*function paymPenalty() public {
  74. numberDriver[msg.sender];
  75. // bank.transfer(msg.sender, 10 ether);
  76. }*/
  77. //Дэпос
  78. function Registration (bool _registr) public {
  79. autosReg[0].registr = _registr;
  80. if (_registr == true)
  81. {
  82. string storage category2 = autosReg[0].category;
  83. uint cost1 = autosReg[0].cost;
  84. uint age1 = autosReg[0].age;
  85. address owner1 = autosReg[0].owner;
  86. autos.push(Auto({category : category2, cost : cost1, age : age1, registr : true, owner : owner1, strVzn : 0}));
  87. numberAuto[owner1] = autos.length - 1;
  88. delete autosReg[0];
  89. }else {
  90. delete autosReg[0];
  91. }
  92. Insurance();
  93. }
  94. function Insurance() public {
  95. uint q = numberAuto[msg.sender];
  96. uint qq = numberDriver[msg.sender];
  97. int a1 = 1 - int(autos[q].age) / 10;
  98. if (a1 < 0) {
  99. a1 *= -1;
  100. }
  101. int a3 = (int(autos[q].cost) * a1 / 10);
  102. int a4 = 2 * int(drivers[qq].kSTRF)/10;
  103. int a5 = int(drivers[qq].kDTP) - ((2 * int(drivers[qq].stage)) / 10);
  104. int an = a3 + a4 + a5;
  105. if (an < 0) {
  106. an *= -1;
  107. }
  108. autos[q].strVzn = uint(an);
  109. }
  110. function VerifyDriverCard (bool _verify) public {
  111. verifyDrCards[0].verify = _verify;
  112. if (verifyDrCards[0].verify == true) {
  113. uint number1 = verifyDrCards[0].number;
  114. bool verify1 = verifyDrCards[0].verify;
  115. string storage category1 = verifyDrCards[0].category;
  116. uint day1 = verifyDrCards[0].day;
  117. uint month1 = verifyDrCards[0].month;
  118. uint year1 = verifyDrCards[0].year;
  119. address driver1 = verifyDrCards[0].driver;
  120. string storage category0 = verifyDrCards[0].category;
  121. drivercards.push(Drivercard({number : number1, verify : verify1, day : day1, month : month1, year : year1,
  122. driver : driver1, category : category0}));
  123. numberCard[driver1] = drivercards.length - 1;
  124. numberNum[number1] = driver1;
  125. delete verifyDrCards[0];
  126. }else {
  127. delete verifyDrCards[0];
  128. }
  129. }
  130. function AddPenalty (uint _number) public {
  131. drivers[numberDriver[numberNum[_number]]].kSTRF++;
  132. }
  133. function AddDTP (uint _number) public {
  134. drivers[numberDriver[numberNum[_number]]].kDTP++;
  135. // add страховка
  136. }
  137. }