Merge branch 'R12.00.1244' of http://10.65.20.33/sirio/CAMPO/campo into R12.00.1244

This commit is contained in:
Alessandro Bonazzi 2023-03-29 23:57:42 +02:00
commit 156ea4aadd
36 changed files with 3159 additions and 56 deletions

View File

@ -209,6 +209,7 @@
<ClCompile Include="..\src\f9\f90400.cpp" />
<ClCompile Include="..\src\f9\f90200.cpp" />
<ClCompile Include="..\src\f9\f90500.cpp" />
<ClCompile Include="..\src\f9\f90600.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\f9\f90.h" />
@ -222,6 +223,11 @@
<ClInclude Include="..\src\f9\f901tab.h" />
<ClInclude Include="..\src\f9\f90200a.h" />
<ClInclude Include="..\src\f9\f90500.h" />
<ClInclude Include="..\src\f9\f90600.h" />
<ClInclude Include="..\src\f9\f90600a.h" />
<ClInclude Include="..\src\f9\f90600b.h" />
<ClInclude Include="..\src\f9\f90600c.h" />
<ClInclude Include="..\src\f9\f90600d.h" />
</ItemGroup>
<ItemGroup>
<MskCompiler Include="..\src\f9\f90100a.uml" />
@ -232,6 +238,9 @@
<MskCompiler Include="..\src\f9\f90300a.uml" />
<MskCompiler Include="..\src\f9\f90300b.uml" />
<MskCompiler Include="..\src\f9\f90500a.uml" />
<MskCompiler Include="..\src\f9\f90600a.uml" />
<MskCompiler Include="..\src\f9\f90600b.uml" />
<MskCompiler Include="..\src\f9\f90600d.uml" />
</ItemGroup>
<ItemGroup>
<SqlCompiler Include="..\src\f9\sql\f90100.sql">
@ -247,14 +256,6 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</SqlCompiler>
</ItemGroup>
<ItemGroup>
<DirCompiler Include="..\src\f9\f181.dir" />
<DirCompiler Include="..\src\f9\f183.dir" />
</ItemGroup>
<ItemGroup>
<TrrCompiler Include="..\src\f9\f181.trr" />
<TrrCompiler Include="..\src\f9\f183.trr" />
</ItemGroup>
<ItemGroup>
<MenCompiler Include="..\src\fp\fpmenu.men" />
</ItemGroup>

View File

@ -19,9 +19,6 @@
<Filter Include="SQL">
<UniqueIdentifier>{28870b23-e896-4312-855b-049305092f1d}</UniqueIdentifier>
</Filter>
<Filter Include="Recdesc">
<UniqueIdentifier>{95c95f84-ca93-4c2f-b1cf-e94922dfa7ef}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\f9\f90.h">
@ -57,6 +54,21 @@
<ClInclude Include="..\src\f9\f90500.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\f9\f90600.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\f9\f90600a.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\f9\f90600b.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\f9\f90600d.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\f9\f90600c.h">
<Filter>Headers</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\f9\f90.cpp">
@ -80,6 +92,9 @@
<ClCompile Include="..\src\f9\f90500.cpp">
<Filter>Sources</Filter>
</ClCompile>
<ClCompile Include="..\src\f9\f90600.cpp">
<Filter>Sources</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<MskCompiler Include="..\src\f9\f90100a.uml">
@ -106,6 +121,15 @@
<MskCompiler Include="..\src\f9\f90500a.uml">
<Filter>Masks</Filter>
</MskCompiler>
<MskCompiler Include="..\src\f9\f90600a.uml">
<Filter>Masks</Filter>
</MskCompiler>
<MskCompiler Include="..\src\f9\f90600b.uml">
<Filter>Masks</Filter>
</MskCompiler>
<MskCompiler Include="..\src\f9\f90600d.uml">
<Filter>Masks</Filter>
</MskCompiler>
</ItemGroup>
<ItemGroup>
<SqlCompiler Include="..\src\f9\sql\f90100.sql">
@ -118,22 +142,6 @@
<Filter>SQL</Filter>
</SqlCompiler>
</ItemGroup>
<ItemGroup>
<DirCompiler Include="..\src\f9\f181.dir">
<Filter>Recdesc</Filter>
</DirCompiler>
<DirCompiler Include="..\src\f9\f183.dir">
<Filter>Recdesc</Filter>
</DirCompiler>
</ItemGroup>
<ItemGroup>
<TrrCompiler Include="..\src\f9\f181.trr">
<Filter>Recdesc</Filter>
</TrrCompiler>
<TrrCompiler Include="..\src\f9\f183.trr">
<Filter>Recdesc</Filter>
</TrrCompiler>
</ItemGroup>
<ItemGroup>
<MenCompiler Include="..\src\fp\fpmenu.men">
<Filter>Menu</Filter>

4
cd/test/ba1254.txt Normal file
View File

@ -0,0 +1,4 @@
recdesc\f23.trr
recdesc\f23.dir
aggiornata la tabella MOV con un campo nuovo per la gestione dell'archiviazione integrazioni

32
cd/test/ba1254a.ini Normal file
View File

@ -0,0 +1,32 @@
[Main]
Demo=0
[ba0]
File(286) = recdesc\f23.dir|X
File(287) = recdesc\f23.trr|X
Patch = 1254
Versione = 21511200
[ba99]
Kill(0) = wxmsw240.dll|x
Kill(1) = batbsce.txt|x
Kill(2) = bastfsc.rep|x
Kill(3) = bastfsc.msk|x
Kill(4) = bastcms.msk|x
Kill(5) = bastcms.rep|x
Kill(6) = bastuue.rep|x
Kill(7) = bastuue.msk|x
[ba]
Data = 29-03-2023
Descrizione = Base
Dischi = 1
Moduli = sy
OEM =
Patch = 1254
PostProcess = bainst -0 BA
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/ba1254a1.zip Normal file

Binary file not shown.

3
cd/test/ce1254.txt Normal file
View File

@ -0,0 +1,3 @@
ce3.exe
Il registro cespiti sintetico non arrotondava bene le percentuali di ammortamento

24
cd/test/ce1254a.ini Normal file
View File

@ -0,0 +1,24 @@
[Main]
Demo=0
[ce3]
File(82) = ce3.exe|X
Patch = 1254
Versione = 21511200
[ce99]
Kill(0) = ce3900b.rep|x
[ce]
Data = 19-07-2022
Descrizione = Cespiti
Dischi = 1
Moduli = ba,cg
OEM =
Patch = 1254
PostProcess = bainst -0 CE
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/ce1254a1.zip Normal file

Binary file not shown.

7
cd/test/f91254.txt Normal file
View File

@ -0,0 +1,7 @@
f90600a.msk
f90600b.msk
f90600d.msk
f90.exe
fpmenu.men
Primo rilascio dell'archiviazione integrazioni

23
cd/test/f91254a.ini Normal file
View File

@ -0,0 +1,23 @@
[Main]
Demo=0
[f90]
File(0) = f90.exe|X
File(10) = fpmenu.men|X
File(14) = f90600a.msk|X
File(15) = f90600b.msk|X
File(16) = f90600d.msk|X
Patch = 1254
Versione = 21511200
[f9]
Data = 29-03-2023
Descrizione = Archiviazione Sostitutiva
Dischi = 1
Moduli = fp
OEM =
Patch = 1254
PostProcess =
PreProcess =
Versione = 21511200

BIN
cd/test/f91254a1.zip Normal file

Binary file not shown.

3
cd/test/fp1254.txt Normal file
View File

@ -0,0 +1,3 @@
fp0.exe
Rimossa dalla fatturazione la forzatura di alcune date (DATAPENALE, DATLIMITEPAGAMENTO etc)

22
cd/test/fp1254a.ini Normal file
View File

@ -0,0 +1,22 @@
[Main]
Demo=0
[fp0]
File(0) = fp0.exe|X
Patch = 1254
Versione = 21511200
[fp99]
Kill(0) = fppro.msk|x
[fp]
Data = 28-03-2023
Descrizione = Fattura Elettronica
Dischi = 1
Moduli = cg,ve
OEM =
Patch = 1254
PostProcess =
PreProcess =
Versione = 21511200

BIN
cd/test/fp1254a1.zip Normal file

