Revision 7b17371b
Von admin vor etwa 4 Jahren hinzugefügt
| 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
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