-
Notifications
You must be signed in to change notification settings - Fork 1
/
ECTEImport.cpp
171 lines (134 loc) · 4.4 KB
/
ECTEImport.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*//////////////////////////////////////////////////////////////////////////////
// Name: ecteimport.cpp
// Purpose: DLL main file, includes exports for EasyCash&Tax plugin infrastructure
// Author: Ruediger Herrmann
// Copyright: (c) Ruediger Herrmann
//////////////////////////////////////////////////////////////////////////////*/
#include "stdafx.h"
#include <afxdllx.h>
#include "DlgImportDescr.h"
#include "DlgImportStatus.h"
#include "Import.h"
#include "Module.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern "C" int APIENTRY DllMain ( HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved )
{
if ( dwReason == DLL_PROCESS_ATTACH )
{
TRACE0("ECTEIMPORT.DLL Initializing!\n");
if ( !AfxInitExtensionModule ( ECTEImportDLL, hInstance ) )
return 0;
new CDynLinkLibrary ( ECTEImportDLL );
}
else
if ( dwReason == DLL_PROCESS_DETACH )
{
TRACE0 ("ECTEIMPORT.DLL Terminating!\n");
AfxTermExtensionModule ( ECTEImportDLL );
}
return 1;
}
// Callback funktionen, die von EasyCT.exe aufgerufen werden:
extern "C" __declspec(dllexport) LPCSTR ECTE_Init(LPCSTR version);
extern "C" __declspec(dllexport) void ECTE_Exit(void *unused);
extern "C" __declspec(dllexport) void ECTE_OpenDocument(CEasyCashDoc *pDoc);
extern "C" __declspec(dllexport) void ECTE_UpdateDocument(CEasyCashDoc *pDoc);
extern "C" __declspec(dllexport) void ECTE_CloseDocument(CEasyCashDoc *pDoc);
extern "C" __declspec(dllexport) void ECTE_Menu(CEasyCashDoc *pDoc);
// Wird von der ECT-Applikationsklasse bei OnInitInstance direkt
// nach dem Laden der DLL aufgerufen.
// 'version' enthält die Versionsnummer der aufrufenden EasyCT.exe
// in der Form (Beispiel) "v1.09"
extern "C" LPCSTR ECTE_Init ( LPCSTR version )
{
int major = atoi ( strchr ( version, 'v') + 1 );
int minor = atoi ( strchr ( version, '.') + 1 );
int majorminor = major * 100 + minor;
if ( majorminor < 109 )
{
AfxMessageBox ( IDS_PLUGIN_VERSIONERROR, MB_OK | MB_ICONSTOP );
return "";
}
// Name des Eintrages im Erweiterungs-Menü
// MenuItemName ist in modules.h definiert
LoadString ( ECTEImportDLL.hResource, IDS_PLUGIN_MENUENTRY, MenuItemName, sizeof ( MenuItemName ) / sizeof ( TCHAR ) );
return MenuItemName;
}
// Wird von der ECT-Applikationsklasse bei OnExitInstance aufgerufen bevor EasyCT beendet wird.
extern "C" void ECTE_Exit ( void *unused )
{
return;
}
// wird von der CDocument-Klasse OnNewDocument und OnOpenDocument aufgerufen
extern "C" void ECTE_OpenDocument ( CEasyCashDoc *pDoc )
{
return;
}
// wird von der CView-Klasse OnUpdate aufgerufen, wenn sich das Dokument ändert
extern "C" void ECTE_UpdateDocument ( CEasyCashDoc *pDoc )
{
return;
}
// wird von der CDocument-Klasse OnCloseDocument aufgerufen
extern "C" void ECTE_CloseDocument ( CEasyCashDoc *pDoc )
{
return;
}
// wird von der CView-Klasse bei der Anwahl des Menüpunktes im plug-in Menü aufgerufen
extern "C" void ECTE_Menu ( CEasyCashDoc *pDoc )
{
// no document, no work!
if ( !pDoc )
return;
// declare vars
CImport Import;
CImportParamsList ImportParamsList;
CDlgImportDescr *StandardDlg = NULL;
int Res;
// load settings from file
if ( !ImportParamsList.LoadFromIniFile() )
{
// display error message and remove the eventually already loaded items
AfxMessageBox ( IDS_ERROR_LOADFROMINIFILE );
ImportParamsList.RemoveAll();
}
// init CImport
Import.SetDoc ( pDoc );
Import.SetParams ( NULL );
StandardDlg = new CDlgImportDescr ( NULL );
StandardDlg->SetDoc ( pDoc );
StandardDlg->SetImportParamsList ( &ImportParamsList );
Res = StandardDlg->DoModal();
if ( Res == IDOK )
Import.AssignParams ( StandardDlg->GetParams() );
delete StandardDlg;
// save settings
if ( !ImportParamsList.SaveToIniFile () )
AfxMessageBox ( IDS_ERROR_SAVETOINIFILE );
// user pressed OK: so do import the stuff
if ( Res == IDOK )
{
// set wait cursor
AfxGetApp()->BeginWaitCursor();
// run import
if ( Import.Execute() )
{
CString Msg;
Msg.Format ( IDS_IMPORTSUCCESFUL, Import.GetImportCount() );
AfxMessageBox ( Msg, MB_OK | MB_ICONINFORMATION );
pDoc->UpdateAllViews ( NULL, 0, NULL );
}
else
{
CDlgImportStatus StatusDlg;
StatusDlg.SetMessages ( Import.GetErrors() );
StatusDlg.DoModal();
}
// reset wait cursor
AfxGetApp()->EndWaitCursor();
}
}