Search in sources :

Example 1 with SiteDTO

use of org.akaza.openclinica.bean.login.SiteDTO in project OpenClinica by OpenClinica.

the class StudyController method buildSiteDTO.

public SiteDTO buildSiteDTO(String uniqueSiteProtocolID, String name, String principalInvestigator, String expectedTotalEnrollment, String startDate, String protocolDateVerification, String secondaryProId, ArrayList<UserRole> userList) {
    SiteDTO siteDTO = new SiteDTO();
    siteDTO.setUniqueSiteProtocolID(uniqueSiteProtocolID);
    siteDTO.setBriefTitle(name);
    siteDTO.setPrincipalInvestigator(principalInvestigator);
    siteDTO.setExpectedTotalEnrollment(expectedTotalEnrollment);
    siteDTO.setStartDate(startDate);
    siteDTO.setSecondaryProId(secondaryProId);
    siteDTO.setProtocolDateVerification(protocolDateVerification);
    siteDTO.setAssignUserRoles(userList);
    return siteDTO;
}
Also used : ResponseSuccessSiteDTO(org.akaza.openclinica.bean.login.ResponseSuccessSiteDTO) SiteDTO(org.akaza.openclinica.bean.login.SiteDTO)

Example 2 with SiteDTO

use of org.akaza.openclinica.bean.login.SiteDTO in project OpenClinica by OpenClinica.

the class StudyController method createNewSites.

/**
 * @api {post} /pages/auth/api/v1/studies/:uniqueProtocolId/sites Create a site
 * @apiName createNewSite
 * @apiPermission Authenticate using api-key. admin
 * @apiVersion 3.8.0
 * @apiParam {String} uniqueProtococlId Study unique protocol ID.
 * @apiParam {String} briefTitle Brief Title .
 * @apiParam {String} principalInvestigator Principal Investigator Name.
 * @apiParam {Integer} expectedTotalEnrollment Expected Total Enrollment number
 * @apiParam {String} secondaryProtocolID Site Secondary Protocol Id  (Optional)
 * @apiParam {Date} startDate Start date
 * @apiParam {Date} protocolDateVerification protocol Verification date
 * @apiParam {Array} assignUserRoles Assign Users to Roles for this Study.
 * @apiGroup Site
 * @apiHeader {String} api_key Users unique access-key.
 * @apiDescription Create a Site
 * @apiParamExample {json} Request-Example:
 *                  {
 *                  "briefTitle": "Site Protocol ID Name",
 *                  "principalInvestigator": "Principal Investigator Name",
 *                  "expectedTotalEnrollment": "10",
 *                  "assignUserRoles": [
 *                  { "username" : "userc", "role" : "Investigator"},
 *                  { "username" : "userb", "role" : "Clinical Research Coordinator"},
 *                  { "username" : "dm_normal", "role" : "Monitor"},
 *                  { "username" : "sd_root", "role" : "Data Entry Person"}
 *                  ],
 *                  "uniqueProtocolID": "Site Protocol ID",
 *                  "startDate": "2011-11-11",
 *                  "secondaryProtocolID" : "Secondary Protocol ID 1" ,
 *                  "protocolDateVerification" : "2011-10-14"
 *                  }
 *
 * @apiErrorExample {json} Error-Response:
 *                  HTTP/1.1 400 Bad Request
 *                  {
 *                  "message": "VALIDATION FAILED",
 *                  "protocolDateVerification": "2011-10-14",
 *                  "principalInvestigator": "Principal Investigator Name",
 *                  "expectedTotalEnrollment": "10",
 *                  "errors": [
 *                  { "field": "UniqueProtocolId", "resource": "Site Object","code": "Unique Protocol Id exist in the System" }
 *                  ],
 *                  "secondaryProId": "Secondary Protocol ID 1",
 *                  "siteOid": null,
 *                  "briefTitle": "Site Protocol ID Name",
 *                  "assignUserRoles": [
 *                  { "role": "Investigator", "username": "userc"},
 *                  { "role": "Clinical Research Coordinator", "username": "userb"},
 *                  { "role": "Monitor","username": "dm_normal"},
 *                  { "role": "Data Entry Person","username": "sd_root"}
 *                  ],
 *                  "uniqueSiteProtocolID": "Site Protocol ID",
 *                  "startDate": "2011-11-11"
 *                  }
 * @apiSuccessExample {json} Success-Response:
 *                    HTTP/1.1 200 OK
 *                    {
 *                    "message": "SUCCESS",
 *                    "siteOid": "S_SITEPROT",
 *                    "uniqueSiteProtocolID": "Site Protocol IDqq"
 *                    }
 */