Binary file not shown.

View File

@ -1,3 +1,3 @@
23
0
$mov|0|0|634|0|Movimenti di prima nota|||
$mov|0|0|714|0|Movimenti di prima nota|||

View File

@ -1,5 +1,5 @@
23
67
68
ANNOES|9|4|0|Codice esercizio
NUMREG|3|7|0|Numero di operazione
DATAREG|5|8|0|Data operazione
@ -67,6 +67,7 @@ IDDOCSDI|1|20|0|Identificativo documento SDI
DATADOCSDI|5|8|0|Data documento SDI
COLL_GOLEM|11|10|0|Documenti generici
CARTACEI|11|10|0|Documenti cartacei
KEYPAF|1|80|0|Chiavi del PAFW300 [KEYPRGINVIO;KEYHEADERFATT;KEYBODYFATT]
4
NUMREG|
DATAREG+NUMREG|X

View File

@ -218,6 +218,8 @@ bool TFppro::associa_mov(const long numreg)
return ok;
}
const TString & TFppro::get_tipoprot()
{
TString query;

View File

@ -85,6 +85,7 @@ public:
TFppro(TToken_string& keys) : TFppro() { set_keys(keys); }
};
class TProtocollo : TObject
{
TString _tipoprot;

View File

@ -14,6 +14,7 @@ int main(int argc, char** argv)
case 2: rt = f90300(argc, argv); break; // Gestione documenti cartacei
case 3: rt = f90400(argc, argv); break; // Test classi
case 4: rt = f90500(argc, argv); break; // Ripristino archiviazioni
case 5: rt = f90600(argc, argv); break; // Archiviazione Integrazioni
}
return rt;
}

View File

@ -6,5 +6,6 @@ int f90200(int argc, char* argv[]);
int f90300(int argc, char* argv[]);
int f90400(int argc, char* argv[]);
int f90500(int argc, char* argv[]);
int f90600(int argc, char* argv[]);
#endif // _F90_H_

View File

@ -1255,8 +1255,6 @@ TApri_estr_msk::TApri_estr_msk() : TAutomask("f90100d.msk"), _provv(true), _tipo
}
////////////////////////////////////////////////////////
// TF9_app
////////////////////////////////////////////////////////

View File

@ -4,6 +4,7 @@
#define B_SHOWESTR 203
#define B_SHOWESCL 204
#define F_SEL 101
#define F_ARCH_B 102
#define F_IDESTR 103

1187
src/f9/f90600.cpp Normal file

File diff suppressed because it is too large Load Diff

188
src/f9/f90600.h Normal file
View File

@ -0,0 +1,188 @@
#ifndef _F90600_H_
#define _F90600_H_
#include "mask.h"
#include "execp.h"
#include "f90600a.h"
#include "mov.h"
#include "automask.h"
#include "applicat.h"
#include "f9lib.h"
class TConfigIntf9_mask : public TAutomask
{
protected:
bool on_key(const KEY key);
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
// @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk)
TConfigIntf9_mask(const char* filename, int num = 0) : TAutomask(filename, num) {};
// @cmember Costruttore (crea una maschera vuota con i parametri dati)
TConfigIntf9_mask(const char* title, int pages, int cols, int rows, int xpos = -1, int ypos = -1) : TAutomask(title, pages, cols, rows, xpos, ypos) {};
};
class TApri_pacchetto_msk : public TAutomask
{
TString _idestr;
TDate _dataestr;
bool _provv;
char _tipodoc;
TString _statoestr;
TDate _datadal;
TDate _dataal;
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
//bool inall_handler() const;
//bool inescludi_handler() const;
//bool inselect_handler() const;
//void conferma_esclusi() const;
public:
void fill_estr() const;
void fill_res() const;
void set_from_estrazione(TToken_string& row_estrazione);
TApri_pacchetto_msk();
~TApri_pacchetto_msk() {}
};
class TArchInt_mask : public TAutomask
{
TApri_pacchetto_msk _inclusi_msk;
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
void load_sheet_causali(const TString& tipo_sel);
void open_apri_estr_win();
void fill() const;
void delete_pack(bool all = false);
void delete_estr_fld(const TString& idestr);
void controllo_errori();
void open_win_estr();
void open_win_conf();
bool save_conf(TMask& config_mask);
public:
TArchInt_mask();
~TArchInt_mask() {}
};
class Tf9IntEstrai_mask : public TMask
{
TEstrazione * _estrazione; // Oggetto estrazione in corso di elaborazione
void enable_fields(bool en = true);
TDate get_dataini() const { return get_date(ES_DATAINI); }
TDate get_dataend() const { return get_date(ES_DATAEND); }
char get_tipodoc() const { return get(ES_TIPODOC)[0]; }
TipoIVA get_tipoiva() const { return get_tipodoc() == 'A' ? iva_acquisti : iva_vendite; }
TString get_descr() const { return get(ES_DESCR); }
bool is_provviso() const { return get(ES_FLAGPROV)[0] == 'P'; }
/* Prepara l'estrazione caricando tutti i movimenti dato un periodo (data registrazione),
* e avvia la procedura di estrazione.
* [See TEstrazione::estrai()].
*/
int estrai();
/** Segna su DRD che l'estrazione e' in errore diag. gestionale. */
//void segna_in_errore() const;
bool causale_in_lista(const TString& cod_cau, TToken_string cau_list);
TToken_string select_causali(const TString& tipo_sdi, const char reg);
static bool estrai_handler(TMask_field& f, KEY key);
//static bool enable_handler(TMask_field& f, KEY key);
//static bool dataini_handler(TMask_field& f, KEY key);
//static bool dataend_handler(TMask_field& f, KEY key);
public:
Tf9IntEstrai_mask();
~Tf9IntEstrai_mask() { safe_delete(_estrazione); };
};
class TControlloIntegrazioni_mask : public TAutomask
{
TArray _controllo_mov; // Usare import_error_list().
char _ordin;
char _verso;
int _selected_mov;
bool _sel_esclusi;
bool _is_escluso;
TString _cod_soc;
TString _id_estr;
char _tipo_doc_err{};
TDate _datada;
TDate _dataa;
//Filter variables
TDate _flt_da_data;
TDate _flt_a_data;
TString4 _flt_tipodoc;
TString16 _flt_numdoc;
real _flt_tot_doc_da;
real _flt_tot_doc_a;
TString16 _flt_codforn;
TString _flt_ragsoc;
TString16 _flt_piva;
void associa();
bool associa_int_ven(const long numreg, TToken_string key_paf);
//void conferma_esclusi() const;
TArray& import_error_list();
void fill_sheets();
void fill_pafw300_sheet(bool filter = false);
TMask& get_win_filter();
void open_win_filter();
TToken_string* selected_mov();
TToken_string* selected_fat() const;
/** Gestisce la selezione multipla negli sheet di controllo movimenti */
//void selfatt(TOperable_field& o, long jolly) const;
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
public:
TControlloIntegrazioni_mask(const char* codsoc, const char* id_estr, bool esclusi = false);
};
class TArchiviazioneIntegrazioni : public TSkeleton_application
{
TArchInt_mask * _msk;
Tf9IntEstrai_mask * _estr_msk;
TArray _esclusi; // Vettore con i movimenti esclusi
public:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
TArray & esclusi() { return _esclusi; }
static const char* traduci_stato(const TString& cod);
void run_estr_msk() { _estr_msk->run(); }
TArchiviazioneIntegrazioni() {}
};
inline TArchiviazioneIntegrazioni& f9Int_app()
{
static TArchiviazioneIntegrazioni* app = nullptr;
if (app == nullptr)
app = (TArchiviazioneIntegrazioni*)&main_app();
return *app;
}
#endif //_F90600_H_

69
src/f9/f90600a.h Normal file
View File

