protected AppraisalAssignmentDTO createAADTOForUpdateCall(AppraisalAssignmentDTO aaDTOAfterSave)
      throws Exception {
    Integer priority = new Integer(99);

    // Get data from the AADTO returned from the Save call
    long waTaskId = aaDTOAfterSave.getWaTaskId();
    long claimId = aaDTOAfterSave.getClaimId();
    long claimExposureId = aaDTOAfterSave.getClaimExposureId();
    long documentID = aaDTOAfterSave.getDocumentID();
    String clientClaimNumber = aaDTOAfterSave.getClientClaimNumber();
    String workItemID = aaDTOAfterSave.getWorkItemID();

    // Create the ME doc for the update AADTO
    MitchellEnvelopeDocument updateMEDoc = createTestMitchellEnvelopeForUpdate(aaDTOAfterSave);

    // Create the AADTO for the update call and set all of its fields
    AppraisalAssignmentDTO aaDTOForUpdateCall = new AppraisalAssignmentDTO();

    // SET ALL FIELDS IN THE AADTO for the update call
    aaDTOForUpdateCall.setTcn(0L);
    aaDTOForUpdateCall.setWaTaskId(waTaskId);
    aaDTOForUpdateCall.setClaimId(claimId);
    aaDTOForUpdateCall.setClaimExposureId(claimExposureId);
    aaDTOForUpdateCall.setDocumentID(documentID);
    aaDTOForUpdateCall.setStatus("OPENED");
    aaDTOForUpdateCall.setDisposition("DISPATCHED");
    aaDTOForUpdateCall.setMitchellEnvelopDoc(updateMEDoc);
    aaDTOForUpdateCall.setAssignmentHasBeenUpdate("N");
    aaDTOForUpdateCall.setAssignmentID(0L);
    aaDTOForUpdateCall.setClientClaimNumber(clientClaimNumber);
    aaDTOForUpdateCall.setWorkItemID(workItemID);
    aaDTOForUpdateCall.setEventReasonCode("");
    aaDTOForUpdateCall.setEventMemo("");
    aaDTOForUpdateCall.setEventNameList(null);
    aaDTOForUpdateCall.setOriginalAssignment(true);
    aaDTOForUpdateCall.setReqAssociateDataCompletedInd("N");
    aaDTOForUpdateCall.setWorkAssignmentTcn(0L);
    aaDTOForUpdateCall.setTimeZone("Pacific Standard Time");
    aaDTOForUpdateCall.setHoldInfo(null);
    aaDTOForUpdateCall.setIsSaveFromSSOPage(false);
    aaDTOForUpdateCall.setSaveAndSendFlag(true);
    aaDTOForUpdateCall.setSubType(null);
    aaDTOForUpdateCall.setDuration(null);
    aaDTOForUpdateCall.setPriority(priority);

    return aaDTOForUpdateCall;
  }
  @Test
  public void happyPath() throws Exception {
    Integer expectedPriority = new Integer(99);
    BigDecimal expectedDurationFraction = new BigDecimal(0);

    // Create the AADTO to call the SaveAA method with
    AppraisalAssignmentDTO aaDTOForSave = createAADTOForSaveCall();

    // Call the save method first. This is required as the update call
    // will need the claim ID, exposure Id, WA Task Id, etc to be created
    // in order to succeed.
    // Call the Save method in the AAS
    AppraisalAssignmentDTO aaDTOAfterSave =
        appraisalAssignmentEJB.saveAppraisalAssignment(aaDTOForSave, this.testUserUserInfoDoc);

    // Create the AADTO for the update call
    AppraisalAssignmentDTO aaDTOForUpdateCall = createAADTOForUpdateCall(aaDTOAfterSave);

    // Call the Update method in the AAS
    AppraisalAssignmentDTO result =
        appraisalAssignmentEJB.updateAppraisalAssignment(
            aaDTOForUpdateCall, this.testUserUserInfoDoc);

    // Assertions on return result from call
    assertNotNull(result);
    assertNotNull(result.getMitchellEnvelopDoc());
    assertTrue(result.getMitchellEnvelopDoc().validate());
    assertEquals(0L, result.getTcn());
    assertEquals(aaDTOAfterSave.getWaTaskId(), result.getWaTaskId());
    assertEquals(aaDTOAfterSave.getClaimId(), result.getClaimId());
    assertEquals(aaDTOAfterSave.getClaimExposureId(), result.getClaimExposureId());
    assertEquals(aaDTOAfterSave.getDocumentID(), result.getDocumentID());
    assertEquals("OPENED", result.getStatus());
    assertEquals("DISPATCHED", result.getDisposition());
    assertEquals("N", result.getAssignmentHasBeenUpdate());
    assertFalse(aaDTOForUpdateCall.getAssignmentID() == result.getAssignmentID());
    assertEquals(aaDTOAfterSave.getClientClaimNumber(), result.getClientClaimNumber());
    assertEquals(aaDTOAfterSave.getWorkItemID(), result.getWorkItemID());
    assertEquals("", result.getEventReasonCode());
    assertEquals("", result.getEventMemo());
    assertNull(result.getEventNameList());
    assertFalse(result.isOriginalAssignment());
    assertEquals("Y", result.getReqAssociateDataCompletedInd());
    assertEquals(1L, result.getWorkAssignmentTcn());
    assertEquals("Pacific Standard Time", result.getTimeZone());
    assertNull(result.getHoldInfo());
    assertFalse(result.getIsSaveFromSSOPage());
    assertFalse(result.getSaveAndSendFlag());
    assertNull(result.getSubType());
    assertNotNull(result.getDuration());
    assertEquals(expectedPriority, result.getPriority());
    assertNotNull(result.getDuration());
    assertEquals(0L, result.getDuration().getDay());
    assertEquals(expectedDurationFraction, result.getDuration().getFraction());
    assertEquals(0L, result.getDuration().getHour());
    assertEquals(5L, result.getDuration().getMinute());
    assertEquals(0L, result.getDuration().getMonth());
    assertEquals(0L, result.getDuration().getSecond());
    assertEquals(1L, result.getDuration().getSign());
    assertEquals(0L, result.getDuration().getYear());

    // Retrieve the Appraisal Assignment BO from the Estimate Package
    // Service using the Document Id from the result AADTO in order to
    // verify all of its fields
    AppraisalAssignment aaBO =
        this.estimatePackageClient.findAppraislAssignmentByDocId(result.getDocumentID());

    assertEquals(this.testUserUserInfoDoc.getUserInfo().getUserID(), aaBO.getAssignmentCreatedBy());
    assertNull(aaBO.getCallNeeded());
    assertNotNull("123-4567890", aaBO.getCellPhone());
    assertEquals(result.getClaimExposureId(), aaBO.getClaimExposureId().longValue());
    assertEquals(result.getClaimId(), aaBO.getClaimId().longValue());
    assertEquals(result.getClientClaimNumber(), aaBO.getClientClaimNumber());
    assertNull(aaBO.getClientEstimateId());
    assertNotNull(aaBO.getCoCd());
    assertNotNull(this.testUserUserInfoDoc.getUserInfo().getUserID(), aaBO.getCreatedBy());
    assertNotNull(aaBO.getCreatedDate());
    assertEquals("2014-11-20 00:00:00.0", aaBO.getDateOfLoss().toString());
    assertNotNull(aaBO.getDocument());
    assertEquals("*****@*****.**", aaBO.getEmailAddress());
    assertNotNull(aaBO.getId());
    assertEquals("6220 Greenwich Dr", aaBO.getInspectionAddress1());
    assertNull(aaBO.getInspectionAddress2());
    assertEquals("San Diego", aaBO.getInspectionCity());
    assertEquals("CA", aaBO.getInspectionStateProvince());
    assertEquals("92122", aaBO.getInspectionZipPostalCode());
    assertNotNull("U", aaBO.getIsDrivable());
    assertEquals("858-3687234", aaBO.getLocationPhone());
    assertEquals("SHOP", aaBO.getLocationType());
    assertEquals("INSURED", aaBO.getPrimaryContact());
    assertEquals("first", aaBO.getPrimaryContactFirstName());
    assertEquals("last", aaBO.getPrimaryContactLastName());
    assertNull(aaBO.getPrimaryContactSecondLastName());
    assertEquals("MANUAL", aaBO.getScheduleMethod());
    assertEquals(1L, aaBO.getTcn().longValue());
    assertEquals("Y", aaBO.getTravelRequired());
    assertEquals(this.testUserUserInfoDoc.getUserInfo().getUserID(), aaBO.getUpdatedBy());
    assertNotNull(aaBO.getUpdatedDate());
    assertEquals("NNS", aaBO.getUserPreferredMoi());
    assertEquals("Y", aaBO.getValidInspectionAddress());
    assertEquals("Car", aaBO.getVehicleType());
    assertNull(aaBO.getVendorSrc());
    assertNotNull("123-4567890+123", aaBO.getWorkPhone());

    // Verify the latitude and longitude are not null
    assertNotNull(aaBO.getInspectionLatitude());
    assertNotNull(aaBO.getInspectionLongitude());

    // Get the rounded Lat/Long from the Appraisal Assignment Business
    // Object
    Double latitudeRounded = calculateRoundedDoubleWithPrecision(aaBO.getInspectionLatitude(), 5);
    Double longitudeRounded = calculateRoundedDoubleWithPrecision(aaBO.getInspectionLongitude(), 5);

    // Assertions on the value of the rounded latitude and longitude
    assertEquals(EXPECTED_LATITUDE_ROUNDED, latitudeRounded);
    assertEquals(EXPECTED_LONGITUDE_ROUNDED, longitudeRounded);
  }