0

I want to create a contract between a Patient and Doctor where the first Patient fills his details like name, age, and problems he is facing. As soon as the above details are filled function createDoctor() is called and name, age and problems are sent as parameters to the Doctor. Considering the details filled by the patient the doctor sets the Physician and updates the problems faced by the patient if any. But I am not able to figure out the way to implement the above statement. Below is the code where I am asking the details of Patient and send it to the Doctor. Now I am not able to implement the Doctor part. Below is the code:

Patient.sol

pragma solidity ^0.4.6;
import './Doctor.sol';

contract Patient {
    bytes private name = "";
    bytes private dateOfBirth="NA";
    bytes private problemFaced = "";
    address public myDoctor;

    // Event that is fired when patient is changed
    event patientChanged(string whatChanged);

    function createDoctor() public {
        myDoctor = new Doctor(getName(), getDateOfBirth(), getGender(), problemFaced);
    }

    function ProblemFaced(string problems) public {
        problemFaced = bytes(problems);
    }

    function getName() internal view returns (bytes) {
        return name;  // First_Name Last_Name
    }
    function getDateOfBirth() internal view returns (bytes) {
        return dateOfBirth; // YYYYMMDD
    }

    function setName(string _name) public {
        name = bytes(_name);  // First_Name Last_Name
        emit patientChanged("name changed"); // fire the event
    }
    function setDateOfBirth(string _dateOfBirth) public {
        dateOfBirth = bytes(_dateOfBirth);   // YYYYMMDD
        emit patientChanged("dateOfBirth changed"); // fire the event
    }
}

Doctor.sol

pragma solidity ^0.4.6;
contract Doctor {
    // the address of the owner (the patient)
    address public owner;
    uint balance;
    // address of physician that can add allergies
    string public physician;
    // name of the patient LAST^FIRST
    string public patient_name;
    string public patient_dob;
    string public patient_gender;
    string public patient_problem = '';

    modifier isOwnerPatient {
        require(msg.sender == owner);
        _;
    }

    function Doctor(bytes _name, bytes _dob, bytes _gender, bytes _problems) {
        owner =  msg.sender;
        patient_name = string(_name);
        patient_dob = string(_dob);
        patient_gender = string(_gender);
        patient_problem = string(_problems);
    }

    function updateProblem(bytes _condition) {
        patient_problem = strConcat(patient_problem, string(_condition)); 
    }

    // allows owner to set the physician that can add allergies
    function SetPhysician(string _physician) isOwnerPatient {
        physician = _physician;
    }

    function strConcat(string _a, string _b) internal pure returns (string){
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        string memory abcde = new string(_ba.length + 2 + _bb.length);
        delete abcde;
        bytes memory babcde = bytes(abcde);
        uint k = 0;
        for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
        babcde[k++] = ",";
        babcde[k++] = " ";
        for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
        return string(babcde);
    }
}

Is there any possibility of using owner and msg.sender while executing above problem statement.

lokesh
  • 108
  • 3
  • 17
  • Instead of creating a new doctor for every patient, wouldn't it make more sense to assign an existing doctor to each patient? – Fischa7 Apr 17 '18 at 09:06
  • No, Every patient goes to one doctor and the doctor assigns the particular physician. – lokesh Apr 17 '18 at 10:01

0 Answers0