@ -0,0 +1,69 @@
// Sheet Pacchetti gia' elaborati
#define S_ELAB 201
#define F_TEXT 202
#define B_SHOWESTR 203
#define B_SHOWESCL 204
#define F_SEL 101
#define F_ARCH_B 102
#define F_IDESTR 103
#define F_DATAESTR 104
#define F_PROV_B 105
#define F_TIPODOC 106
#define F_DATADAL 107
#define F_DATAAL 108
#define F_USER 109
#define F_STATESTR 110
#define F_DESCR_E 111
// Campi del vettore _movs per promemoria
// F_SEL 101
// F_NUMREG 102
// F_DATAREG 103
// F_DATADOC 104
// F_CODCAUS 105
// F_MESELIQ 106
// F_NUMDOC 107
// F_IMPTOTDOC 108
// F_FORN 109
// F_RAGSOC 110
// F_PROTIVA 111
// F_DESCR 112
// F_ESCLUDI 113
// F_ESCLUSO 114
// F_DESCRERR 115
// Campi maschera finestra runtime estrazione
#define ES_DATAINI 501
#define ES_DATAEND 502
#define ES_FLAGPROV 503
#define ES_TIPODOC 504
#define ES_DATEGROUP 505
#define ES_FLAGGROUP 506
#define ES_TIPOGROUP 507
#define ES_DESCGROUP 508
#define ES_DESCR 509
#define ES_DOCSDI 510
// Campi maschera configurazione
#define CF_CODGROUP 501
#define CF_CODSOC 502
#define CF_ADDRGROUP 503
#define CF_ADDRDOC 504
#define CF_ADDRDOCLOC 505
#define CF_ESTRGROUP 506
#define CF_CARTEXP 507
#define CF_LVLGROUP 508
#define CF_LVLOLD 509
#define CF_LVLNEW 510
#define CF_TABLEVEL 511
// Campi maschera descrizione estrazione
#define DES_TEXT 501
#define DES_GROUP 502
// Campi maschera esclusi
#define ESC_BESTR 501
#define ESC_BEXIT 502
#define ESC_SSHEE 503

155
src/f9/f90600a.uml Normal file
View File

@ -0,0 +1,155 @@
#include "f90600a.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_ELABORA 2 2
BEGIN
PROMPT 1 2 "Estrazione"
PICTURE TOOL_ELABORA
FLAGS ""
END
BUTTON DLG_DELREC 2 2
BEGIN
PROMPT 1 1 "~Elimina"
PICTURE TOOL_DELREC
END
BUTTON DLG_CONFIG 2 2
BEGIN
PROMPT 1 3 "Configurazione"
PICTURE TOOL_CONFIG
FLAGS ""
END
BUTTON DLG_FINDREC 2 2
BEGIN
PROMPT 1 4 "Controllo Estr."
PICTURE TOOL_PERMISSIONS
FLAGS ""
END
BUTTON B_SHOWESTR 2 2
BEGIN
PROMPT 1 5 "Apri Estr."
PICTURE BMP_EXPORT
FLAGS ""
END
BUTTON DLG_RECALC
BEGIN
PROMPT 1 6 "Ricarica"
PICTURE TOOL_CONVERT
FLAS ""
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT 1 7 ""
PICTURE 0
END
BUTTON B_SHOWESCL 2 2
BEGIN
PROMPT 1 8 "Mostra esclusi"
PICTURE TOOL_PERMISSIONS
END
#include <helpbar.h>
ENDPAGE
PAGE "Monitor Estrazioni" 0 2 0 0
TEXT F_TEXT
BEGIN
PROMPT 0 0 "@BElenco Pacchetti"
END
SPREADSHEET S_ELAB -1 -1
BEGIN
PROMPT 0 1 "Elenco pacchetti elaborati"
ITEM ""
ITEM "Archiviato@8"
ITEM "ID Estrazione@14"
ITEM "Data@8"
ITEM "Provv.@4"
ITEM "Tipo@8"
ITEM "dal@8"
ITEM "al@8"
ITEM "Utente@8"
ITEM "Stato estrazione@22"
ITEM "Descrizione@50"
END
ENDPAGE
ENDMASK
PAGE "Pacchetti" -1 -1 78 13
BOOLEAN F_SEL
BEGIN
PROMPT 1 1 ""
END
BOOLEAN F_ARCH_B
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
STRING F_IDESTR 18
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
BOOLEAN F_PROV_B
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
STRING F_DESCR_E 50
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
STRING F_TIPODOC 13
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
DATE F_DATADAL
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
DATE F_DATAAL
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
STRING F_USER 20
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
STRING F_DATAESTR 19
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
STRING F_STATESTR 38
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
ENDPAGE
ENDMASK

61
src/f9/f90600b.h Normal file
View File

@ -0,0 +1,61 @@
// Maschera controllo errori in comune con monitor e esclusi
// Sheet Pacchetti gia' elaborati
#define B_ASSOC 202
#define B_SELESCL 203
#define B_ESCL 204
#define B_ALLESCL 205
#define B_FILTER_CONF 208
#define B_FILTER_ON 209
#define B_FILTER_OFF 210
// Sheet movimenti da controllare
#define S_CONTROLLO 206
#define S_FPPRO 207
// Cambi maschera ordinamento sheet FPPRO
#define F_ORDER 301
#define F_VERSO 302
//Filtro FPPRO
#define F_FLTDATAGRP 310
#define F_FLTDATADA 311
#define F_FLTDATAA 312
#define F_FLTDOCGRP 313
#define F_FLTTIPODOC 314
#define F_FLTNUMDOC 315
#define F_FLTTOTDOCDA 316
#define F_FLTTOTDOCA 317
#define F_FLTFORNGRP 318
#define F_FLTCODFORN 319
#define F_FLTRAGSOC 320
#define F_FLTPIVA 321
#define F_CSEL 101
#define F_CNUMREG 102
#define F_CDATAREG 103
#define F_CDATADOC 104
#define F_CCODCAUS 105
#define F_CMESELIQ 106
#define F_CNUMDOC 107
#define F_CIMPTOTDOC 108
#define F_CFORN 109
#define F_CRAGSOC 110
#define F_CPROTIVA 111
#define F_CDESCR 112
#define F_CESCLUDI 113
#define F_CESCLUSO 114
#define F_CDESCRERR 115
// Sheet fatture FPPRO da associare
#define F_FSEL 101
#define F_FTIPODOC 102
#define F_FDATA 103
#define F_FNUMDOC 104
#define F_FIMPTOTDOC 105
#define F_FFORNITORE 106
#define F_FRAGSOC 107
#define F_FSTATOPIVA 108
#define F_FPIVA 109
#define F_FPROKEYS 110

316
src/f9/f90600b.uml Normal file
View File

