|
@@ -0,0 +1,165 @@
|
|
|
+pragma solidity ^0.4.18;
|
|
|
+
|
|
|
+/*contract Simple {
|
|
|
+ uint private a;
|
|
|
+
|
|
|
+ function getA() constant returns (uint) {
|
|
|
+ return a;
|
|
|
+ }
|
|
|
+
|
|
|
+ function setP(uint newValue) {
|
|
|
+ a = newValue;
|
|
|
+ }
|
|
|
+}*/
|
|
|
+
|
|
|
+contract MyContract {
|
|
|
+ uint currentMonth = 3;
|
|
|
+
|
|
|
+ struct Auto {
|
|
|
+ string category;
|
|
|
+ uint cost;
|
|
|
+ uint age;
|
|
|
+ bool registr;
|
|
|
+ uint strVzn;
|
|
|
+ address owner;
|
|
|
+ }
|
|
|
+
|
|
|
+ struct Drivers {
|
|
|
+ string name;
|
|
|
+ uint stage;
|
|
|
+ uint kDTP;
|
|
|
+ uint kSTRF;
|
|
|
+ address addr;
|
|
|
+ }
|
|
|
+
|
|
|
+ struct Drivercard {
|
|
|
+ uint number;
|
|
|
+ uint day;
|
|
|
+ uint month;
|
|
|
+ uint year;
|
|
|
+ string category;
|
|
|
+ address driver;
|
|
|
+ bool verify;
|
|
|
+ }
|
|
|
+
|
|
|
+ Drivers[] public drivers;
|
|
|
+
|
|
|
+ mapping (address => uint) public numberDriver;
|
|
|
+ mapping (address => uint) public numberAuto;
|
|
|
+ mapping (address => uint) public numberCard;
|
|
|
+ mapping (uint => address) public numberNum;
|
|
|
+
|
|
|
+ Drivercard[] public drivercards;
|
|
|
+ Drivercard[] public verifyDrCards;
|
|
|
+
|
|
|
+ Auto[] public autos;
|
|
|
+ Auto[] public autosReg;
|
|
|
+ address bank = 0xdD870fA1b7C4700F2BD7f44238821C26f7392148;
|
|
|
+ address company = 0x583031D1113aD414F02576BD6afaBfb302140225;
|
|
|
+
|
|
|
+ // водитель
|
|
|
+ function AddDriver (string _name, uint _stage, uint _kDTP, uint _kSTRF) public {
|
|
|
+ drivers.push(Drivers({name : _name, stage : _stage, kDTP : _kDTP, kSTRF : _kSTRF, addr : msg.sender}));
|
|
|
+ numberDriver[msg.sender] = drivers.length - 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ function AddVerifyDriverCard (uint _number, string _category, uint _day, uint _month, uint _year) public { // Порешать дату
|
|
|
+ verifyDrCards.push(Drivercard({number : _number, category : _category,day : _day, month : _month, year : _year, verify : false, driver : msg.sender}));
|
|
|
+ //numberCard[_number] = msg.sender;
|
|
|
+ }
|
|
|
+
|
|
|
+ function RequestRegistration (string _category, uint _cost, uint _age) public { // Вписать текущую дату
|
|
|
+ autosReg.push(Auto({category : _category, cost : _cost, age : _age, registr : false, owner : msg.sender, strVzn : 0}));
|
|
|
+ }
|
|
|
+
|
|
|
+ function ValidPeriod() public {
|
|
|
+ uint ab = numberCard[msg.sender];
|
|
|
+ uint kPen = drivers[numberDriver[msg.sender]].kSTRF;
|
|
|
+ if (currentMonth == 1)
|
|
|
+ {
|
|
|
+ uint diff = 13 - drivercards[ab].month;
|
|
|
+ } else {
|
|
|
+ diff = currentMonth - drivercards[ab].month;
|
|
|
+ }
|
|
|
+ if (drivercards[ab].verify == true && ab < 2 && kPen == 0 ) {
|
|
|
+ drivercards[ab].year += 10;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /*function paymPenalty() public {
|
|
|
+ numberDriver[msg.sender];
|
|
|
+ // bank.transfer(msg.sender, 10 ether);
|
|
|
+ }*/
|
|
|
+
|
|
|
+
|
|
|
+ //Дэпос
|
|
|
+
|
|
|
+ function Registration (bool _registr) public {
|
|
|
+ autosReg[0].registr = _registr;
|
|
|
+ if (_registr == true)
|
|
|
+ {
|
|
|
+ string storage category2 = autosReg[0].category;
|
|
|
+ uint cost1 = autosReg[0].cost;
|
|
|
+ uint age1 = autosReg[0].age;
|
|
|
+ address owner1 = autosReg[0].owner;
|
|
|
+ autos.push(Auto({category : category2, cost : cost1, age : age1, registr : true, owner : owner1, strVzn : 0}));
|
|
|
+ numberAuto[owner1] = autos.length - 1;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ delete autosReg[0];
|
|
|
+ }else {
|
|
|
+ delete autosReg[0];
|
|
|
+ }
|
|
|
+ Insurance();
|
|
|
+ }
|
|
|
+
|
|
|
+ function Insurance() public {
|
|
|
+ uint q = numberAuto[msg.sender];
|
|
|
+ uint qq = numberDriver[msg.sender];
|
|
|
+ int a1 = 1 - int(autos[q].age) / 10;
|
|
|
+ if (a1 < 0) {
|
|
|
+ a1 *= -1;
|
|
|
+ }
|
|
|
+ int a3 = (int(autos[q].cost) * a1 / 10);
|
|
|
+ int a4 = 2 * int(drivers[qq].kSTRF)/10;
|
|
|
+ int a5 = int(drivers[qq].kDTP) - ((2 * int(drivers[qq].stage)) / 10);
|
|
|
+ int an = a3 + a4 + a5;
|
|
|
+ if (an < 0) {
|
|
|
+ an *= -1;
|
|
|
+ }
|
|
|
+ autos[q].strVzn = uint(an);
|
|
|
+ }
|
|
|
+
|
|
|
+ function VerifyDriverCard (bool _verify) public {
|
|
|
+ verifyDrCards[0].verify = _verify;
|
|
|
+ if (verifyDrCards[0].verify == true) {
|
|
|
+ uint number1 = verifyDrCards[0].number;
|
|
|
+ bool verify1 = verifyDrCards[0].verify;
|
|
|
+ string storage category1 = verifyDrCards[0].category;
|
|
|
+ uint day1 = verifyDrCards[0].day;
|
|
|
+ uint month1 = verifyDrCards[0].month;
|
|
|
+ uint year1 = verifyDrCards[0].year;
|
|
|
+ address driver1 = verifyDrCards[0].driver;
|
|
|
+ string storage category0 = verifyDrCards[0].category;
|
|
|
+ drivercards.push(Drivercard({number : number1, verify : verify1, day : day1, month : month1, year : year1,
|
|
|
+ driver : driver1, category : category0}));
|
|
|
+ numberCard[driver1] = drivercards.length - 1;
|
|
|
+ numberNum[number1] = driver1;
|
|
|
+ delete verifyDrCards[0];
|
|
|
+ }else {
|
|
|
+ delete verifyDrCards[0];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function AddPenalty (uint _number) public {
|
|
|
+ drivers[numberDriver[numberNum[_number]]].kSTRF++;
|
|
|
+ }
|
|
|
+
|
|
|
+ function AddDTP (uint _number) public {
|
|
|
+ drivers[numberDriver[numberNum[_number]]].kDTP++;
|
|
|
+ // add страховка
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+}
|