@RequestMapping(value = "/{uniqueProtocolID}/sites", method = RequestMethod.POST)
public ResponseEntity<Object> createNewSites(HttpServletRequest request, @RequestBody HashMap<String, Object> map, @PathVariable("uniqueProtocolID") String uniqueProtocolID) throws Exception {
    System.out.println("I'm in Create Sites ");
    ArrayList<ErrorObject> errorObjects = new ArrayList();
    StudyBean siteBean = null;
    ResponseEntity<Object> response = null;
    String validation_failed_message = "VALIDATION FAILED";
    String validation_passed_message = "SUCCESS";
    String name = (String) map.get("briefTitle");
    String principalInvestigator = (String) map.get("principalInvestigator");
    String uniqueSiteProtocolID = (String) map.get("uniqueProtocolID");
    String expectedTotalEnrollment = (String) map.get("expectedTotalEnrollment");
    String startDate = (String) map.get("startDate");
    String protocolDateVerification = (String) map.get("protocolDateVerification");
    String secondaryProId = (String) map.get("secondaryProtocolID");
    ArrayList<UserRole> assignUserRoles = (ArrayList<UserRole>) map.get("assignUserRoles");
    ArrayList<UserRole> userList = new ArrayList<>();
    if (assignUserRoles != null) {
        for (Object userRole : assignUserRoles) {
            UserRole uRole = new UserRole();
            uRole.setUsername((String) ((HashMap<String, Object>) userRole).get("username"));
            uRole.setRole((String) ((HashMap<String, Object>) userRole).get("role"));
            udao = new UserAccountDAO(dataSource);
            UserAccountBean assignedUserBean = (UserAccountBean) udao.findByUserName(uRole.getUsername());
            if (assignedUserBean == null || !assignedUserBean.isActive()) {
                ErrorObject errorOBject = createErrorObject("Study Object", "The Assigned Username " + uRole.getUsername() + " is not a Valid User", "Assigned User");
                errorObjects.add(errorOBject);
            }
            ResourceBundle resterm = org.akaza.openclinica.i18n.util.ResourceBundleProvider.getTermsBundle();
            if (getSiteRole(uRole.getRole(), resterm) == null) {
                ErrorObject errorOBject = createErrorObject("Study Object", "Assigned Role for " + uRole.getUsername() + " is not a Valid Site Role", "Assigned Role");
                errorObjects.add(errorOBject);
            }
            userList.add(uRole);
        }
    }
    SiteDTO siteDTO = buildSiteDTO(uniqueSiteProtocolID, name, principalInvestigator, expectedTotalEnrollment, startDate, protocolDateVerification, secondaryProId, userList);
    if (uniqueSiteProtocolID == null) {
        ErrorObject errorOBject = createErrorObject("Site Object", "Missing Field", "UniqueProtocolID");
        errorObjects.add(errorOBject);
    } else {
        uniqueSiteProtocolID = uniqueSiteProtocolID.trim();
    }
    if (name == null) {
        ErrorObject errorOBject = createErrorObject("Site Object", "Missing Field", "BriefTitle");
        errorObjects.add(errorOBject);
    } else {
        name = name.trim();
    }
    if (principalInvestigator == null) {
        ErrorObject errorOBject = createErrorObject("Site Object", "Missing Field", "PrincipalInvestigator");
        errorObjects.add(errorOBject);
    } else {
        principalInvestigator = principalInvestigator.trim();
    }
    if (startDate == null) {
        ErrorObject errorOBject = createErrorObject("Site Object", "Missing Field", "StartDate");
        errorObjects.add(errorOBject);
    } else {
        startDate = startDate.trim();
    }
    if (protocolDateVerification == null) {
        ErrorObject errorOBject = createErrorObject("Site Object", "Missing Field", "ProtocolDateVerification");
        errorObjects.add(errorOBject);
    } else {
        protocolDateVerification = protocolDateVerification.trim();
    }
    if (expectedTotalEnrollment == null) {
        ErrorObject errorOBject = createErrorObject("Site Object", "Missing Field", "ExpectedTotalEnrollment");
        errorObjects.add(errorOBject);
    } else {
        expectedTotalEnrollment = expectedTotalEnrollment.trim();
    }
    if (secondaryProId != null) {
        secondaryProId = secondaryProId.trim();
    }
    if (assignUserRoles == null) {
        ErrorObject errorOBject = createErrorObject("Study Object", "Missing Field", "AssignUserRoles");
        errorObjects.add(errorOBject);
    }
    request.setAttribute("uniqueProId", uniqueSiteProtocolID);
    request.setAttribute("name", name);
    request.setAttribute("prinInvestigator", principalInvestigator);
    request.setAttribute("expectedTotalEnrollment", expectedTotalEnrollment);
    request.setAttribute("startDate", startDate);
    request.setAttribute("protocolDateVerification", protocolDateVerification);
    request.setAttribute("secondProId", secondaryProId);
    String format = "yyyy-MM-dd";
    SimpleDateFormat formatter = null;
    Date formattedStartDate = null;
    Date formattedProtocolDate = null;
    if (startDate != "" && startDate != null) {
        try {
            formatter = new SimpleDateFormat(format);
            formattedStartDate = formatter.parse(startDate);
        } catch (ParseException e) {
            ErrorObject errorOBject = createErrorObject("Site Object", "The StartDate format is not a valid 'yyyy-MM-dd' format", "StartDate");
            errorObjects.add(errorOBject);
        }
        if (formattedStartDate != null) {
            if (!startDate.equals(formatter.format(formattedStartDate))) {
                ErrorObject errorOBject = createErrorObject("Site Object", "The StartDate format is not a valid 'yyyy-MM-dd' format", "StartDate");
                errorObjects.add(errorOBject);
            }
        }
    }
    if (protocolDateVerification != "" && protocolDateVerification != null) {
        try {
            formatter = new SimpleDateFormat(format);
            formattedProtocolDate = formatter.parse(protocolDateVerification);
        } catch (ParseException e) {
            ErrorObject errorOBject = createErrorObject("Site Object", "The Protocol Verification Date format is not a valid 'yyyy-MM-dd' format", "ProtocolDateVerification");
            errorObjects.add(errorOBject);
        }
        if (formattedProtocolDate != null) {
            if (!protocolDateVerification.equals(formatter.format(formattedProtocolDate))) {
                ErrorObject errorOBject = createErrorObject("Site Object", "The Protocol Verification Date format is not a valid 'yyyy-MM-dd' format", "ProtocolDateVerification");
                errorObjects.add(errorOBject);
            }
        }
    }
    StudyBean parentStudy = getStudyByUniqId(uniqueProtocolID);
    if (parentStudy == null) {
        ErrorObject errorOBject = createErrorObject("Study Object", "The Study Protocol Id provided in the URL is not a valid Protocol Id", "Unique Study Protocol Id");
        errorObjects.add(errorOBject);
    } else if (parentStudy.getParentStudyId() != 0) {
        ErrorObject errorOBject = createErrorObject("Study Object", "The Study Protocol Id provided in the URL is not a valid Study Protocol Id", "Unique Study Protocol Id");
        errorObjects.add(errorOBject);
    }
    UserAccountBean ownerUserAccount = null;
    if (parentStudy != null) {
        ownerUserAccount = getSiteOwnerAccount(request, parentStudy);
        if (ownerUserAccount == null) {
            ErrorObject errorOBject = createErrorObject("Site Object", "The Owner User Account is not Valid Account or Does not have rights to Create Sites", "Owner Account");
            errorObjects.add(errorOBject);
        }
    }
    Validator v1 = new Validator(request);
    v1.addValidation("uniqueProId", Validator.NO_BLANKS);
    HashMap vError1 = v1.validate();
    if (!vError1.isEmpty()) {
        ErrorObject errorOBject = createErrorObject("Site Object", "This field cannot be blank.", "UniqueProtocolId");
        errorObjects.add(errorOBject);
    }
    Validator v2 = new Validator(request);
    v2.addValidation("name", Validator.NO_BLANKS);
    HashMap vError2 = v2.validate();
    if (!vError2.isEmpty()) {
        ErrorObject errorOBject = createErrorObject("Site Object", "This field cannot be blank.", "BriefTitle");
        errorObjects.add(errorOBject);
    }
    Validator v3 = new Validator(request);
    v3.addValidation("prinInvestigator", Validator.NO_BLANKS);
    HashMap vError3 = v3.validate();
    if (!vError3.isEmpty()) {
        ErrorObject errorOBject = createErrorObject("Site Object", "This field cannot be blank.", "PrincipleInvestigator");
        errorObjects.add(errorOBject);
    }
    Validator v6 = new Validator(request);
    HashMap vError6 = v6.validate();
    if (uniqueProtocolID != null)
        validateUniqueProId(request, vError6);
    if (!vError6.isEmpty()) {
        ErrorObject errorOBject = createErrorObject("Site Object", "Unique Protocol Id exist in the System", "UniqueProtocolId");
        errorObjects.add(errorOBject);
    }
    Validator v7 = new Validator(request);
    v7.addValidation("expectedTotalEnrollment", Validator.NO_BLANKS);
    HashMap vError7 = v7.validate();
    if (!vError7.isEmpty()) {
        ErrorObject errorOBject = createErrorObject("Site Object", "This field cannot be blank.", "ExpectedTotalEnrollment");
        errorObjects.add(errorOBject);
    }
    if (request.getAttribute("name") != null && ((String) request.getAttribute("name")).length() > 100) {
        ErrorObject errorOBject = createErrorObject("Site Object", "BriefTitle Length exceeds the max length 100", "BriefTitle");
        errorObjects.add(errorOBject);
    }
    if (request.getAttribute("uniqueProId") != null && ((String) request.getAttribute("uniqueProId")).length() > 30) {
        ErrorObject errorOBject = createErrorObject("Site Object", "UniqueProtocolId Length exceeds the max length 30", "UniqueProtocolId");
        errorObjects.add(errorOBject);
    }
    if (request.getAttribute("prinInvestigator") != null && ((String) request.getAttribute("prinInvestigator")).length() > 255) {
        ErrorObject errorOBject = createErrorObject("Site Object", "PrincipleInvestigator Length exceeds the max length 255", "PrincipleInvestigator");
        errorObjects.add(errorOBject);
    }
    if (request.getAttribute("expectedTotalEnrollment") != null && Integer.valueOf((String) request.getAttribute("expectedTotalEnrollment")) <= 0) {
        ErrorObject errorOBject = createErrorObject("Site Object", "ExpectedTotalEnrollment Length can't be negative", "ExpectedTotalEnrollment");
        errorObjects.add(errorOBject);
    }
    siteDTO.setErrors(errorObjects);
    if (errorObjects != null && errorObjects.size() != 0) {
        siteDTO.setMessage(validation_failed_message);
        response = new ResponseEntity(siteDTO, org.springframework.http.HttpStatus.BAD_REQUEST);
    } else {
        siteBean = buildSiteBean(uniqueSiteProtocolID, name, principalInvestigator, Integer.valueOf(expectedTotalEnrollment), formattedStartDate, formattedProtocolDate, secondaryProId, ownerUserAccount, parentStudy.getId());
        StudyBean sBean = createStudy(siteBean, ownerUserAccount);
        siteDTO.setSiteOid(sBean.getOid());
        siteDTO.setMessage(validation_passed_message);
        ResourceBundle resterm = org.akaza.openclinica.i18n.util.ResourceBundleProvider.getTermsBundle();
        StudyUserRoleBean sub = null;
        for (UserRole userRole : userList) {
            sub = new StudyUserRoleBean();
            sub.setRole(getSiteRole(userRole.getRole(), resterm));
            sub.setStudyId(sBean.getId());
            sub.setStatus(Status.AVAILABLE);
            sub.setOwner(ownerUserAccount);
            udao = new UserAccountDAO(dataSource);
            UserAccountBean assignedUserBean = (UserAccountBean) udao.findByUserName(userRole.getUsername());
            StudyUserRoleBean surb = createRole(assignedUserBean, sub);
        }
        ResponseSuccessSiteDTO responseSuccess = new ResponseSuccessSiteDTO();
        responseSuccess.setMessage(siteDTO.getMessage());
        responseSuccess.setSiteOid(siteDTO.getSiteOid());
        responseSuccess.setUniqueSiteProtocolID(siteDTO.getUniqueSiteProtocolID());
        response = new ResponseEntity(responseSuccess, org.springframework.http.HttpStatus.OK);
    }
    return response;
}
Also used : HashMap(java.util.HashMap) ResponseSuccessSiteDTO(org.akaza.openclinica.bean.login.ResponseSuccessSiteDTO) ErrorObject(org.akaza.openclinica.bean.login.ErrorObject) StudyBean(org.akaza.openclinica.bean.managestudy.StudyBean) StudyUserRoleBean(org.akaza.openclinica.bean.login.StudyUserRoleBean) ArrayList(java.util.ArrayList) UserAccountDAO(org.akaza.openclinica.dao.login.UserAccountDAO) Date(java.util.Date) ResponseEntity(org.springframework.http.ResponseEntity) UserRole(org.akaza.openclinica.bean.login.UserRole) UserAccountBean(org.akaza.openclinica.bean.login.UserAccountBean) ErrorObject(org.akaza.openclinica.bean.login.ErrorObject) ResourceBundle(java.util.ResourceBundle) ResponseSuccessSiteDTO(org.akaza.openclinica.bean.login.ResponseSuccessSiteDTO) SiteDTO(org.akaza.openclinica.bean.login.SiteDTO) ParseException(java.text.ParseException) SimpleDateFormat(java.text.SimpleDateFormat) Validator(org.akaza.openclinica.control.form.Validator)

Aggregations

ResponseSuccessSiteDTO (org.akaza.openclinica.bean.login.ResponseSuccessSiteDTO)2 SiteDTO (org.akaza.openclinica.bean.login.SiteDTO)2 ParseException (java.text.ParseException)1 SimpleDateFormat (java.text.SimpleDateFormat)1 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 HashMap (java.util.HashMap)1 ResourceBundle (java.util.ResourceBundle)1 ErrorObject (org.akaza.openclinica.bean.login.ErrorObject)1 StudyUserRoleBean (org.akaza.openclinica.bean.login.StudyUserRoleBean)1 UserAccountBean (org.akaza.openclinica.bean.login.UserAccountBean)1 UserRole (org.akaza.openclinica.bean.login.UserRole)1 StudyBean (org.akaza.openclinica.bean.managestudy.StudyBean)1 Validator (org.akaza.openclinica.control.form.Validator)1 UserAccountDAO (org.akaza.openclinica.dao.login.UserAccountDAO)1 ResponseEntity (org.springframework.http.ResponseEntity)1