@ -0,0 +1,316 @@
#include "f90600b.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON B_ASSOC 2 2
BEGIN
PROMPT 1 6 "Associa mov."
PICTURE TOOL_SAVEREC
FLAGS ""
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 1 ""
PICTURE 0
END
BUTTON B_SELESCL 2 2
BEGIN
PROMPT 1 8 "Sel. esclusi"
PICTURE TOOL_MULTISEL
FLAGS ""
END
BUTTON B_ESCL 2 2
BEGIN
PROMPT 1 7 "Conf. esclusi"
PICTURE TOOL_WARNING
FLAGS ""
END
BUTTON B_ALLESCL 2 2
BEGIN
PROMPT 1 7 "Sel. tutti"
PICTURE TOOL_MULTISEL
FLAGS ""
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 1 ""
PICTURE 0
END
BUTTON B_FILTER_CONF 2 2
BEGIN
PROMPT 1 5 "Impostaz. Filtro"
PICTURE TOOL_ELABORA
FLAGS ""
END
BUTTON B_FILTER_ON 2 2
BEGIN
PROMPT 1 5 "Filtro ON"
PICTURE TOOL_CHECK
FLAGS ""
END
BUTTON B_FILTER_OFF 2 2
BEGIN
PROMPT 1 5 "Filtro OFF"
PICTURE TOOL_CHECK
FLAGS ""
END
#include <helpbar.h>
ENDPAGE
PAGE "Elenco di controllo" -1 -1 78 13
TEXT DLG_NULL
BEGIN
PROMPT 0 0 "Movimenti da controllare"
END
SPREADSHEET S_CONTROLLO -1 10
BEGIN
PROMPT 0 1 "Movimenti da controllare"
ITEM " "
ITEM "Numero\nReg.@8"
ITEM "Data\nReg.@8"
ITEM "Data\nDoc.@8"
ITEM "Codice\nCaus.@8"
ITEM "Mese\nliquidazione@8"
ITEM "Numero\nDocumento@8"
ITEM "Totale\nDocumento@8"
ITEM "Cliente/\nFornitore@8"
ITEM "Ragione\nSociale@8"
ITEM "Cod. regis./\nprot.IVA@8"
ITEM "Descrizione@8"
ITEM "ESCLUDI@5"
ITEM "ESCLUSO@6"
ITEM "Descrizione\nErrore"
END
TEXT DLG_NULL
BEGIN
PROMPT 0 12 "Fatture el. in ingresso"
END
SPREADSHEET S_FPPRO -1 -1
BEGIN
PROMPT 0 13 "Movimenti da controllare"
ITEM " "
ITEM "Tipo Doc."
ITEM "Data@8"
ITEM "Num. Doc.@12"
ITEM "Tot. Doc.@9"
ITEM "Cliente@20"
ITEM "Fornitore@20"
ITEM "Stato P.IVA"
ITEM "P.IVA@8"
ITEM "Chiavi PAF@60"
END
ENDPAGE
ENDMASK
PAGE "Controllo" -1 -1 78 13
BOOLEAN F_CSEL
BEGIN
PROMPT 1 1 ""
END
NUMERIC F_CNUMREG 7
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
DATA F_CDATAREG
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
DATA F_CDATADOC
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
STRING F_CCODCAUS 3
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
NUMERIC F_CMESELIQ 2
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
STRING F_CNUMDOC 50
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
NUMERIC F_CIMPTOTDOC 15 2
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
NUMERIC F_CFORN 6
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
STRING F_CRAGSOC 80
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
STRING F_CPROTIVA 10
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
STRING F_CDESCR 50
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
BOOLEAN F_CESCLUDI
BEGIN
PROMPT 1 1 "Escludi"
FLAGS "D"
END
STRING F_CESCLUSO 2
BEGIN
PROMPT 1 1 "ESCLUSO"
FLAG "D"
END
STRING F_CDESCRERR 110
BEGIN
PROMPT 1 1 "DESCRIZIONE ERRORE"
FLAG "D"
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_USER 2 2
BEGIN
PROMPT 1 1 "Collega"
PICTURE TOOL_LINK
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 0 ""
PICTURE 0
END
BUTTON DLG_QUIT 2 2
BEGIN
PROMPT 3 1 "Fine"
MESSAGE EXIT,K_QUIT
PICTURE TOOL_QUIT
END
ENPAGE
ENDMASK
PAGE "Passive" -1 -1 78 13
BOOLEAN F_FSEL
BEGIN
PROMPT 1 1 ""
END
STRING F_FTIPODOC 4
BEGIN
PROMPT 1 1 " "
FLAGS "D"
END
DATA F_FDATA
BEGIN
PROMPT 1 1 " "
FLAGS "D"
END
STRING F_FNUMDOC 20
BEGIN
PROMPT 1 1 " "
FLAGS "D"
END
NUMERIC F_FIMPTOTDOC 15 2
BEGIN
PROMPT 1 1 " "
FLAGS "D"
END
STRING F_FFORNITORE 80
BEGIN
PROMPT 1 1 " "
FLAGS "D"
END
STRING F_FRAGSOC 80
BEGIN
PROMPT 1 1 " "
FLAGS "D"
END
STRING F_FSTATOPIVA 2
BEGIN
PROMPT 1 1 " "
FLAGS "D"
END
STRING F_FPIVA 15
BEGIN
PROMPT 1 1 " "
FLAGS "D"
END
STRING F_FPROKEYS 80
BEGIN
PROMPT 1 1 " "
FLAGS "D"
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 0 ""
PICTURE 0
END
BUTTON DLG_QUIT 2 2
BEGIN
PROMPT 3 1 "Fine"
MESSAGE EXIT,K_QUIT
PICTURE TOOL_QUIT
END
ENPAGE
ENDMASK

17
src/f9/f90600c.h Normal file
View File

@ -0,0 +1,17 @@
#define S_ESCL 201
#define F_ETEXT 202
#define B_ESTRAI 203
// Elenco movimenti esclusi
#define FE_SEL 101
#define FE_NUMREG 102
#define FE_DATAREG 103
#define FE_DATADOC 104
#define FE_CODCAUS 105
#define FE_MESELIQ 106
#define FE_NUMDOC 107
#define FE_IMPTOTDOC 108
#define FE_FORN 109
#define FE_RAGSOC 110
#define FE_PROTIVA 111
#define FE_DESCR 112

48
src/f9/f90600d.h Normal file
View File

@ -0,0 +1,48 @@
#define S_INCL 201
#define F_ETEXT 202
#define B_ISELESCL 203
#define B_IESCL 204
#define B_IALLESCL 205
#define F_IIDESTR 206
#define F_IDATA 207
#define F_IPROV 208
#define F_ITIPOD 209
#define F_ISTATOESTR 210
#define F_IDAL 211
#define F_IAL 212
#define S_RES 301
// Elenco movimenti inclusi
#define FI_SEL 101
#define FI_NUMREG 102
#define FI_DATAREG 103
#define FI_DATADOC 104
#define FI_CODCAUS 105
#define FI_TIPOMOV 106
#define FI_MESELIQ 107
#define FI_NUMDOC 108
#define FI_IMPTOTDOC 109
#define FI_FORN 110
#define FI_RAGSOC 111
#define FI_PROTIVA 112
#define FI_DESCR 113
#define FI_IESCLUDI 114
#define FI_IESCLUSO 115
// Elenco risultato movimenti (S_RES)
#define F_RSEL 101
#define F_RNUMREG 102
#define F_RDATAREG 103
#define F_RDATADOC 104
#define F_RTIPODOCSDI 105
#define F_RCODCAUS 106
#define F_RTIPOMOV 107
#define F_RMESELIQ 108
#define F_RNUMDOC 109
#define F_RIMPTOTDOC 110
#define F_RFORN 111
#define F_RRAGSOC 112
#define F_RPROTIVA 113
#define F_RDESCR 114
#define F_RDESCRERR 115

399
src/f9/f90600d.uml Normal file
View File

