package org.openlmis.core.training; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.support.DatabaseConnection; import org.openlmis.core.LMISApp; import org.openlmis.core.R; import org.openlmis.core.persistence.LmisSqliteOpenHelper; import org.openlmis.core.utils.DateUtil; import java.sql.SQLException; import java.util.Date; public final class TrainingSqliteOpenHelper extends OrmLiteSqliteOpenHelper { private static final Date TRAINING_ANCHOR_DATE = DateUtil.parseString("2017-02-14", DateUtil.DB_DATE_FORMAT); public static final String DATE_TIME_SUFFIX = ".000000"; public static final String APP_ENVIRONMENT_TRAINING = "org.clintonhealthaccess.lmismoz.training"; private int monthOffsetFromAnchor; private DatabaseConnection dbConnection; private TrainingSqliteOpenHelper(Context context) { super(context, "lmis_db", null, LmisSqliteOpenHelper.getDBVersion()); monthOffsetFromAnchor = DateUtil.calculateDateMonthOffset(TRAINING_ANCHOR_DATE, new Date()); if (LMISApp.getInstance().getString(R.string.sync_account_type).equals(APP_ENVIRONMENT_TRAINING)) { if (monthOffsetFromAnchor >= 1) { monthOffsetFromAnchor -= 1; } } } @Override public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { } @Override public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) { } public void updateTimeInDB() throws SQLException { dbConnection = new TrainingSqliteOpenHelper(LMISApp.getContext()).getConnectionSource().getReadWriteConnection(); updateLotExpirationDate(); updateProgramDataFromPeriodsAndSubmitTime(); updateRnRFormPeriods(); updateStockMovementItemMovementDate(); } private void updateStockMovementItemMovementDate() throws SQLException { String sql = "UPDATE stock_items SET movementDate = date(movementDate, '+" + monthOffsetFromAnchor + " months')"; dbConnection.update(sql, null, null); } private void updateRnRFormPeriods() throws SQLException { String sql = "UPDATE rnr_forms " + "SET periodBegin = datetime(periodBegin, '+" + monthOffsetFromAnchor + " months') || " + DATE_TIME_SUFFIX + "," + "periodEnd = datetime(periodEnd, '+" + monthOffsetFromAnchor + " months') || " + DATE_TIME_SUFFIX; dbConnection.update(sql, null, null); } private void updateProgramDataFromPeriodsAndSubmitTime() throws SQLException { String sql = "UPDATE program_data_forms " + "SET submittedTime = datetime(submittedTime, '+" + monthOffsetFromAnchor + " months') || " + DATE_TIME_SUFFIX + "," + "periodBegin = datetime(periodBegin, '+" + monthOffsetFromAnchor + " months') || " + DATE_TIME_SUFFIX + "," + "periodEnd = datetime(periodEnd, '+" + monthOffsetFromAnchor + " months') ||" + DATE_TIME_SUFFIX; dbConnection.update(sql, null, null); } private void updateLotExpirationDate() throws SQLException { String sql = "UPDATE lots SET expirationDate = date(expirationDate, '+" + monthOffsetFromAnchor + " months')"; dbConnection.update(sql, null, null); } public static TrainingSqliteOpenHelper getInstance(Context context) { return new TrainingSqliteOpenHelper(context); } }