package co.smartreceipts.android.receipts.editor;
import java.sql.Date;
import javax.inject.Inject;
import co.smartreceipts.android.di.scopes.FragmentScope;
import co.smartreceipts.android.model.Category;
import co.smartreceipts.android.model.PaymentMethod;
import co.smartreceipts.android.model.Receipt;
import co.smartreceipts.android.model.Trip;
import co.smartreceipts.android.model.factory.ExchangeRateBuilderFactory;
import co.smartreceipts.android.model.factory.ReceiptBuilderFactory;
import co.smartreceipts.android.persistence.database.controllers.impl.ReceiptTableController;
import co.smartreceipts.android.persistence.database.operations.DatabaseOperationMetadata;
import co.smartreceipts.android.purchases.PurchaseManager;
import co.smartreceipts.android.purchases.model.InAppPurchase;
import co.smartreceipts.android.purchases.source.PurchaseSource;
import co.smartreceipts.android.purchases.wallet.PurchaseWallet;
import co.smartreceipts.android.settings.UserPreferenceManager;
import co.smartreceipts.android.settings.catalog.UserPreference;
import co.smartreceipts.android.utils.log.Logger;
@FragmentScope
public class ReceiptCreateEditFragmentPresenter {
@Inject
ReceiptCreateEditFragment fragment;
@Inject
UserPreferenceManager preferenceManager;
@Inject
PurchaseManager purchaseManager;
@Inject
PurchaseWallet purchaseWallet;
@Inject
ReceiptTableController receiptTableController;
@Inject
ReceiptCreateEditFragmentPresenter() {
}
boolean isIncludeTaxField() {
return preferenceManager.get(UserPreference.Receipts.IncludeTaxField);
}
boolean isUsePreTaxPrice() {
return preferenceManager.get(UserPreference.Receipts.UsePreTaxPrice);
}
float getDefaultTaxPercentage() {
return preferenceManager.get(UserPreference.Receipts.DefaultTaxPercentage);
}
boolean isReceiptDateDefaultsToReportStartDate() {
return preferenceManager.get(UserPreference.Receipts.ReceiptDateDefaultsToReportStartDate);
}
boolean isReceiptsDefaultAsReimbursable() {
return preferenceManager.get(UserPreference.Receipts.ReceiptsDefaultAsReimbursable);
}
boolean isMatchReceiptCommentToCategory() {
return preferenceManager.get(UserPreference.Receipts.MatchReceiptCommentToCategory);
}
boolean isMatchReceiptNameToCategory() {
return preferenceManager.get(UserPreference.Receipts.MatchReceiptNameToCategory);
}
String getDefaultCurrency() {
return preferenceManager.get(UserPreference.General.DefaultCurrency);
}
boolean isDefaultToFullPage() {
return preferenceManager.get(UserPreference.Receipts.DefaultToFullPage);
}
String getDateSeparator() {
return preferenceManager.get(UserPreference.General.DateSeparator);
}
boolean isPredictCategories() {
return preferenceManager.get(UserPreference.Receipts.PredictCategories);
}
boolean isUsePaymentMethods() {
return preferenceManager.get(UserPreference.Receipts.UsePaymentMethods);
}
boolean isShowReceiptId() {
return preferenceManager.get(UserPreference.Receipts.ShowReceiptID);
}
boolean isEnableAutoCompleteSuggestions() {
return preferenceManager.get(UserPreference.Receipts.EnableAutoCompleteSuggestions);
}
void initiatePurchase() {
purchaseManager.initiatePurchase(InAppPurchase.SmartReceiptsPlus, PurchaseSource.ExchangeRate);
}
boolean hasActivePlusPurchase() {
return purchaseWallet.hasActivePurchase(InAppPurchase.SmartReceiptsPlus);
}
boolean checkReceipt(Date date) {
if (date == null) {
fragment.showDateError();
return false;
}
if (!fragment.getParentTrip().isDateInsideTripBounds(date)) {
fragment.showDateWarning();
}
return true;
}
void saveReceipt(Date date, String price, String tax,
String exchangeRate, String comment, PaymentMethod paymentMethod,
boolean isReimursable, boolean isFullpage,
String name, Category category, String currency,
String extraText1, String extraText2, String extraText3) {
final Receipt receipt = fragment.getReceipt();
final Trip parentTrip = fragment.getParentTrip();
final ReceiptBuilderFactory builderFactory = (receipt == null) ? new ReceiptBuilderFactory(-1) : new ReceiptBuilderFactory(receipt);
builderFactory.setName(name)
.setTrip(parentTrip)
.setDate((Date) date.clone())
.setPrice(price)
.setTax(tax)
.setExchangeRate(new ExchangeRateBuilderFactory().setBaseCurrency(currency)
.setRate(parentTrip.getTripCurrency(), exchangeRate)
.build())
.setCategory(category)
.setCurrency(currency)
.setComment(comment)
.setPaymentMethod(paymentMethod)
.setIsReimbursable(isReimursable)
.setIsFullPage(isFullpage)
.setExtraEditText1(extraText1)
.setExtraEditText2(extraText2)
.setExtraEditText3(extraText3);
if (receipt == null) {
receiptTableController.insert(builderFactory.setFile(fragment.getFile()).build(), new DatabaseOperationMetadata());
} else {
receiptTableController.update(receipt, builderFactory.build(), new DatabaseOperationMetadata());
}
}
void deleteReceiptFileIfUnused() {
if (fragment.getReceipt() == null && fragment.getFile() != null) {
if (fragment.getFile().delete()) {
Logger.info(this, "Deleting receipt file as we're not saving it");
}
}
}
}