@ -0,0 +1,399 @@
#include "f90600d.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_INFO 2 2
BEGIN
PROMPT 1 1 "Info"
MESSAGE EXIT,K_F2
PICTURE TOOL_INFO
END
BUTTON DLG_HELP 2 2
BEGIN
PROMPT 2 1 "Help"
MESSAGE EXIT,K_F1
PICTURE TOOL_HELP
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 0 ""
PICTURE 0
END
BUTTON B_ISELESCL 2 2
BEGIN
PROMPT 1 8 "Sel. esclusi"
PICTURE TOOL_MULTISEL
FLAGS ""
END
BUTTON B_IESCL 2 2
BEGIN
PROMPT 1 7 "Conf. esclusi"
PICTURE TOOL_WARNING
FLAGS ""
END
BUTTON B_IALLESCL 2 2
BEGIN
PROMPT 1 7 "Sel. tutti"
PICTURE TOOL_MULTISEL
FLAGS ""
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 0 ""
PICTURE 0
END
BUTTON DLG_QUIT 2 2
BEGIN
PROMPT 3 1 "Fine"
MESSAGE EXIT,K_QUIT
PICTURE TOOL_QUIT
END
ENDPAGE
PAGE "Movimenti" 0 2 0 0
STRING F_IIDESTR 18
BEGIN
PROMPT 0 0 "Id estrazione"
FLAGS "D"
END
DATA F_IDATA
BEGIN
PROMPT 45 0 "Data estrazione "
FLAGS "D"
END
BOOLEAN F_IPROV
BEGIN
PROMPT 0 1 "Provvisorio"
FLAGS "D"
END
STRING F_ITIPOD 9
BEGIN
PROMPT 15 1 "Tipo Documenti"
FLAGS "D"
END
STRING F_ISTATOESTR 38
BEGIN
PROMPT 45 1 "Stato estrazione"
FLAGS "D"
END
DATA F_IDAL
BEGIN
PROMPT 0 2 "Dal"
FLAGS "D"
END
DATA F_IAL
BEGIN
PROMPT 15 2 "Al"
FLAGS "D"
END
TEXT F_ETEXT
BEGIN
PROMPT 0 3 "@BMovimenti estratti nel pacchetto:"
END
SPREADSHEET S_INCL -1 -1
BEGIN
PROMPT 0 4 "Movimenti estratti"
ITEM " "
ITEM "Numero\nReg.@8"
ITEM "Data\nReg.@8"
ITEM "Data\nDoc.@8"
ITEM "Codice\nCaus.@8"
ITEM "Tipo Doc.@5"
ITEM "Mese\nliquidazione@8"
ITEM "Numero\nDocumento@8"
ITEM "Totale\nDocumento@8"
ITEM "Cliente/\nFornitore@8"
ITEM "Ragione\nSociale@8"
ITEM "Cod. regis./\nprot.IVA@8"
ITEM "Descrizione@8"
ITEM "ESCLUDI@5"
ITEM "ESCLUSO@6"
END
ENDPAGE
PAGE "Risultato estrazione" 0 0 0 0
SPREADSHEET S_RES -1 -1
BEGIN
PROMPT 0 0 "Movimenti"
ITEM "Estratto"
ITEM "Numero\nReg.@8"
ITEM "Data\nReg.@8"
ITEM "Data\nDoc.@8"
ITEM "Tipo Doc\nSDI@9"
ITEM "Codice\nCaus.@8"
ITEM "Tipo Mov.@5"
ITEM "Mese\nliquidazione@8"
ITEM "Numero\nDocumento@8"
ITEM "Totale\nDocumento@8"
ITEM "Cliente/\nFornitore@8"
ITEM "Ragione\nSociale@8"
ITEM "Cod. regis./\nprot.IVA@8"
ITEM "Descrizione@8"
ITEM "Descrizione Estrazione@30"
END
ENDPAGE
ENDMASK
PAGE "Mov Inclusi" -1 -1 78 13
BOOLEAN FI_SEL
BEGIN
PROMPT 1 1 ""
END
NUMERIC FI_NUMREG 7
BEGIN
PROMPT 1 2 ""
FLAGS "D"
END
DATA FI_DATAREG
BEGIN
PROMPT 1 3 ""
FLAGS "D"
END
DATA FI_DATADOC
BEGIN
PROMPT 1 4 ""
FLAGS "D"
END
STRING FI_CODCAUS 3
BEGIN
PROMPT 1 5 ""
FLAGS "D"
END
STRING FI_TIPOMOV 3
BEGIN
PROMPT 1 6 ""
FLAGS "D"
END
NUMERIC FI_MESELIQ 2
BEGIN
PROMPT 1 7 ""
FLAGS "D"
END
STRING FI_NUMDOC 50
BEGIN
PROMPT 1 8 ""
FLAGS "D"
END
NUMERIC FI_IMPTOTDOC 15 2
BEGIN
PROMPT 1 9 ""
FLAGS "D"
END
NUMERIC FI_FORN 6
BEGIN
PROMPT 1 10 ""
FLAGS "D"
END
STRING FI_RAGSOC 80
BEGIN
PROMPT 1 11 ""
FLAGS "D"
END
STRING FI_PROTIVA 10
BEGIN
PROMPT 1 12 ""
FLAGS "D"
END
STRING FI_DESCR 50
BEGIN
PROMPT 1 13 ""
FLAGS "D"
END
LIST FI_IESCLUDI 2
BEGIN
PROMPT 1 1 "Escludi"
ITEM "|"
ITEM "S|SI"
ITEM "N|NO"
FLAGS "D"
END
BOOLEAN FI_IESCLUSO
BEGIN
PROMPT 1 1 "ESCLUSO"
FLAG "D"
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_USER 2 2
BEGIN
PROMPT 1 1 "Collega"
PICTURE TOOL_LINK
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 0 ""
PICTURE 0
END
BUTTON DLG_QUIT 2 2
BEGIN
PROMPT 3 1 "Fine"
MESSAGE EXIT,K_QUIT
PICTURE TOOL_QUIT
END
ENPAGE
ENDMASK
PAGE "Risultato estratti" -1 -1 78 13
BOOLEAN F_RSEL
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
NUMERIC F_RNUMREG 7
BEGIN
PROMPT 1 2 ""
FLAGS "D"
END
DATA F_RDATAREG
BEGIN
PROMPT 1 3 ""
FLAGS "D"
END
DATA F_RDATADOC
BEGIN
PROMPT 1 4 ""
FLAGS "D"
END
STRING F_RTIPODOCSDI 4
BEGIN
PROMPT 1 5 ""
FLAGS "D"
END
STRING F_RCODCAUS 3
BEGIN
PROMPT 1 6 ""
FLAGS "D"
END
STRING F_RTIPOMOV 3
BEGIN
PROMPT 1 7 ""
FLAGS "D"
END
NUMERIC F_RMESELIQ 2
BEGIN
PROMPT 1 8 ""
FLAGS "D"
END
STRING F_RNUMDOC 50
BEGIN
PROMPT 1 9 ""
FLAGS "D"
END
NUMERIC F_RIMPTOTDOC 15 2
BEGIN
PROMPT 1 10 ""
FLAGS "D"
END
NUMERIC F_RFORN 6
BEGIN
PROMPT 1 11 ""
FLAGS "D"
END
STRING F_RRAGSOC 80
BEGIN
PROMPT 1 12 ""
FLAGS "D"
END
STRING F_RPROTIVA 10
BEGIN
PROMPT 1 13 ""
FLAGS "D"
END
STRING F_RDESCR 50
BEGIN
PROMPT 1 14 ""
FLAGS "D"
END
STRING F_RDESCRERR 92
BEGIN
PROMPT 1 15 ""
FLAGS "D"
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_USER 2 2
BEGIN
PROMPT 1 1 "Collega"
PICTURE TOOL_LINK
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 0 ""
PICTURE 0
END
BUTTON DLG_QUIT 2 2
BEGIN
PROMPT 3 1 "Fine"
MESSAGE EXIT,K_QUIT
PICTURE TOOL_QUIT
END
ENPAGE
ENDMASK

View File

