de.aw.monma.wertpapier.action.FragmentWertpapierUmsatz.java Source code

Java tutorial

Introduction

Here is the source code for de.aw.monma.wertpapier.action.FragmentWertpapierUmsatz.java

Source

/*
 * MonMa: Eine freie Android-Application fuer die Verwaltung privater Finanzen
 *
 * Copyright [2015] [Alexander Winkler, 2373 Dahme/Germany]
 *
 * This program is free software; you can redistribute it and/or modify it under the terms of the
 * GNU General Public License as published by the Free Software Foundation; either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program; if
 * not, see <http://www.gnu.org/licenses/>.
 */
package de.aw.monma.wertpapier.action;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

import de.aw.awlib.fragments.AWFragmentActionBar;
import de.aw.monma.BR;
import de.aw.monma.R;
import de.aw.monma.database.DBHelper;
import de.aw.monma.enums.PartnerArt;
import de.aw.monma.gv.Account;
import de.aw.monma.gv.PartnerStammdaten;
import de.aw.monma.monmamain.MonMaInterface;
import de.aw.monma.monmamain.MonMaResultCodes;

import static de.aw.monma.enums.WPUmsatzArt.OthrInc;

/**
 * Fragment fuer Erfassung Wertpapierumsaetze. Benutzt {@link WertpapierUmsatzValidator} als
 * Pruefungsinstanz. Je nach GV werden entsprechende Views eingeblendet, die Details zu den
 * Umsaetzen bereitstellen.
 */
public class FragmentWertpapierUmsatz extends AWFragmentActionBar implements MonMaInterface, MonMaResultCodes {
    private static int layout = R.layout.wpumsatz;
    private WertpapierUmsatzValidator mUmsatz;
    private String mTempPartnername;
    private PartnerStammdaten mPartnerStammdaten;

    public static FragmentWertpapierUmsatz newInstance(WertpapierUmsatzValidator wpUmsatz) {
        Bundle args = new Bundle();
        args.putParcelable(UMSATZ, wpUmsatz);
        FragmentWertpapierUmsatz f = new FragmentWertpapierUmsatz();
        f.setArguments(args);
        return f;
    }

    /**
     * Prueft die Felder auf Plausibilitaet.
     */
    public List<Integer> checkValues() {
        List<Integer> fehlerListe = new ArrayList<>();
        if (mUmsatz.getPartnerID() == NOID) {
            fehlerListe.add(R.string.fehler_Wertpapier);
        }
        switch (mUmsatz.getWPUmsatzArt()) {
        // Verrechnungskonto pruefen
        case WP_Splitt:
        case WP_Einlage:
        case WP_Entnahme:
            if (mUmsatz.getGesamtKosten() + mUmsatz.getTax() == 0) {
                // Wenn bei diesen GVs keine Gebuehren/Steueren
                // angefallen sind, muss Verrechnungskonto nicht
                // belegt sein
                break;
            }
        default:
            if (mUmsatz.getVerrechungskontoID() == NOID) {
                fehlerListe.add(R.string.fehler_Verrechnungskonto);
            }
        }
        switch (mUmsatz.getWPUmsatzArt()) {
        case Kauf:
        case Verkauf:
        case WP_Einlage:
        case WP_Entnahme:
            if (mUmsatz.getKurs() == 0) {
                fehlerListe.add(R.string.fehler_Kurs);
            }
            if (mUmsatz.getMenge() == 0) {
                fehlerListe.add(R.string.fehler_Anzahl);
            }
            break;
        case Payout:
        case DivIn:
        case OthrInc:
        case IntrInc:
            if (mUmsatz.getBruttoUmsatz() == 0) {
                fehlerListe.add(R.string.fehler_Bruttoertrag);
            }
            if (mUmsatz.getWPUmsatzArt() == OthrInc && mUmsatz.getAsLong(column_catID) == null) {
                fehlerListe.add(R.string.fehler_Einnahmeart);
            }
            break;
        case WP_Splitt:
            if (mUmsatz.getSplitRatio() == 0) {
                fehlerListe.add(R.string.fehler_SplitRatio);
            }
            break;
        }
        return fehlerListe;
    }

