Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 7b17371b

Von admin vor fast 4 Jahren hinzugefügt

  • ID 7b17371bdebfc212e7a41cfea4aa9f32ee4804d9
  • Vorgänger ae48f0cc
  • Nachfolger 66e0e92e

Allow to repeat transfers as planned transfers.

- moved transfers code from modtabpage to module
- transfers page now has a button to create a planned transfer from an
existing transfer

Unterschiede anzeigen:

src/fox/lib/modules/transfers/fm_transfers.cpp
bool FM_Transfers::mkAndAddNewPlannedTransfer(FXWindow *parentWindow, int tt)
{
FF_App *app;
AE_BOOK *b;
AB_BANKING *ab;
app=dynamic_cast<FF_App *>(getApp());
b=app->getBook();
ab=app->getBanking();
if (b && ab) {
AE_STATEMENT *st;
int rv;
bool rb;
GWEN_DATE *ti;
st=AE_Statement_new();
ti=GWEN_Date_CurrentDate();
AE_Statement_SetDate(st, ti);
GWEN_Date_free(ti);
AE_Statement_SetGroupId(st, 0);
AE_Statement_SetTextKey(st, 51);
AE_Statement_SetFlags(st, tt);
switch (tt) {
case AE_STATEMENT_FLAGS_XFER_TYPE_STD_XFER:
rb=FF_EditTransfer::editSingleTransfer(app, FF_TransferEdit::EDITMODE_EASY,
parentWindow,
I18N("Prepare Bank Transfer"), st,
DECOR_ALL |
FF_EditTransfer::OPTS_SHOWLOADTMPL |
FF_EditTransfer::OPTS_SHOWSAVETMPL |
FF_EditTransfer::OPTS_SHOWDATE);
break;
case AE_STATEMENT_FLAGS_XFER_TYPE_INT_XFER:
rb=FF_EditTransfer::editInternalTransfer(app, FF_TransferEdit::EDITMODE_EASY,
parentWindow,
I18N("Prepare Internal Bank Transfer"), st,
DECOR_ALL |
FF_EditTransfer::OPTS_SHOWLOADTMPL |
FF_EditTransfer::OPTS_SHOWSAVETMPL |
FF_EditTransfer::OPTS_SHOWDATE);
break;
case AE_STATEMENT_FLAGS_XFER_TYPE_SEPA_XFER:
rb=FF_EditTransfer::editSepaTransfer(app, FF_TransferEdit::EDITMODE_EASY,
parentWindow,
I18N("Prepare SEPA Transfer"), st,
DECOR_ALL |
FF_EditTransfer::OPTS_SHOWLOADTMPL |
FF_EditTransfer::OPTS_SHOWSAVETMPL |
FF_EditTransfer::OPTS_SHOWDATE);
break;
}
if (rb) {
/* store in database before actually enqueing it, so that we get an id to set
* in AB_Transaction_SetIdForApplication() */
/* create a copy of the initial statement */
rv=AE_Book_AddStatement(b, AE_Book_TableType_BankTransferPlanned, st, 1);
if (rv<0) {
DBG_ERROR(0, "Unable to add statement (%d)", rv);
FXMessageBox::error(parentWindow, MBOX_OK,
I18N("Database Error"),
I18N("Error adding transfer (%d)"), rv);
AE_Statement_free(st);
return false;
}
else {
app->signalDbReload(AE_Book_TableType_BankTransferPlanned);
}
}
AE_Statement_free(st);
}
else {
DBG_ERROR(0, "No book/AqBanking");
FXMessageBox::error(parentWindow, MBOX_OK,
I18N("Banking Error"),
"%s",
I18N("Database not open or AqBanking not available"));
return false;
}
return true;
}
bool FM_Transfers::mkAndAddPlannedTransferFromTransfer(FXWindow *parentWindow, const AE_STATEMENT *transfer)
{
if (transfer) {
FF_App *app;
AE_BOOK *b;
AB_BANKING *ab;
app=dynamic_cast<FF_App *>(getApp());
b=app->getBook();
ab=app->getBanking();
if (b && ab) {
AE_STATEMENT *cpy;
int rv;
GWEN_DATE *ti;
bool rb;
/* always work on copy */
cpy=AE_Statement_dup(transfer);
ti=GWEN_Date_CurrentDate();
AE_Statement_SetDate(cpy, ti);
GWEN_Date_free(ti);
switch (AE_Statement_GetFlags(cpy) & AE_STATEMENT_FLAGS_XFER_TYPE_MASK) {
case AE_STATEMENT_FLAGS_XFER_TYPE_STD_XFER:
rb=FF_EditTransfer::editSingleTransfer(app, FF_TransferEdit::EDITMODE_EASY,
parentWindow,
I18N("Repeat Bank Transfer"), cpy,
DECOR_ALL |
FF_EditTransfer::OPTS_SHOWLOADTMPL |
FF_EditTransfer::OPTS_SHOWSAVETMPL);
break;
case AE_STATEMENT_FLAGS_XFER_TYPE_INT_XFER:
rb=FF_EditTransfer::editInternalTransfer(app, FF_TransferEdit::EDITMODE_EASY,
parentWindow,
I18N("Repeat Internal Bank Transfer"), cpy,
DECOR_ALL |
FF_EditTransfer::OPTS_SHOWLOADTMPL |
FF_EditTransfer::OPTS_SHOWSAVETMPL);
break;
case AE_STATEMENT_FLAGS_XFER_TYPE_SEPA_XFER:
rb=FF_EditTransfer::editSepaTransfer(app, FF_TransferEdit::EDITMODE_EASY,
parentWindow,
I18N("Repeat SEPA Transfer"), cpy,
DECOR_ALL |
FF_EditTransfer::OPTS_SHOWLOADTMPL |
FF_EditTransfer::OPTS_SHOWSAVETMPL);
break;
default:
DBG_ERROR(0, "Unexpected transfer type (%d)",
AE_Statement_GetFlags(cpy) & AE_STATEMENT_FLAGS_XFER_TYPE_MASK);
FXMessageBox::error(parentWindow, MBOX_OK,
I18N("Internal Error"),
I18N("Unexpected transfer type (%d)"),
AE_Statement_GetFlags(cpy) & AE_STATEMENT_FLAGS_XFER_TYPE_MASK);
rb=false;
break;
}
if (rb) {
rv=AE_Book_AddStatement(b, AE_Book_TableType_BankTransferPlanned, cpy, 1);
if (rv<0) {
DBG_ERROR(0, "Unable to add statement (%d)", rv);
FXMessageBox::error(parentWindow, MBOX_OK,
I18N("Database Error"),
I18N("Error adding transfer (%d)"), rv);
return false;
}
else {
app->signalDbReload(AE_Book_TableType_BankTransferPlanned);
}
}
AE_Statement_free(cpy);
}
else {
DBG_ERROR(0, "No book/AqBanking");
FXMessageBox::error(parentWindow, MBOX_OK,
I18N("Banking Error"),
"%s",
I18N("Database not open or AqBanking not available"));
return false;
}
}
return true;
}
src/fox/lib/modules/transfers/fm_transfers.hpp
bool editAndAddTransfer(FXWindow *parentWindow, AE_STATEMENT *transfer);
bool addAndEnqueueTransfer(FXWindow *parentWindow, AE_STATEMENT *statement);
bool mkAndAddNewPlannedTransfer(FXWindow *parentWindow, int tt);
bool mkAndAddPlannedTransferFromTransfer(FXWindow *parentWindow, const AE_STATEMENT *transfer);
long onCmdMkTransferFromStatement(FXObject *sender, FXSelector sel, void *ptr);
src/fox/lib/modules/transfers/fm_transferstmpage.cpp
/****************************************************************************
* This file is part of the project AqFinance.
* AqFinance (c) by 2009 Martin Preuss, all rights reserved.
* AqFinance (c) by 2021 Martin Preuss, all rights reserved.
*
* The license for this file can be found in the file COPYING which you
* should have received along with this file.
......
#include "fm_transferstmpage.hpp"
#include "fm_transferpage.hpp"
#include "fm_transfers.hpp"
#include "ff_transfertree.hpp"
#include "ff_edittransfergroup.hpp"
#include "ff_edittransfer.hpp"
......
FXMAPFUNC(SEL_COMMAND, FM_TransferStmPage::ID_BUTTON_REPEAT_TRANSFER,
FM_TransferStmPage::onCmdRepeatTransfer),
FXMAPFUNC(SEL_COMMAND, FM_TransferStmPage::ID_BUTTON_MKPLANNED_FROM_TRANSFER,
FM_TransferStmPage::onCmdMkPlannedTransfer),
FXMAPFUNC(SEL_COMMAND, FM_TransferStmPage::ID_BUTTON_NEW_STD_TRANSFER,
FM_TransferStmPage::onCmdNewStdTransfer),
FXMAPFUNC(SEL_COMMAND, FM_TransferStmPage::ID_BUTTON_NEW_INT_TRANSFER,
......
, m_newIntTransferButton(NULL)
, m_newSepaTransferButton(NULL)
, m_repeatTransferButton(NULL)
, m_mkPlannedTransferButton(NULL)
, m_needRebuild(true)
, m_isVisible(false)
{
......
this, ID_BUTTON_REPEAT_TRANSFER,
BUTTON_NORMAL);
m_mkPlannedTransferButton=new THEMEBUTTON(vf,
I18N("Copy As Planned Transfer"),
NULL,
this, ID_BUTTON_MKPLANNED_FROM_TRANSFER,
BUTTON_NORMAL);
}
......
, m_newIntTransferButton(NULL)
, m_newSepaTransferButton(NULL)
, m_repeatTransferButton(NULL)
,m_mkPlannedTransferButton(NULL)
, m_needRebuild(false)
{
}
......
long FM_TransferStmPage::onCmdMkPlannedTransfer(FXObject *, FXSelector, void *)
{
AE_STATEMENT *st;
st=m_transferTree->getCurrentTransfer();
if (st) {
FM_Transfers *module=dynamic_cast<FM_Transfers *>(getModule());
if (module) {
if (!module->mkAndAddPlannedTransferFromTransfer(this, st)) {
DBG_INFO(AE_LOGDOMAIN, "here");
}
}
}
return 1;
}
int FM_TransferStmPage::changeStatusOfCurrentTransfer(AE_STATEMENT_STATUS sst)
{
src/fox/lib/modules/transfers/fm_transferstmpage.hpp
ID_BUTTON_STATUS_PENDING,
ID_BUTTON_STATUS_RECONCILED,
ID_BUTTON_MKPLANNED_FROM_TRANSFER,
ID_LAST
};
......
long onCmdNewInternalTransfer(FXObject*, FXSelector, void*);
long onCmdNewSepaTransfer(FXObject*, FXSelector, void*);
long onCmdMkPlannedTransfer(FXObject *, FXSelector, void *);
long onCmdAutoRecon(FXObject*, FXSelector, void*);
long onTreeChanged(FXObject*, FXSelector, void*);
......
FXButton *m_newIntTransferButton;
FXButton *m_newSepaTransferButton;
FXButton *m_repeatTransferButton;
FXButton *m_mkPlannedTransferButton;
FXTextField *m_matcher;

Auch abrufbar als: Unified diff