@ -66,6 +66,9 @@ struct statistics
size_t fv_err;
size_t fv_estr;
size_t fv_nocatdoc;
size_t int_match;
size_t int_nomatch;
size_t int_err;
};
extern statistics _stats;
@ -115,6 +118,15 @@ enum state_fppro
err_read_db = 999 // Errore lettura da fppro
};
enum state_estr_int
{
int_with_err = -1, // Movimento associato male con FPPRO
guessed_int = 100,
no_guessed_int = 0,
err_read_db_int = 999, // Errore lettura da fppro
wrong_keys = -2
};
class TF9_config
{
// todo: controllare che siano sqlsafe
@ -308,7 +320,8 @@ enum err_mov
mov_no_filecart, // Il documento cartaceo non ha associato un file, o questo non e' stato trovato.
mov_annesso_nexist, // Un annesso obbligatorio e' mancante.
mov_nocat_butok, // Non è stata trovata nessuna categoria documentale per il seguente documento. Verra usato il TIPODOCSDI presente nel FPPRO
mov_no_sdi // Nessuno tipo doc SDI abbinato
mov_no_sdi, // Nessuno tipo doc SDI abbinato
mov_nomatch_keys // La chiave del documento salavta in MOV non si matcha con nessun documento elettronico
};
class TMovimento_estr : public TObject // aggiungere metodi per TArray
@ -326,6 +339,7 @@ class TMovimento_estr : public TObject // aggiungere metodi per TArray
TString _reg_protiva;
TString _descr;
state_fppro _state;
state_estr_int _state_int;
TString _descr_err; // Messaggio di errore visibile dal controllo estrazione.
bool _estratto;
err_mov _descr_estr; // Messaggio di informazioni visibile dal 'Apri Estr.'
@ -371,6 +385,7 @@ public:
void set_err(const char * descr = "", err_mov descr_estr = mov_no_error);
void reset_err() { set_err(); }
void set_state(state_fppro state) { _state = state; }
void set_state_int(state_estr_int state) { _state_int = state; }
void set_descr_estr(err_mov descr_estr) { _descr_estr = descr_estr; }
void set_numdoc(const char * numdoc) { _numdoc = numdoc; }
void set_estratto(bool estratto) { _estratto = estratto; }
@ -424,12 +439,16 @@ class TEstrazione : public TObject
* \return \a not_fa se il movimento passato non è una fattura.
*/
static state_fppro check_fppro(int numreg);
state_estr_int guess_int(int numreg);
bool checkPAF(TLocalisamfile& mov);
bool checkPAA(TLocalisamfile& mov);
const bool check_keys(TToken_string keys);
bool check_periodo_def() const;
void copy_file_to_webapp_fld(TMovimento_estr& movimento) const;
void fill_id(const TRectype& clifo, TString& statopaiv, TString& idfisc, TString& paiv, TString& codfis);
TipoIVA get_tipoiva() const { return _head.tipo_doc == 'A' ? iva_acquisti : iva_vendite; }
bool is_doc_xml(const TRectype& mov);
bool load_docs(TMovimento_estr& movimento) { return movimento.load_docs(); }
void fill_id(const TRectype& clifo, TString& statopaiv, TString& idfisc, TString& paiv, TString& codfis);
TipoIVA get_tipoiva() const { return _head.tipo_doc == 'A' ? iva_acquisti : iva_vendite; }
bool is_doc_xml(const TRectype& mov);
bool load_docs(TMovimento_estr& movimento) { return movimento.load_docs(); }
// Se il movimento e' di vendita e ha i riferimenti al documento generatore provo a stamparlo con ve, e lo inserisco tra i cartacei F9.
// bool stampa_documento(const TMovimento_estr& movimento, TFilename& file);
bool grab_pdf_from_spotlite(const TMovimento_estr& movimento, TFilename& file) const;
@ -448,7 +467,7 @@ private:
/** Controlla ultimo id estrazione della giornata e in base al tipo di estrazione,
* genera il progressivo seguente. Chiamata da \a estrai() e \a estrai_single().
* \return Nuovo id estrazione. */
TString next_estr_today(char tipo) const;
TString next_estr_today(char tipo, const bool estr_int = false) const;
static bool pura_iva(const TRectype& mov);
void write_errorsql_log(const TString& query);
@ -465,6 +484,8 @@ public:
* \return D_GEST_ERR (02) se la diagnostica ha riportato degli errori.
*/
const char* diagnostica_mov();
/** DIAGNOSTICA GESTIONALE SPECIALIZZATA PER TD16/TD17/TD18....*/
const char* diagnostica_mov_integrazione();
/** Estrazione per pacchetti "normali" (non da esclusi).
* Viene chiamata dall'handler estrai_handler: bottone estrai nella maschera estrazione.
*
@ -479,6 +500,10 @@ public:
* \return true Scrittura sul db senza errori.
* \return false Errore scrittura db. */
bool estrazione_iva(bool escluso = false);
result_estr TEstrazione::estrai_integrazioni();
bool estrazione_iva_int(bool escluso = false);
bool exist_prov() const; /**< Controllo che esista per questo stesso periodo una estrazione provvisoria. */
/** Controllo se esiste un periodo antecedente a questa estrazione che non e' mai stato estratto definitivamente. */
bool gap_periodo() const;

View File