    /**
     * Prueft die Allgemeinen Felder auf Plausibilitaet.
     *
     * @return Liste der ResIDs, die nicht oder fehlerhaft gefuellt sind.
     */
    public boolean checkValuesOK() {
        List<Integer> fehlerListe;
        fehlerListe = checkValues();
        if (fehlerListe.size() != 0) {
            String[] fehlertexte = new String[fehlerListe.size()];
            int i = 0;
            for (int fehler : fehlerListe) {
                fehlertexte[i] = getString(fehler);
                i++;
            }
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setTitle(R.string.fehlerHeader_WertPapierUmsatz);
            StringBuilder text = new StringBuilder();
            String delimiter = "";
            if (fehlertexte.length > 1) {
                delimiter = "- ";
            }
            for (String t : fehlertexte) {
                text.append(delimiter).append(t).append(linefeed);
            }
            builder.setMessage(text.toString());
            builder.setPositiveButton(R.string.awlib_btnAccept, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                }
            });
            Dialog dlg = builder.create();
            dlg.show();
            return false;
        }
        return true;
    }

    public String getPartnername() {
        return mTempPartnername;
    }

    @Override
    protected void onActionFinishClicked() {
        if (mUmsatz.isEditable()) {
            if (checkValuesOK()) {
                DBHelper db = DBHelper.getInstance();
                try {
                    db.beginTransaction();
                    String partnername = mPartnerStammdaten.getPartnerName();
                    if (!partnername.equals(mTempPartnername)) {
                        PartnerStammdaten partner = new PartnerStammdaten(PartnerArt.Wertpapier, mTempPartnername);
                        mUmsatz.put(column_wpid, partner.getID());
                    }
                    if (mUmsatz.isInserted()) {
                        mUmsatz.update(db);
                    } else {
                        mUmsatz.insert(db);
                    }
                    Toast.makeText(getActivity(), " Ertrag: " + mUmsatz.getSplitBuchungSaldo(), Toast.LENGTH_LONG)
                            .show();
                    db.setTransactionSuccessful();
                } finally {
                    db.endTransaction();
                }
                super.onActionFinishClicked();
            }
        }
    }

    /**
     * Setzen der Umsatzart als 'Kauf', wenn nicht anders angegeben.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mUmsatz = args.getParcelable(UMSATZ);
        mPartnerStammdaten = new PartnerStammdaten(mUmsatz.getPartnerID());
        mTempPartnername = mPartnerStammdaten.getPartnerName();
        setHasOptionsMenu(true);
    }

    /**
     * Blendet in Abhaengigkeit der {@link Action} und des Umsatzes das deleteItem bzw. das
     * CommissionItem aus.
     */
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.fragment_wertpapierumsatz, menu);
        MenuItem item = menu.findItem(R.id.menu_item_delete_Buchung);
        item.setVisible(mUmsatz.isDeleteable());
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.menu_item_delete_Buchung:
            mUmsatz.delete(DBHelper.getInstance());
            super.onActionFinishClicked();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        Account account = new Account(mUmsatz.getAccountID());
        if (!mUmsatz.isInserted()) {
            mUmsatz.setVerrechungskontoID(account.getReferenzAccount());
        }
        setTitle(account.getAccountName());
        setSubTitle(mUmsatz.getWPUmsatzArt().getBeschreibungID());
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ViewDataBinding binding = DataBindingUtil.bind(view);
        binding.setVariable(BR.wpumsatz, mUmsatz);
        binding.setVariable(BR.handler, this);
        FragmentTransaction ft = getChildFragmentManager().beginTransaction();
        AbstractFragmentWertpapierUmsatz f;
        switch (mUmsatz.getWPUmsatzArt()) {
        case Kauf:
        case Verkauf:
        case WP_Einlage:
        case WP_Entnahme:
            f = FragmentWPKaufVerkauf.newInstance(mUmsatz);
            break;
        case Payout:
        case DivIn:
        case OthrInc:
        case IntrInc:
            f = FragmentWPEinnahmen.newInstance(mUmsatz);
            break;
        case WP_Splitt:
            f = FragmentWPSplit.newInstance(mUmsatz);
            break;
        case Ausgabe:
            f = FragmentWPAusgaben.newInstance(mUmsatz);
            break;
        case Retshrs:
        default:
            throw new IllegalArgumentException("UmsatzArt " + mUmsatz.getWPUmsatzArt().name() + " nicht bekannt!?");
        }
        ft.replace(R.id.WPUmsatzDetailView, f, null).commit();
    }

    @Override
    protected void setInternalArguments(Bundle args) {
        super.setInternalArguments(args);
        args.putInt(LAYOUT, layout);
    }

    /**
     */
    public void setPartner(@NonNull String currentText, String cursortext, long newID) {
        mTempPartnername = currentText;
        mUmsatz.put(column_wpid, newID);
    }
}