/**
  * Zeigt das Menu in Abhaengigkeit der Action.
  *
  * <p>Ist die Action == EDIT, wird im Item R.id.menu_item_create_RegelmBuchung_fromUmsatz die ID
  * des Umsatzes unter ID in einem Intent gespeichert.
  *
  * <p>Ist die Action == EDIT und ist es eine Umbuchung, wird unter R.id.menu_item_toUmbuchung die
  * ID der Gegenbuchung unter ID in einem Intent gespeichert.
  */
 @Override
 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
   super.onCreateOptionsMenu(menu, inflater);
   Intent intent = new Intent();
   inflater.inflate(R.menu.fragment_buchungen, menu);
   switch (getMainAction()) {
     case ADD:
       menu.findItem(R.id.menu_item_delete_Buchung).setVisible(false);
       menu.findItem(R.id.menu_item_toUmbuchung).setVisible(false);
       menu.findItem(R.id.menu_item_create_RegelmBuchung_fromUmsatz).setVisible(false);
       break;
     case EDIT:
       MenuItem item;
       if (mUmsatz.isInserted()) {
         intent.putExtra(ID, mUmsatz.getID());
         item = menu.findItem(R.id.menu_item_create_RegelmBuchung_fromUmsatz);
         item.setIntent(intent);
       }
       item = menu.findItem(R.id.menu_item_toUmbuchung);
       if (mUmsatz.isUmbuchung()) {
         menu.findItem(R.id.menu_item_delete_Buchung).setVisible(false);
         menu.findItem(R.id.menu_item_SplitBuchung).setVisible(false);
         intent.putExtra(ID, mUmsatz.getAsLong(R.string.column_transferID));
         item.setIntent(intent);
       } else {
         item.setVisible(false);
       }
       break;
   }
 }
 @Override
 public void onDismiss(@LayoutRes int layoutID, DialogInterface dialog) {
   if (mUmsatz.getSplitBuchung().size() == 0) {
     mUmsatz.removeSplittBuchung();
   } else {
     mUmsatz.put(R.string.column_amount, mUmsatz.getSplitBuchung().getSplitBuchungsSummeAmount());
   }
   bindView();
 }
 @Override
 public void onTextChanged(View view, String newText, long newID) {
   switch (view.getId()) {
     case R.id.actvCat:
       mUmsatz.put(R.string.column_catID, newID);
       break;
     case R.id.tvMemo:
       mUmsatz.put(R.string.column_memo, newText);
       break;
   }
 }
 @Override
 public void onLongValueChanged(View view, long newAmount) {
   switch (view.getId()) {
     case R.id.tvAmount:
       mUmsatz.put(R.string.column_amount, newAmount);
   }
 }
 @Override
 public void onActivityCreated(Bundle savedInstanceState) {
   super.onActivityCreated(savedInstanceState);
   switch (getMainAction()) {
     case EDIT:
       setTitle(R.string.menu_item_edit_Buchung);
       setSubTitle(Account.getAccountName(mUmsatz.getAccountID()));
       break;
     case ADD:
       setTitle(R.string.menu_item_add_Buchung);
       setSubTitle(Account.getAccountName(mUmsatz.getAccountID()));
       break;
     default:
       setTitle(Account.getAccountName(mUmsatz.getAccountID()));
   }
 }
 /** Bindet die View an Daten. Wird gerufen, wenn sich Inhalte der View geaendert haben koennen */
 @CallSuper
 protected void bindView() {
   View contentView = getView();
   for (int resID : viewResIDs) {
     TextView view = (TextView) contentView.findViewById(resID);
     switch (resID) {
       case R.id.tvAmount:
         CalculatorTextCurrency ecAmount = (CalculatorTextCurrency) view;
         ecAmount.setValue(mUmsatz.getAsLong(R.string.column_amount, 0));
         if (mUmsatz.isUmbuchung() || mUmsatz.hasSplitBuchung()) {
           ecAmount.setFocusable(false);
         }
         break;
       case R.id.actvCat:
         MonMaAutoCompleteTextView actvCat = (MonMaAutoCompleteTextView) view;
         MonMaAutoCompleteTextView.Target target = MonMaAutoCompleteTextView.Target.Categorie;
         actvCat.initialize(target, this);
         Long id =
             mUmsatz.getAsLong(
                 R.string.column_catID,
                 -mUmsatz.getAsLong(R.string.column_transferaccountID, NOID));
         String text = Categorie.getCatName(id);
         actvCat.setText(text);
         if (mUmsatz.hasSplitBuchung()) {
           actvCat.setText(R.string.Splittbuchung);
           actvCat.setFocusable(false);
         } else {
           if (mUmsatz.isUmbuchung()) {
             actvCat.setFocusable(false);
           }
         }
         break;
       case R.id.tvBtag:
         AWDateTextView tvBtag = (AWDateTextView) view;
         tvBtag.setDate(mUmsatz.getBuchungsDatum());
         break;
       case R.id.tvMemo:
         view.setText(mUmsatz.getMemo());
         break;
       case R.id.actvPayee:
         MonMaAutoCompleteTextView actvPayee = (MonMaAutoCompleteTextView) view;
         actvPayee.setText(mUmsatz.getPartnerName());
         break;
     }
   }
 }
 private void showSplitBuchung() {
   mUmsatz.put(R.string.column_hasDetail, true);
   DialogFragmentSplitZeilen f = DialogFragmentSplitZeilen.newInstance(mUmsatz);
   f.show(getFragmentManager(), f.getTAG());
   f.setOnDismissListener(this);
   f.setOnCancelListener(this);
   args.putBoolean(SHOWDIALOG, true);
 }
 @Override
 protected void setInternalArguments(Bundle args) {
   super.setInternalArguments(args);
   args.putIntArray(VIEWRESIDS, viewResIDs);
   args.putIntArray(FROMRESIDS, fromResIDs);
   args.putInt(LAYOUT, layout);
   mUmsatz = args.getParcelable(UMSATZ);
   showDetails = args.getBoolean(SHOWDIALOG, false);
   if (mUmsatz.isDetail()) {
     showDetails = true;
     Long id = mUmsatz.getAsLong(R.string.column_transferID);
     try {
       mUmsatz = new BankUmsatz(id);
       args.putParcelable(UMSATZ, mUmsatz);
     } catch (AWApplicationGeschaeftsObjekt.LineNotFoundException e) {
       // TODO Execption bearbeiten
       e.printStackTrace();
     }
   }
 }
 /**
  * Wenn 'Save' gewaehlt wurde, wird aus Payee die ID gelesen und in R.string.column_wpid
  * eingefuegt. Ist diese ID nicht belegt, wurde ein (neuer) Text eingegeben. Dieser wird als
  * Partner angelegt und dessen ID benutzt
  */
 @Override
 protected void onActionFinishClicked() {
   MonMaAutoCompleteTextView actv =
       (MonMaAutoCompleteTextView) getView().findViewById(R.id.actvPayee);
   long id = actv.getSelectionID();
   if (id == NOID) {
     String partnername = actv.getText().toString();
     mUmsatz.put(R.string.column_partnername, partnername);
   } else {
     mUmsatz.put(R.string.column_wpid, id);
   }
   DBHelper db = DBHelper.getInstance();
   if (mUmsatz.isInserted()) {
     mUmsatz.update(db);
   } else {
     mUmsatz.insert(db);
   }
   Snackbar.make(getView(), getString(R.string.awlib_datensatzSaved), Snackbar.LENGTH_SHORT)
       .show();
   super.onActionFinishClicked();
 }
 @Override
 public void onViewCreated(View v, Bundle savedInstanceState) {
   super.onViewCreated(v, savedInstanceState);
   MonMaAutoCompleteTextView actv;
   for (int resID : viewResIDs) {
     View view = v.findViewById(resID);
     switch (resID) {
       case R.id.tvMemo:
         ((AWEditText) view).setOnTextChangedListener(this);
         break;
       case R.id.tvBtag:
         AWDateTextView dtv = (AWDateTextView) view;
         dtv.setOnDateChangedListener(this);
         break;
       case R.id.tvAmount:
         CalculatorTextCurrency ctc = (CalculatorTextCurrency) view;
         ctc.setOnLongValueChangedListener(this);
         if (mUmsatz.isUmbuchung() || mUmsatz.hasSplitBuchung()) {
           ctc.setFocusable(false);
         }
         break;
       case R.id.actvPayee:
         actv = (MonMaAutoCompleteTextView) view;
         actv.initialize(MonMaAutoCompleteTextView.Target.Payee, this);
         actv.setText(mUmsatz.getPartnerName());
         break;
       case R.id.actvCat:
         if (mUmsatz.hasSplitBuchung() || mUmsatz.isUmbuchung()) {
           EditText et = (EditText) view;
           et.setFocusable(false);
         }
         break;
     }
   }
   bindView();
   if (showDetails) {
     showDetails = false;
     showSplitBuchung();
   }
 }
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
   switch (item.getItemId()) {
     case R.id.menu_item_SplitBuchung:
       mUmsatz.removeGegenbuchung();
       showSplitBuchung();
       return true;
     case R.id.menu_item_delete_Buchung:
       final DBHelper db = DBHelper.getInstance();
       AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
       // Add the buttons
       final SplittableCashUmsatz umsatz = mUmsatz;
       builder.setPositiveButton(
           R.string.btnDelete,
           new DialogInterface.OnClickListener() {
             @Override
             public void onClick(DialogInterface dialog, int id) {
               umsatz.delete(db);
               Snackbar.make(
                       getView(),
                       getString(R.string.awlib_datensatzDeleted),
                       Snackbar.LENGTH_SHORT)
                   .show();
               FragmentAbstractBuchung.super.onActionFinishClicked();
             }
           });
       builder.setNegativeButton(
           R.string.btnVerwerfen,
           new DialogInterface.OnClickListener() {
             @Override
             public void onClick(DialogInterface dialog, int id) {
               // nix tun
             }
           });
       builder.setTitle(R.string.BankUmsatzLoeschen);
       AlertDialog dialog = builder.create();
       dialog.show();
       return true;
   }
   return super.onOptionsItemSelected(item);
 }
 @Override
 public void onDateChanged(AWDateTextView view, Calendar cal) {
   mUmsatz.put(R.string.column_btag, view.getDate());
 }