@ -15,7 +15,7 @@
#define MODE_SHEETS 0xC
statistics _stats = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
statistics _stats = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
const TString & get_numdoc_exp_fp(const int numreg)
{
@ -451,6 +451,129 @@ state_fppro TEstrazione::check_fppro(int numreg)
return not_fa;
}
state_estr_int TEstrazione::guess_int(int numreg)
{
TLocalisamfile mov(LF_MOV);
mov.put(MOV_NUMREG, numreg);
if (mov.read() == NOERR)
{
if (get_tipoiva() == iva_vendite)
{
if (checkPAF(mov))
return guessed_int;
return no_guessed_int;
}
else if(get_tipoiva() == iva_acquisti)
{
if (checkPAA(mov))
return guessed_int;
return no_guessed_int;
}
}
return int_with_err;
}
bool TEstrazione::checkPAF(TLocalisamfile& mov)
{
// Prendo il fornitore del mov per controllare la p.iva
long codcf = mov.get_long(MOV_CODCF);
TCli_for forn = cached_clifor('C', mov.get_long(MOV_CODCF));
const TString4 statopiva(forn.get(CLI_STATOPAIV));
const real tot = mov.get_real(MOV_TOTDOC) + mov.get_real(MOV_RITFIS) + mov.get_real(MOV_RITSOC);
TString numdoc = mov.get(MOV_NUMDOCEXT);
if (numdoc.blank())
numdoc = mov.get(MOV_NUMDOC);
// Controllo datadoc - numdoc - totdoc - p.iva
TString query;
query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT, P7_DATA AS DATA,\n" <<
"P7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAF2700F\n" <<
"JOIN PAF0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" <<
"JOIN PAF0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" <<
"WHERE P7_DATA = '" << mov.get_date(MOV_DATADOC).date2ansi() << "' AND \n" <<
"(P7_NUMERO = '" << numdoc << "' OR P7_NUMERO LIKE '%" << numdoc << "%') \n";
if (statopiva.full())
query << " AND \n" << "P2_FISCIVAPAESE = '" << statopiva << "'";
query << " AND \n" << "P2_FISCIVACOD = '" << forn.get(CLI_PAIV) << "'";
if (forn.gruppo_IVA())
query << " AND \n" "P2_COCAZZO = '" << forn.get(CLI_COFI) << "'"; // cazzo;
if (tot < 0)
query << " AND \n" "(PQ_IMPTOTDOC = " << tot << " OR PQ_IMPTOTDOC = " << abs(tot) << ")";
else
query << " AND \n" "PQ_IMPTOTDOC = " << tot;
bool ok = fp_db().sq_set_exec(query);
if (ok && (fp_db().sq_items() == 1))
{
TToken_string keys;
keys.separator(';');
keys = (fp_db().sq_get("KEYPRGINVIO"));
keys.add(fp_db().sq_get("KEYHEADERFATT"));
keys.add(fp_db().sq_get("KEYBODYFATT"));
mov.put(MOV_KEYPAF, keys);
mov.rewrite();
return true;
}
return false;
}
bool TEstrazione::checkPAA(TLocalisamfile& mov)
{
// Prendo il fornitore del mov per controllare la p.iva
long codcf = mov.get_long(MOV_CODCF);
TCli_for forn = cached_clifor('F', mov.get_long(MOV_CODCF));
const TString4 statopiva(forn.get(CLI_STATOPAIV));
const real tot = mov.get_real(MOV_TOTDOC) + mov.get_real(MOV_RITFIS) + mov.get_real(MOV_RITSOC) + mov.get_real(MOV_REVCHARGE);
TString numdoc = mov.get(MOV_IDDOCSDI);
TString query;
query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT, P7_DATA AS DATA,\n" <<
"P7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" <<
"JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" <<
"JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" <<
"WHERE P7_DATA = '" << mov.get_date(MOV_DATADOC).date2ansi() << "' AND \n" <<
"(P7_NUMERO = '" << numdoc << "' OR P7_NUMERO LIKE '%" << numdoc << "%') \n";
if (statopiva.full())
query << " AND \n" << "P2_FISCIVAPAESE = '" << statopiva << "'";
query << " AND \n" << "P2_FISCIVACOD = '" << forn.get(CLI_PAIV) << "'";
if (forn.gruppo_IVA())
query << " AND \n" "P2_COCAZZO = '" << forn.get(CLI_COFI) << "'";
if (tot < 0)
query << " AND \n" "(PQ_IMPTOTDOC = " << tot << " OR PQ_IMPTOTDOC = " << abs(tot) << ")";
else
query << " AND \n" "PQ_IMPTOTDOC = " << tot;
bool ok = fp_db().sq_set_exec(query);
if (ok && (fp_db().sq_items() == 1))
{
//CAPIRE COSA FARE QUI DENTRO
TToken_string keys;
keys.separator(';');
keys = (fp_db().sq_get("KEYPRGINVIO"));
keys.add(fp_db().sq_get("KEYHEADERFATT"));
keys.add(fp_db().sq_get("KEYBODYFATT"));
mov.put(MOV_KEYFPPRO, keys);
mov.rewrite();
return true;
}
return false;
}
bool TEstrazione::check_periodo_def() const
{
TString query;
@ -793,15 +916,19 @@ bool TEstrazione::export_error_list()
return ok;
}
TString TEstrazione::next_estr_today(char tipo) const
TString TEstrazione::next_estr_today(char tipo, const bool estr_int) const
{
char estr[] = { 0,0,0,0,0,0,0,0,0 };
TString query;
query << "SELECT TOP 1 SUBSTRING(" DRD_ID_EST ", 11, 8) AS IDESTR\n"
"FROM " F9_DRD "\n"
"WHERE " DRD_CODSOC " = '" << _head.cod_soc << "' AND\n"
DRD_ID_EST " LIKE '" << today.date2ansi() << "%'\n"
"ORDER BY IDESTR DESC";
query << "SELECT TOP 1 SUBSTRING(" DRD_ID_EST ", 11, 8) AS IDESTR\n"
"FROM " F9_DRD "\n"
"WHERE " DRD_CODSOC " = '" << _head.cod_soc << "' AND\n";
if (estr_int)
query << DRD_ID_EST " LIKE 'R" << today.date2ansi() << "%'\n";
else
query << DRD_ID_EST " LIKE '" << today.date2ansi() << "%'\n";
query << "ORDER BY IDESTR DESC";
fp_db().sq_set_exec(query);
const int last_estr = fp_db().sq_items() > 0 ? real(fp_db().sq_get("IDESTR")).integer() : -1;
@ -1046,9 +1173,6 @@ const char* TEstrazione::diagnostica_mov()
if (mov_i.estratto())
{
if (mov_i.numreg() == 41400) {
int here = 0;
}
if (mov_i.cartaceo())
{
TFilename file;
@ -1083,6 +1207,126 @@ const char* TEstrazione::diagnostica_mov()
return _head.stato_estr;
}
const char* TEstrazione::diagnostica_mov_integrazione()
{
bool ok = true;
const TipoIVA tipo = get_tipoiva();
_stats.total = _movs.size();
TProgress_monitor bar(_movs.items(), "Controllo stato movimenti");
FOR_EACH_ARRAY_ITEM(_movs, r, obj)
{
if (bar.add_status())
{
TMovimento_estr & mov_i = (TMovimento_estr &)*obj;
// Se gia' escluso passo avanti
if (!mov_i.estratto() && mov_i.descr_estr() == mov_escluso)
continue;
const long numreg = mov_i.numreg();
const TRectype & mov = cache().get(LF_MOV, numreg);
TToken_string keys;
if(tipo == iva_vendite)
keys = (mov.get(MOV_KEYPAF));
else if (tipo == iva_acquisti)
keys = (mov.get(MOV_KEYFPPRO));
keys.separator(';');
int i = keys.items();
if (keys.full() && (keys.items() == 3))
{
if (check_keys(keys))
{
ok &= true;
mov_i.set_estratto(true);
mov_i.set_state_int(guessed_int);
++_stats.int_match;
continue;
}
else
{
ok &= false;
mov_i.set_state_int(int_with_err);
mov_i.reset_err();
mov_i.set_err("Chiavi del documento ERRATE", mov_nomatch_keys);
++_stats.int_nomatch;
continue;
}
}
if (mov_i.no_err() && mov_i.estratto())
{
const long numreg = mov_i.numreg();
const TRectype & mov = cache().get(LF_MOV, numreg);
mov_i.set_cartaceo(!is_doc_xml(mov));
const state_estr_int res = guess_int(numreg);
switch (res)
{
case guessed_int:
ok &= true;
mov_i.set_estratto(true);
++_stats.int_match;
break;
case no_guessed_int:
ok &= false;
mov_i.reset_err();
mov_i.set_err("Non è stato possibile trovare il documento elettronico da abbinare", mov_notfound_elet);
++_stats.int_nomatch;
break;
case int_with_err:
ok &= false;
mov_i.set_estratto(false);
++_stats.int_err;
break;
default: break;
}
if (mov_i.state() == null_state)
mov_i.set_state_int(res);
}
}
}
_head.stato_estr = ok ? D_GEST_OK : D_GEST_ERR;
return _head.stato_estr;
}
const bool TEstrazione::check_keys(TToken_string keys)
{
bool res;
TString query;
if (get_tipoiva() == iva_vendite)
{
query << "SELECT COUNT(PW_KEYBODYFATT) AS CONTA FROM PAFW300F WHERE PW_KEYPRGINVIO = '" << keys.get(0)
<< "' AND PW_KEYHEADERFATT = '" << keys.get(1) << "' AND PW_KEYBODYFATT = '" << keys.get(2) << "'";
}
else if (get_tipoiva() == iva_acquisti)
{
query << "SELECT COUNT(PZ_KEYBODYFATT) AS CONTA FROM FPPRO00F WHERE PZ_KEYPRGINVIO = '" << keys.get(0)
<< "' AND PZ_KEYHEADERFATT = '" << keys.get(1) << "' AND PZ_KEYBODYFATT = '" << keys.get(2) << "'";
}
fp_db().sq_set_exec(query);
TString query_res = fp_db().sq_get("CONTA");
if (query_res == "1")
res = true;
else
res = false;
return res;
}
result_estr TEstrazione::estrai()
{
// Se non c'e' nessun movimento non sto nemmeno a scrivere il record di estrazione.
@ -1357,6 +1601,267 @@ bool TEstrazione::estrazione_iva(bool escluso)
return stato;
}
result_estr TEstrazione::estrai_integrazioni()
{
// Se non c'e' nessun movimento non sto nemmeno a scrivere il record di estrazione.
// Se estrazione definitiva controllo che il periodo non si sovrapponga alle altre estrazioni def.
// Do' errore ed esco subito.
result_estr res = estr_ok;
if (_movs.empty())
{
warning_box("Non esistono movimenti estraibili per il periodo selezionato.");
return estr_stop;
}
if (!_escluso && !_head.flag_prov)
{
// Avviso nel caso in cui si stia facendo un'estrazione definitiva di un periodo di cui non si e' mai fatta
// una prova provvisoria.
if (!exist_prov())
{
if (!noyes_box("Attenzione, non e' mai stata fatta alcuna\nestrazione provvisoria per questo periodo.\nContinuare comunque?"))
return estr_stop;
}
}
// Non so come usare questi 18 caratteri...
// Uso dati anche se gia' noti in altri campi (I know..) + un numero incrementale.
_head.id_estr.cut(0) << 'R' << today.date2ansi() << (_head.flag_prov ? "P" : "D") << next_estr_today(_head.tipo_doc, true);
_head.user = user();
// Eseguo controllo sui movimenti e segno in testata lo stato
_head.stato_estr = IN_DIAGN; // "01" che verra' quasi subito rimpiazzato dal risultato della diagnostica.
if (_escluso)
set_dates(); // Se escluso imposto data inizio e fine uguali
// Scrivo record estrazione (in stato '01': in diagnostica).
const bool ok = insert_into_drd();
if (!ok)
{
TString msg;
msg << "Errore database: impossibile scrivere nuova estrazione.\n"
<< fp_db().sq_get_text_error(false);
error_box(msg);
return estr_err_db_drd;
}
// Faccio partire la diagnostica e mi salvo il nuovo stato.
diagnostica_mov_integrazione();
//ARRIVATO QUI
insert_into_f9movestr();
if (_head.stato_estr == D_GEST_ERR)
{
warning_box("Attenzione l'estrazione ha prodotto degli errori.\n"
"Controllare e correggere eventuali problemi\ndal Controllo Estrazione.");
// Se in errore, esporto lista errori sul db
if (!export_error_list())
warning_box("Errore scrittura db. Controllare log errori.");
res = estr_diag_err; // Errore diagnostica gestionale
}
// Se va tutto ben fino a qui, posso andare a scrivere nella
// tabella IVA i movimenti. F9IVA
if (res == estr_ok)
{
res = estrazione_iva_int() ? estr_ok : estr_err_db_iva;
if (res == estr_err_db_iva)
_head.stato_estr = D_GEST_ERR;
}
update_drd_stato_estr();
return res;
}
bool TEstrazione::estrazione_iva_int(bool escluso)
{
TString statopaiv, idfisc, paiv, codfis;
bool stato = true;
TProgress_monitor bar(_movs.items(), "Estrazione dati IVA");
FOR_EACH_ARRAY_ITEM(_movs, r, obj)
{
TMovimento_estr & mov_i = (TMovimento_estr &)*obj;
if (bar.add_status() && mov_i.estratto())
{
const TRectype& mov = cache().get(LF_MOV, mov_i.numreg());
TToken_string key = mov.get(MOV_TIPO);
key.add(mov.get(MOV_CODCF));
const TRectype& cli = cache().get(LF_CLIFO, key);
const char tipodoc = _head.tipo_doc;
const TCausale & caus = cached_causale(mov.get(MOV_CODCAUS), mov.get_date(MOV_DATAREG).year());
const TString& name_registro = caus.reg().name();;
fill_id(cli, statopaiv, idfisc, paiv, codfis);
TDate datadoc = mov.get_date(MOV_DATADOC);
TDate datareg = mov.get_date(MOV_DATAREG);
TIva_insert_prepared_stat iva_query; /////////QUIIIIIII///
iva_query.add(IVA_CODSOC, _head.cod_soc, 10);
iva_query.add(IVA_IDLAN, _head.id_estr, 18);
iva_query.add(IVA_FLAG_PD, _head.flag_prov ? 'P' : 'D');
iva_query.add(IVA_ANNOES, mov.get_int(MOV_ANNOES));
iva_query.add(IVA_GIVA, tipodoc);
iva_query.add(IVA_TIPOG, name_registro, 10);
long numdoc = mov.get_long(MOV_NUMDOC);
bool has_xml = !mov_i.err(); //si può fare un controllo migliore
iva_query.add(IVA_DOCXML, has_xml ? 'S' : 'N');
iva_query.add(IVA_TIPOCF, mov.get_char(MOV_TIPO));
iva_query.add(IVA_CODCF, mov.get_long(MOV_CODCF));
iva_query.add(IVA_NUMOR, mov.get_long(MOV_NUMREG));
iva_query.add(IVA_RAGSOC, cli.get(CLI_RAGSOC), 60);
iva_query.add(IVA_IDFISC, idfisc, 30);
iva_query.add(IVA_PIVA, paiv, 28);
iva_query.add(IVA_CODFIS, codfis, 16);
iva_query.add(IVA_CATDOC, mov_i.catdoc(categorie_doc())->catdoc(), 10);
const TRegistro& reg = cached_registro(mov.get(MOV_REG), mov.get_int(MOV_ANNOIVA));
if (reg.iva() == iva_vendite)
{
int anno = mov.get_int(MOV_DANNO);
TString tipodocsdi;
if (anno > 0)
{
const char provv = mov.get(MOV_DPROVV)[0];
const TString& codnum = mov.get(MOV_DCODNUM);
const long ndoc = mov.get_long(MOV_DNDOC);
TDocumento doc(provv, anno, codnum, ndoc);
iva_query.add(IVA_CAUSSOS, tipo_doc_sdi(doc), 6);
}
else
tipodocsdi = caus.tipodocsdi();
if (tipodocsdi.blank())
tipodocsdi = mov_i.catdoc(categorie_doc())->caus_sost();
if (tipodocsdi.full())
iva_query.add(IVA_CAUSSOS, tipodocsdi, 6);
}
else
{
TToken_string key(mov.get((MOV_KEYFPPRO)), ';');
if (key.full())
{
TFppro fppro(key);
const TString& tipodoc = fppro.get_tipodoc();
if (tipodoc.full())
iva_query.add(IVA_CAUSSOS, tipodoc, 6);
else
iva_query.add(IVA_CAUSSOS, mov_i.catdoc(categorie_doc())->caus_sost(), 6);
}
else
iva_query.add(IVA_CAUSSOS, mov_i.catdoc(categorie_doc())->caus_sost(), 6);
}
iva_query.add(IVA_NUMDOC, mov_i.numdoc(), 20);
iva_query.add(IVA_DATADOC, datadoc);
iva_query.add(IVA_SEZIVA, mov.get(MOV_REG), 10);
iva_query.add(IVA_TIPOREG, "", 6);
iva_query.add(IVA_NPROT, mov.get(MOV_PROTIVA), 20);
iva_query.add(IVA_DATPROT, datareg);
iva_query.add(IVA_CLASDOC, mov_i.catdoc(categorie_doc())->class_sost(), 10);
iva_query.add(IVA_NOMFD, mov_i.nomefiledoc().name(), 100);
// Load annessi DA TESTARE...
if (mov_i.allegati())
{
TString_array & docs = mov_i.documenti_allegati();
int i = 0;
const int size = docs.items();
iva_query.add(IVA_CLASAN1, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF1, docs.row(i++).get(0), 100);
// HOW DID MY LIFE COME TO THIS?...
if (size > i)
{
iva_query.add(IVA_CLASAN2, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF2, docs.row(i++).get(0), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN3, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF3, docs.row(i++).get(0), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN4, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF4, docs.row(i++).get(0), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN5, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF5, docs.row(i++).get(0), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN6, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF6, docs.row(i++).get(0), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN7, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF7, docs.row(i++).get(0), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN8, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF8, docs.row(i++), 100);
}
if (size > i)
{
iva_query.add(IVA_CLASAN9, docs.row(i).get(2), 10);
iva_query.add(IVA_NOMF9, docs.row(i++).get(0), 100);
}
}
iva_query.add(IVA_USERELA, user(), 10);
iva_query.add_getdate(IVA_TIMEELA);
/* DA VEDERE
if (_head.tipo_doc == 'A' && !mov_i.cartaceo())
{
TToken_string keys(mov.get(MOV_KEYFPPRO), ';');
fppro_db().set_keys(keys);
iva_query.add(IVA_TIPPROT, fppro_db().get_tipoprot(), 2);
iva_query.add(IVA_ANNPROT, TVariant(fppro_db().get_annoprot()).as_int());
iva_query.add(IVA_NUMPROT, fppro_db().get_numprot(), 10); // Non controllo che sia in realta' un numero...
iva_query.add(IVA_TIMERIC, TDate(fppro_db().get_dataoraric()));
}
*/
TString sql;
//DA MIGLIORARE IL LOG DI ERRORE
long a = mov_i.numreg();
bool ok = iva_query.get(sql);
if (ok)
ok = fp_db().sq_set_exec(sql);
if (ok)
ok = fp_db().sq_commit();
if (!ok)
write_errorsql_log(sql);
stato &= ok;
}
}
return stato;
}
bool TEstrazione::exist_prov() const
{
TString query; query << "SELECT * FROM " F9_DRD "\n" <<

View File

@ -2921,15 +2921,14 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
if (!data_scad.empty())
{
paf2500f.set("PO_DATASCADENZA", data_scad); // Data scadenza
paf2500f.set("PO_DTLIMANTIC", data_scad);
paf2500f.set("PO_DATADECORRP", data_scad);
//paf2500f.set("PO_DTLIMANTIC", data_scad);
//paf2500f.set("PO_DATADECORRP", data_scad);
}
TDate decorenza_pagamento = doc.get_date(DOC_DATAINSC);
if (decorenza_pagamento.empty())
decorenza_pagamento = doc.data();
paf2500f.set("PO_DATARIFTERM", decorenza_pagamento);
if (!decorenza_pagamento.empty())
paf2500f.set("PO_DATARIFTERM", decorenza_pagamento);
paf2500f.set("PO_IMPORTO", value2string(riga_scadenze.get_real())); // valore, false)); // Importo rata
paf2500f.set("PO_GESTIONE", stato_paf());
ok &= insert(paf2500f);

View File

@ -33,8 +33,9 @@ Picture = <cg01>
Module = f9
Flags = ""
Item_01 = "Estrazioni", "f90 -0", ""
Item_02 = "Categorie documentali", "f90 -1", ""
Item_03 = "Gestione file doc. cartacei", "f90 -2", ""
Item_04 = "Ripristino estrazioni", "f90 -4", ""
Item_02 = "Archiviazione integrazioni", "f90 -5", ""
Item_03 = "Categorie documentali", "f90 -1", ""
Item_04 = "Gestione file doc. cartacei", "f90 -2", ""
Item_05 = "Ripristino estrazioni", "f90 -4", ""

View File

@ -65,6 +65,7 @@
#define MOV_DATADOCSDI "DATADOCSDI"
#define MOV_COLL_GOLEM "COLL_GOLEM"
#define MOV_CARTACEI "CARTACEI"
#define MOV_KEYPAF "KEYPAF"
#define NUMREG_PROVVISORIO 999999L