Java tutorial
/* * 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); } }