public int addTrabajadorCuenta(
      EmpresaCuenta empresaCuenta,
      Trabajador trabajador,
      String trato,
      String formaPago,
      String tipoContrato,
      Boolean seguroCesantia,
      Afp afp,
      Afp afp2,
      String tipoAhorroVoluntario,
      Double valorAhorroVoluntario,
      String tipoSalud,
      Isapre isapre,
      String tipoPactoIsapre,
      Double valorPactoIsapre,
      Boolean cargas,
      Double sueldoPromedio,
      Long numeroCargasNormal,
      Long numeroCargasInvalida) {
    int respuesta;
    HibernateUtil.beginTransaction();
    try {
      if (empresaCuenta != null) {
        // empresa cuenta existe
        if (trabajador != null) {
          // trabajador existe
          EmpresaCuentaDao empresaCuentaDao = DaoFactory.getInstance().getEmpresaCuentaDao();
          empresaCuenta =
              empresaCuentaDao.findByEmpresaMes(empresaCuenta.getEmpresa(), empresaCuenta.getMes());
          if (!empresaCuenta.isCerrada()) {
            // si la cuenta de la empresa no está cerrada
            TrabajadorDao trabajadorDao = DaoFactory.getInstance().getTrabajadorDao();
            trabajador =
                trabajadorDao.findByEmpresaRutTrabajador(
                    trabajador.getEmpresa(), trabajador.getDatosPersonales().getRut());
            TrabajadorCuentaDao trabajadorCuentaDao =
                DaoFactory.getInstance().getTrabajadorCuentaDao();
            if (!trabajadorCuentaDao.existe(trabajador, empresaCuenta).booleanValue()) {
              // si la cuenta del trabajador no existe

              // START NEW
              AfpDao afpDao = DaoFactory.getInstance().getAfpDao();
              if (afp != null) {
                afp = afpDao.findByMesNombre(empresaCuenta.getMes(), afp.getNombre());
              }
              if (afp2 != null) {
                afp2 = afpDao.findByMesNombre(empresaCuenta.getMes(), afp2.getNombre());
              }
              // END NEW

              TrabajadorCuenta trabajadorCuenta =
                  new TrabajadorCuenta(
                      trato,
                      formaPago,
                      tipoContrato,
                      seguroCesantia,
                      afp,
                      afp2,
                      tipoAhorroVoluntario,
                      valorAhorroVoluntario,
                      tipoSalud,
                      isapre,
                      tipoPactoIsapre,
                      valorPactoIsapre,
                      cargas,
                      sueldoPromedio,
                      numeroCargasNormal,
                      numeroCargasInvalida);
              // trabajadorCuenta.setEmpresaCuenta(empresaCuenta);
              // trabajadorCuenta.setTrabajador(trabajador);
              // trabajadorCuentaDao.makePersistent(trabajadorCuenta);
              trabajador.addCuenta(trabajadorCuenta);
              empresaCuenta.addTrabajadorCuenta(trabajadorCuenta);
              empresaCuentaDao.makePersistent(empresaCuenta);
              trabajadorDao.makePersistent(trabajador);

              respuesta = respExito;
            } else {
              // si la cuenta de la empresa existe
              respuesta = respExiste;
            }
          } else {
            // si la cuenta de la empresa está cerrada
            respuesta = respCuentaEmpresaCerrada;
          }
        } else {
          // trabajador no existe
          respuesta = respNoExisteTrabajador;
        }
      } else {
        // empresa cuenta no existe
        respuesta = respNoExisteEmpresaCuenta;
      }
      HibernateUtil.commitTransaction();
    } finally {
      HibernateUtil.closeSession();
    }
    return respuesta;
  }