/**
  * Gets the entity.
  *
  * @return the SUCCESS result
  */
 public String get() throws Exception {
   if (this.getId() != null) {
     UserUtil.permissionCheck("view_call");
     call = baseService.getEntityById(Call.class, this.getId());
     UserUtil.scopeCheck(call, "scope_call");
     CallStatus status = call.getStatus();
     if (status != null) {
       statusID = status.getId();
     }
     CallDirection direction = call.getDirection();
     if (direction != null) {
       directionID = direction.getId();
     }
     ReminderOption reminderOptionEmail = call.getReminder_option_email();
     if (reminderOptionEmail != null) {
       reminderOptionEmailID = reminderOptionEmail.getId();
     }
     EmailTemplate reminderTemplate = call.getReminder_template();
     if (reminderTemplate != null) {
       reminderTemplateID = reminderTemplate.getId();
     }
     User assignedTo = call.getAssigned_to();
     if (assignedTo != null) {
       this.setAssignedToID(assignedTo.getId());
       this.setAssignedToText(assignedTo.getName());
     }
     Date start_date = call.getStart_date();
     SimpleDateFormat dateFormat = new SimpleDateFormat(Constant.DATE_TIME_FORMAT);
     if (start_date != null) {
       startDate = dateFormat.format(start_date);
     }
     String relatedObject = call.getRelated_object();
     Integer relatedRecord = call.getRelated_record();
     if (relatedRecord != null) {
       setRelatedRecord(relatedObject, relatedRecord);
     }
     this.getBaseInfo(call, Call.class.getSimpleName(), Constant.CRM_NAMESPACE);
   } else {
     this.initBaseInfo();
     if (!CommonUtil.isNullOrEmpty(this.getRelationKey())) {
       call.setRelated_object(this.getRelationKey());
       setRelatedRecord(this.getRelationKey(), Integer.parseInt(this.getRelationValue()));
     }
   }
   return SUCCESS;
 }
  public String selectTemplate() throws Exception {
    UserUtil.permissionCheck("update_call");
    call = baseService.getEntityById(Call.class, this.getId());
    Date start_date = call.getStart_date();
    SimpleDateFormat dateFormat = new SimpleDateFormat(Constant.DATE_TIME_FORMAT);
    startDate = "";
    if (start_date != null) {
      startDate = dateFormat.format(start_date);
    }

    EmailTemplate emailTemplte =
        emailTemplateService.getEntityById(EmailTemplate.class, emailTemplateID);
    this.setText_only(emailTemplte.isText_only());
    this.setSubject(CommonUtil.fromNullToEmpty(emailTemplte.getSubject()));
    String content = "";
    if (this.isText_only()) {
      content = emailTemplte.getText_body();
    } else {
      content = emailTemplte.getHtml_body();
    }
    // Replaces the variable in the body
    if (content != null) {
      content =
          content.replaceAll("\\$call.subject", CommonUtil.fromNullToEmpty(call.getSubject()));
      content = content.replaceAll("\\$call.start_date", startDate);
    }
    if (this.isText_only()) {
      this.setText_body(content);
    } else {
      this.setHtml_body(content);
    }
    // Gets email template list
    String hql =
        "select new EmailTemplate(id,name) from EmailTemplate where type = 'callInvite' order by created_on";
    emailTemplates = emailTemplateService.findByHQL(hql);
    return SUCCESS;
  }
  private Collection<ChangeLog> changeLog(Call originalCall, Call call) {
    Collection<ChangeLog> changeLogs = null;
    if (originalCall != null) {
      ActionContext context = ActionContext.getContext();
      Map<String, Object> session = context.getSession();
      String entityName = Call.class.getSimpleName();
      Integer recordID = call.getId();
      User loginUser = (User) session.get(AuthenticationSuccessListener.LOGIN_USER);
      changeLogs = new ArrayList<ChangeLog>();

      String oldSubject = CommonUtil.fromNullToEmpty(originalCall.getSubject());
      String newSubject = CommonUtil.fromNullToEmpty(call.getSubject());
      if (!oldSubject.equals(newSubject)) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName, recordID, "entity.subject.label", oldSubject, newSubject, loginUser);
        changeLogs.add(changeLog);
      }

      String oldStatus = getOptionValue(originalCall.getStatus());
      String newStatus = getOptionValue(call.getStatus());
      if (!oldStatus.equals(newStatus)) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName, recordID, "entity.status.label", oldStatus, newStatus, loginUser);
        changeLogs.add(changeLog);
      }

      SimpleDateFormat dateFormat = new SimpleDateFormat(Constant.DATE_EDIT_FORMAT);
      String oldStartDateValue = "";
      Date oldStartDate = originalCall.getStart_date();
      if (oldStartDate != null) {
        oldStartDateValue = dateFormat.format(oldStartDate);
      }
      String newStartDateValue = "";
      Date newStartDate = call.getStart_date();
      if (newStartDate != null) {
        newStartDateValue = dateFormat.format(newStartDate);
      }
      if (!oldStartDateValue.equals(newStartDateValue)) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName,
                recordID,
                "entity.start_date.label",
                oldStartDateValue,
                newStartDateValue,
                loginUser);
        changeLogs.add(changeLog);
      }

      String oldRelatedObject = CommonUtil.fromNullToEmpty(originalCall.getRelated_object());
      String newRelatedObject = CommonUtil.fromNullToEmpty(call.getRelated_object());
      if (!oldRelatedObject.equals(newRelatedObject)) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName,
                recordID,
                "entity.related_object.label",
                oldRelatedObject,
                newRelatedObject,
                loginUser);
        changeLogs.add(changeLog);
      }

      String oldRelatedRecord = String.valueOf(originalCall.getRelated_record());
      String newRelatedRecord = String.valueOf(call.getRelated_record());
      if (!oldRelatedRecord.equals(newRelatedRecord)) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName,
                recordID,
                "entity.related_record.label",
                oldRelatedRecord,
                newRelatedRecord,
                loginUser);
        changeLogs.add(changeLog);
      }

      boolean oldReminderEmail = originalCall.isReminder_email();
      boolean newReminderEmail = call.isReminder_email();
      if (oldReminderEmail != newReminderEmail) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName,
                recordID,
                "entity.reminder.label",
                String.valueOf(oldReminderEmail),
                String.valueOf(newReminderEmail),
                loginUser);
        changeLogs.add(changeLog);
      }

      String oldReminderOption = getOptionValue(originalCall.getReminder_option_email());
      String newReminderOption = getOptionValue(call.getReminder_option_email());
      if (!oldReminderOption.equals(newReminderOption)) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName,
                recordID,
                "entity.reminder_option_email_name.label",
                oldReminderOption,
                newReminderOption,
                loginUser);
        changeLogs.add(changeLog);
      }

      String oldReminderTemplateName = "";
      EmailTemplate oldReminderTemplate = originalCall.getReminder_template();
      if (oldReminderTemplate != null) {
        oldReminderTemplateName = CommonUtil.fromNullToEmpty(oldReminderTemplate.getName());
      }
      String newReminderTemplateName = "";
      EmailTemplate newReminderTemplate = call.getReminder_template();
      if (newReminderTemplate != null) {
        newReminderTemplateName = CommonUtil.fromNullToEmpty(newReminderTemplate.getName());
      }
      if (oldReminderTemplateName != newReminderTemplateName) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName,
                recordID,
                "entity.reminder_template.label",
                oldReminderTemplateName,
                newReminderTemplateName,
                loginUser);
        changeLogs.add(changeLog);
      }

      String oldDescription = CommonUtil.fromNullToEmpty(originalCall.getDescription());
      String newDescription = CommonUtil.fromNullToEmpty(call.getDescription());
      if (!oldDescription.equals(newDescription)) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName,
                recordID,
                "entity.description.label",
                oldDescription,
                newDescription,
                loginUser);
        changeLogs.add(changeLog);
      }

      String oldNotes = CommonUtil.fromNullToEmpty(originalCall.getNotes());
      String newNotes = CommonUtil.fromNullToEmpty(call.getNotes());
      if (!oldNotes.equals(newNotes)) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName, recordID, "entity.notes.label", oldNotes, newNotes, loginUser);
        changeLogs.add(changeLog);
      }

      String oldAssignedToName = "";
      User oldAssignedTo = originalCall.getAssigned_to();
      if (oldAssignedTo != null) {
        oldAssignedToName = oldAssignedTo.getName();
      }
      String newAssignedToName = "";
      User newAssignedTo = call.getAssigned_to();
      if (newAssignedTo != null) {
        newAssignedToName = newAssignedTo.getName();
      }
      if (oldAssignedToName != newAssignedToName) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName,
                recordID,
                "entity.assigned_to.label",
                CommonUtil.fromNullToEmpty(oldAssignedToName),
                CommonUtil.fromNullToEmpty(newAssignedToName),
                loginUser);
        changeLogs.add(changeLog);
      }
    }
    return changeLogs;
  }