package co.smartreceipts.android.trips.editor; import java.io.File; import java.sql.Date; import java.util.ArrayList; import javax.inject.Inject; import co.smartreceipts.android.analytics.Analytics; import co.smartreceipts.android.analytics.events.Events; import co.smartreceipts.android.di.scopes.FragmentScope; import co.smartreceipts.android.model.Trip; import co.smartreceipts.android.model.factory.TripBuilderFactory; import co.smartreceipts.android.persistence.DatabaseHelper; import co.smartreceipts.android.persistence.PersistenceManager; import co.smartreceipts.android.persistence.database.controllers.impl.TripTableController; import co.smartreceipts.android.persistence.database.operations.DatabaseOperationMetadata; import co.smartreceipts.android.settings.catalog.UserPreference; import co.smartreceipts.android.utils.FileUtils; @FragmentScope public class TripCreateEditFragmentPresenter { @Inject TripCreateEditFragment fragment; @Inject Analytics analytics; @Inject TripTableController tripTableController; @Inject PersistenceManager persistenceManager; @Inject public TripCreateEditFragmentPresenter() { } public boolean checkTrip(String name, String startDateText, Date startDate, String endDateText, Date endDate) { // Error Checking if (name.length() == 0 || startDateText.length() == 0 || endDateText.length() == 0) { fragment.showError(TripEditorErrors.MISSING_FIELD); return false; } if (startDate == null || endDate == null) { fragment.showError(TripEditorErrors.CALENDAR_ERROR); return false; } if (startDate.getTime() > endDate.getTime()) { fragment.showError(TripEditorErrors.DURATION_ERROR); return false; } if (name.startsWith(" ")) { fragment.showError(TripEditorErrors.SPACE_ERROR); return false; } if (FileUtils.filenameContainsIllegalCharacter(name)) { fragment.showError(TripEditorErrors.ILLEGAL_CHAR_ERROR); return false; } return true; } public Trip saveTrip(String name, Date startDate, Date endDate, String defaultCurrency, String comment, String costCenter) { File file = persistenceManager.getStorageManager().getFile(name); if (fragment.getTrip() == null) { // Insert analytics.record(Events.Reports.PersistNewReport); final Trip insertTrip = new TripBuilderFactory() .setDirectory(file) .setStartDate(startDate) .setEndDate(endDate) .setComment(comment) .setCostCenter(costCenter) .setDefaultCurrency(defaultCurrency) .build(); tripTableController.insert(insertTrip, new DatabaseOperationMetadata()); return insertTrip; } else { // Update analytics.record(Events.Reports.PersistUpdateReport); final Trip updateTrip = new TripBuilderFactory(fragment.getTrip()) .setDirectory(file) .setStartDate(startDate) .setEndDate(endDate) // TODO: Update trip timezones iff date was changed .setComment(comment) .setCostCenter(costCenter) .setDefaultCurrency(defaultCurrency) .build(); tripTableController.update(fragment.getTrip(), updateTrip, new DatabaseOperationMetadata()); return updateTrip; } } public boolean isIncludeCostCenter() { return persistenceManager.getPreferenceManager().get(UserPreference.General.IncludeCostCenter); } public ArrayList<CharSequence> getCurrenciesList() { return persistenceManager.getDatabase().getCurrenciesList(); } public boolean isEnableAutoCompleteSuggestions() { return persistenceManager.getPreferenceManager().get(UserPreference.Receipts.EnableAutoCompleteSuggestions); } public DatabaseHelper getDatabaseHelper() { return persistenceManager.getDatabase(); } public int getDefaultTripDuration() { return persistenceManager.getPreferenceManager().get(UserPreference.General.DefaultReportDuration); } public String getDefaultCurrency() { return persistenceManager.getPreferenceManager().get(UserPreference.General.DefaultCurrency); } public String getDateSeparator() { return persistenceManager.getPreferenceManager().get(UserPreference.General.DateSeparator); } }