Patch level : 12.0 662
Files correlati : fp Commento : - Aggiornamento progetto fp per nuovo programma - Aggiunto programma per inserimento di pec e cod sdi di tutti i clienti/fornitori in una schermata - Sistemata posizione incremento progress_monitor, sistemato errore celle non colorate togliendo force_update() di troppo - Come aveva fatto notare alessandro, tolto stringa_eng() e utilizzato string() - Aggiunto in about.cpp libreria SQLAPI, cambiata scrittura versione c++ con TString. Da quando quest'ultima è stata aggiornata per VS 2017 in release i programmi si chiudono alla seconda apertura di info, questo non si presenta in debug, vediamo se si risolve qualcosa.
This commit is contained in:
parent
2c38a7d14f
commit
db84f03156
12
build/fp.sln
12
build/fp.sln
@ -3,6 +3,8 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27130.2027
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fplib", "fplib.vcxproj", "{C575788B-0BE4-4F68-B9C9-3C204EC04E07}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fp0", "fp0.vcxproj", "{9C91BACF-9A70-4973-B8CC-FA3D2AF9867C}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C575788B-0BE4-4F68-B9C9-3C204EC04E07} = {C575788B-0BE4-4F68-B9C9-3C204EC04E07}
|
||||
@ -10,14 +12,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fp0", "fp0.vcxproj", "{9C91
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AgaLib", "AgaLib.vcxproj", "{2D38A763-3D74-4338-9362-B891784EC90E}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fplib", "fplib.vcxproj", "{C575788B-0BE4-4F68-B9C9-3C204EC04E07}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{C575788B-0BE4-4F68-B9C9-3C204EC04E07}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C575788B-0BE4-4F68-B9C9-3C204EC04E07}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C575788B-0BE4-4F68-B9C9-3C204EC04E07}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C575788B-0BE4-4F68-B9C9-3C204EC04E07}.Release|Win32.Build.0 = Release|Win32
|
||||
{9C91BACF-9A70-4973-B8CC-FA3D2AF9867C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9C91BACF-9A70-4973-B8CC-FA3D2AF9867C}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9C91BACF-9A70-4973-B8CC-FA3D2AF9867C}.Release|Win32.ActiveCfg = Release|Win32
|
||||
@ -26,10 +30,6 @@ Global
|
||||
{2D38A763-3D74-4338-9362-B891784EC90E}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{2D38A763-3D74-4338-9362-B891784EC90E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{2D38A763-3D74-4338-9362-B891784EC90E}.Release|Win32.Build.0 = Release|Win32
|
||||
{C575788B-0BE4-4F68-B9C9-3C204EC04E07}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C575788B-0BE4-4F68-B9C9-3C204EC04E07}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C575788B-0BE4-4F68-B9C9-3C204EC04E07}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C575788B-0BE4-4F68-B9C9-3C204EC04E07}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -190,7 +190,7 @@
|
||||
<ClCompile Include="..\src\fp\fp0.cpp" />
|
||||
<ClCompile Include="..\src\fp\fp0100.cpp" />
|
||||
<ClCompile Include="..\src\fp\fp0200.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\fp\fp0300.cpp" />
|
||||
<ClCompile Include="..\src\tf\tfutility.cpp" />
|
||||
@ -199,15 +199,12 @@
|
||||
<ClInclude Include="..\src\fp\fp0.h" />
|
||||
<ClInclude Include="..\src\fp\fp0100a.h" />
|
||||
<ClInclude Include="..\src\fp\fp0200a.h" />
|
||||
<ClInclude Include="..\src\fp\fp0200b.h">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\fp\fp0300a.h" />
|
||||
<ClInclude Include="..\src\tf\tfutility.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<MskCompiler Include="..\src\fp\fp0200a.uml">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
|
||||
</MskCompiler>
|
||||
<MskCompiler Include="..\src\fp\fp0300a.uml" />
|
||||
</ItemGroup>
|
||||
@ -237,6 +234,9 @@
|
||||
<ItemGroup>
|
||||
<Library Include="..\lib\fplib.lib" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<MenCompiler Include="..\src\fp\fpmenu.men" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="CampoRules.targets" />
|
||||
|
@ -19,6 +19,9 @@
|
||||
<Filter Include="Libraries">
|
||||
<UniqueIdentifier>{d7227be8-6583-4473-895f-595f8a48a8cb}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Menu">
|
||||
<UniqueIdentifier>{022385bd-474b-4d1f-a01c-6d799bae0328}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\src\fp\fp0.cpp">
|
||||
@ -42,7 +45,9 @@
|
||||
<ClCompile Include="..\src\fp\fp0300.cpp">
|
||||
<Filter>Sources</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\fp\fp0200.cpp" />
|
||||
<ClCompile Include="..\src\fp\fp0200.cpp">
|
||||
<Filter>Sources</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\src\fp\fp0.h">
|
||||
@ -54,9 +59,6 @@
|
||||
<ClInclude Include="..\src\fp\fp0200a.h">
|
||||
<Filter>Headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\fp\fp0200b.h">
|
||||
<Filter>Headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\fp\fp0100a.h">
|
||||
<Filter>Headers</Filter>
|
||||
</ClInclude>
|
||||
@ -91,4 +93,9 @@
|
||||
<Filter>Libraries</Filter>
|
||||
</Library>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<MenCompiler Include="..\src\fp\fpmenu.men">
|
||||
<Filter>Menu</Filter>
|
||||
</MenCompiler>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -9,7 +9,7 @@ int main(int argc, char** argv)
|
||||
switch (r)
|
||||
{
|
||||
case 2: rt = fp0300(argc, argv); break; // Gestione fatture attive (PAA, Ex Fattura PA)
|
||||
//case 1: rt = fp0200(argc, argv); break; // Gestione fatture passive (PAF)
|
||||
case 1: rt = fp0200(argc, argv); break; // Inserimento massivo PEC e Cod Sdi clifo
|
||||
default: rt = fp0100(argc, argv); break; // Configurazione
|
||||
}
|
||||
return rt;
|
||||
|
@ -1,6 +1,242 @@
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <config.h>
|
||||
#include "fplib01.h"
|
||||
#include <progind.h>
|
||||
#include <cfven.h>
|
||||
#include <doc.h>
|
||||
|
||||
#include "../ve/velib05.h"
|
||||
#include "../cg/cglib03.h"
|
||||
#include "../fe/felib.h"
|
||||
|
||||
#include "fp0.h"
|
||||
#include "fp0200a.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// TCC_mask
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class TCC_mask : public TAutomask
|
||||
{
|
||||
protected:
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
|
||||
void fill();
|
||||
void init();
|
||||
void save_all();
|
||||
|
||||
public:
|
||||
TCC_mask() : TAutomask("fp0200a") {}
|
||||
};
|
||||
|
||||
bool TCC_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
switch (o.dlg())
|
||||
{
|
||||
case DLG_RECALC:
|
||||
if (e == fe_button)
|
||||
fill();
|
||||
break;
|
||||
|
||||
case DLG_SAVEREC:
|
||||
if (e == fe_button)
|
||||
save_all();
|
||||
break;
|
||||
|
||||
case DLG_USER:
|
||||
if (e == fe_button && jolly > 0)
|
||||
{
|
||||
TSheet_field& clifo = sfield(F_RIGHE);
|
||||
TToken_string& row = clifo.row(clifo.selected());
|
||||
TRectype rec(LF_CLIFO);
|
||||
rec.put(CLI_TIPOCF, get(F_TIPOCF));
|
||||
rec.put(CLI_CODCF, row.get(0));
|
||||
if (rec.edit())
|
||||
fill();
|
||||
}
|
||||
break;
|
||||
|
||||
case F_TIPOCF:
|
||||
if(e == fe_modify)
|
||||
{
|
||||
set(F_DACODCF, "");
|
||||
set(F_ACODCF, "");
|
||||
}
|
||||
break;
|
||||
|
||||
case S_CODSDI:
|
||||
if(e == fe_modify)
|
||||
{
|
||||
if (o.mask().get_bool(S_ISPA))
|
||||
{
|
||||
if (o.mask().get(S_CODSDI).len() != 6)
|
||||
{
|
||||
warning_box("La lunghezza di un codice SDI di una P.A. deve essere di 6 caratteri!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (o.mask().get(S_CODSDI).len() != 7)
|
||||
{
|
||||
warning_box("La lunghezza di un codice SDI di un privato deve essere di 7 caratteri!");
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void TCC_mask::fill()
|
||||
{
|
||||
TSheet_field& righe = sfield(F_RIGHE);
|
||||
TString_array& sht = righe.rows_array();
|
||||
|
||||
TString query;
|
||||
|
||||
query << "USE CLIFO \n" <<
|
||||
"JOIN CFVEN TO CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF \n"<<
|
||||
"FROM TIPOCF=#DATIPOCF ";
|
||||
if (get(F_DACODCF).full())
|
||||
query << "CODCF=#DACODCF";
|
||||
|
||||
query << "\nTO TIPOCF=#ATIPOCF ";
|
||||
if (get(F_DACODCF).full())
|
||||
query << "CODCF=#ACODCF";
|
||||
|
||||
TISAM_recordset rec(query);
|
||||
|
||||
// Valorizzo le variabili
|
||||
rec.set_var("#DATIPOCF", get(F_TIPOCF));
|
||||
rec.set_var("#ATIPOCF", get(F_TIPOCF));
|
||||
if (get(F_DACODCF).full())
|
||||
rec.set_var("#DACODCF", get(F_DACODCF));
|
||||
if (get(F_DACODCF).full())
|
||||
rec.set_var("#ACODCF", get(F_ACODCF));
|
||||
|
||||
TProgress_monitor pi(rec.items(), "Caricamento lista C/F");
|
||||
for (bool okc = rec.move_first(); okc; okc = rec.move_next())
|
||||
{
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
const TRectype& doc = rec.cursor()->curr();
|
||||
TToken_string& row = righe.row(-1);
|
||||
|
||||
|
||||
row.add(rec.get(CLI_CODCF).as_string());
|
||||
row.add(rec.get(CLI_RAGSOC).as_string());
|
||||
row.add(rec.get(CLI_ALLEG).as_int() == 7 ? "X" : "");
|
||||
row.add(rec.get(CLI_PEC).as_string());
|
||||
row.add(rec.get("17." CFV_PADESTIN).as_string());
|
||||
|
||||
}
|
||||
righe.force_update();
|
||||
righe.show();
|
||||
}
|
||||
|
||||
void TCC_mask::save_all()
|
||||
{
|
||||
TString_array& sht = sfield(F_RIGHE).rows_array();
|
||||
|
||||
TLocalisamfile clifo(LF_CLIFO), cfven(LF_CFVEN);
|
||||
int ok = NOERR;
|
||||
if (!sht.empty())
|
||||
{
|
||||
TProgress_monitor pi(sht.items(), "Salvataggio dati");
|
||||
FOR_EACH_ARRAY_ROW(sht, r, riga)
|
||||
{
|
||||
if (!pi.add_status())
|
||||
break;
|
||||
|
||||
clifo.zero();
|
||||
clifo.put(CLI_TIPOCF, get(F_TIPOCF));
|
||||
clifo.put(CLI_CODCF, riga->get(xvtil_cid2index(S_CODCF)));
|
||||
|
||||
const int clifo_err = clifo.read();
|
||||
if (clifo_err == NOERR)
|
||||
{
|
||||
clifo.put(CLI_PEC, riga->get(xvtil_cid2index(S_PEC)));
|
||||
if (clifo.rewrite() != NOERR)
|
||||
{
|
||||
TString msg = "Fallito salvataggio record in CLIFO";
|
||||
msg << clifo.get(CLI_TIPOCF) << " " << clifo.get(CLI_CODCF) << "\nSalvataggio abortito";
|
||||
error_box(msg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TString msg = "Impossibile trovare in CLIFO ";
|
||||
msg << clifo.get(CLI_TIPOCF) << " " << clifo.get(CLI_CODCF) << " errore " << clifo_err <<".\nSalvataggio abortito";
|
||||
error_box(msg);
|
||||
break;
|
||||
}
|
||||
|
||||
cfven.zero();
|
||||
cfven.put(CFV_TIPOCF, get(F_TIPOCF));
|
||||
cfven.put(CFV_CODCF, riga->get(xvtil_cid2index(S_CODCF)));
|
||||
const int err = cfven.read();
|
||||
if (err == NOERR || err == _iskeynotfound)
|
||||
{
|
||||
cfven.put(CFV_PADESTIN, riga->get(xvtil_cid2index(S_CODSDI)));
|
||||
if (cfven.rewrite_write() != NOERR)
|
||||
{
|
||||
TString msg = "Fallito salvataggio record in CFVEN ";
|
||||
msg << cfven.get(CFV_TIPOCF) << " " << cfven.get(CFV_CODCF) << "\nSalvataggio abortito";
|
||||
error_box(msg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TString msg = "Impossibile trovare in CFVEN ";
|
||||
msg << clifo.get(CLI_TIPOCF) << " " << clifo.get(CLI_CODCF) << " errore " << clifo_err << ".\nSalvataggio abortito";
|
||||
error_box(msg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// TDoc2Paf
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class TCC_app : public TSkeleton_application
|
||||
{
|
||||
|
||||
public:
|
||||
bool create() override;
|
||||
virtual void main_loop();
|
||||
|
||||
TCC_app() {}
|
||||
};
|
||||
|
||||
bool TCC_app::create()
|
||||
{
|
||||
open_files(LF_CLIFO, LF_CFVEN, 0);
|
||||
|
||||
TRectype cfven(LF_CFVEN);
|
||||
if (cfven.length(CFV_PADESTIN) != 7) // Nuova lunghezza per privati
|
||||
return error_box(TR("Database non convertito per fatturazione F.P."));
|
||||
|
||||
return TSkeleton_application::create();
|
||||
|
||||
}
|
||||
|
||||
void TCC_app::main_loop()
|
||||
{
|
||||
int ndocs = 0;
|
||||
TCC_mask mask;
|
||||
|
||||
while (mask.run() == K_ENTER) {}
|
||||
}
|
||||
|
||||
int fp0200(int argc, char* argv[])
|
||||
{
|
||||
TCC_app app;
|
||||
app.run(argc, argv, TR("Inserimento massivo codici F.P."));
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
#define S_CODCF 101
|
||||
#define S_RAGSOC 102
|
||||
#define S_ISPA 103
|
||||
#define S_PEC 104
|
||||
#define S_CODSDI 105
|
||||
|
||||
#define F_TIPOCF 201
|
||||
#define F_DACODCF 202
|
||||
#define F_ACODCF 203
|
||||
#define F_RIGHE 204
|
@ -7,197 +7,65 @@ BEGIN
|
||||
PICTURE TOOL_CONVERT
|
||||
END
|
||||
|
||||
BUTTON DLG_ARCHIVE 2 2
|
||||
BEGIN
|
||||
PROMPT 2 1 "Controlla"
|
||||
PICTURE TOOL_SMILE
|
||||
END
|
||||
|
||||
BUTTON DLG_SAVEREC 2 2
|
||||
BEGIN
|
||||
PROMPT 3 1 "Salva"
|
||||
PICTURE TOOL_SAVEREC
|
||||
END
|
||||
|
||||
BUTTON DLG_EDIT 10 2
|
||||
BEGIN
|
||||
PROMPT 3 1 "E~xcel"
|
||||
PICTURE TOOL_EXCEL
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "Esporta"
|
||||
PICTURE TOOL_ELABORA
|
||||
END
|
||||
|
||||
BUTTON DLG_EMAIL 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "Crea XML"
|
||||
PICTURE TOOL_EMAIL
|
||||
END
|
||||
|
||||
#include <helpbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Impostazioni" 0 2 0 0
|
||||
|
||||
DATE F_DATAINI
|
||||
BEGIN
|
||||
PROMPT 1 1 "Data iniziale:"
|
||||
CHECKTYPE REQUIRED
|
||||
VALIDATE DATE_CMP_FUNC <= F_DATAFIN
|
||||
WARNING "La data iniziale non può essere maggiore della data finale"
|
||||
END
|
||||
|
||||
DATE F_DATAFIN
|
||||
BEGIN
|
||||
PROMPT 40 1 "Data Finale: "
|
||||
CHECKTYPE REQUIRED
|
||||
VALIDATE DATE_CMP_FUNC >= F_DATAINI
|
||||
WARNING "La data finale non può essere minore della data iniziale"
|
||||
END
|
||||
PAGE "Elenco clienti/fornitori" 0 2 0 0
|
||||
|
||||
RADIOBUTTON F_TIPOCF 15
|
||||
BEGIN
|
||||
PROMPT 1 2 "Tipo C/F"
|
||||
PROMPT 1 0 "Tipo C/F"
|
||||
ITEM "C|Cliente"
|
||||
ITEM "F|Fornitore"
|
||||
END
|
||||
|
||||
NUMBER F_CODCF 6
|
||||
NUMBER F_DACODCF 6
|
||||
BEGIN
|
||||
PROMPT 18 3 "Codice:"
|
||||
PROMPT 20 1 "Da codice"
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF F_TIPOCF SELECT
|
||||
INPUT CODCF F_CODCF
|
||||
INPUT CODCF F_DACODCF
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
DISPLAY "Occasionale@C" OCCAS
|
||||
DISPLAY "Codice Fiscale@16" COFI
|
||||
DISPLAY "Partita IVA@15" PAIV
|
||||
OUTPUT F_CODCF CODCF
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
OUTPUT F_DACODCF CODCF
|
||||
CHEKTYPE NORMAL
|
||||
GROUP 1
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
STRING F_RAGSOC 50 49
|
||||
NUMBER F_ACODCF 6
|
||||
BEGIN
|
||||
PROMPT 18 4 "R.Soc: "
|
||||
USE LF_CLIFO KEY 2
|
||||
PROMPT 40 1 "A codice"
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF F_TIPOCF SELECT
|
||||
INPUT RAGSOC F_RAGSOC
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
INPUT CODCF F_ACODCF
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
DISPLAY "Occasionale@C" OCCAS
|
||||
DISPLAY "Codice Fiscale@16" COFI
|
||||
DISPLAY "Partita IVA@15" PAIV
|
||||
COPY OUTPUT F_CODCF
|
||||
ADD RUN CG0 -1
|
||||
GROUP 1
|
||||
OUTPUT F_ACODCF CODCF
|
||||
CHEKTYPE NORMAL
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
|
||||
RADIOBUTTON F_FATTSEL 25
|
||||
BEGIN
|
||||
PROMPT 1 6 "Fatture da visualizzare"
|
||||
ITEM "0|Da inviare"
|
||||
ITEM "1|Inviate"
|
||||
ITEM "2|Mai elaborati"
|
||||
ITEM "3|Forzate"
|
||||
ITEM "4|Errate"
|
||||
ITEM "5|Disabilitate"
|
||||
ITEM "6|Tutti"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 65 5
|
||||
BEGIN
|
||||
PROMPT 30 6 "Tipi documento selezionati"
|
||||
END
|
||||
|
||||
BOOLEAN B_TIPO_AUTOFATT
|
||||
BEGIN
|
||||
PROMPT 31 7 "Autofattura"
|
||||
FLAGS ""
|
||||
END
|
||||
BOOLEAN B_TIPO_FATTACQ
|
||||
BEGIN
|
||||
PROMPT 45 7 "Fatt d'Acq"
|
||||
FLAGS ""
|
||||
END
|
||||
BOOLEAN B_TIPO_FATTFISC
|
||||
BEGIN
|
||||
PROMPT 60 7 "Fatt Fisc"
|
||||
FLAGS ""
|
||||
END
|
||||
BOOLEAN B_TIPO_FATTVEN
|
||||
BEGIN
|
||||
PROMPT 75 7 "Fatt Ven"
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
BOOLEAN B_TIPO_FATTSCO
|
||||
BEGIN
|
||||
PROMPT 31 8 "Fatt Scontr"
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
BOOLEAN B_TIPO_NOTC
|
||||
BEGIN
|
||||
PROMPT 45 8 "Nota Cred"
|
||||
FLAGS ""
|
||||
END
|
||||
BOOLEAN B_TIPO_NOTD
|
||||
BEGIN
|
||||
PROMPT 60 8 "Nota Deb"
|
||||
FLAGS ""
|
||||
END
|
||||
BOOLEAN B_TIPO_BOLLADOG
|
||||
BEGIN
|
||||
PROMPT 75 8 "Bolla Dog"
|
||||
FLAGS ""
|
||||
END
|
||||
BOOLEAN B_TIPO_STORDOC
|
||||
BEGIN
|
||||
PROMPT 31 9 "Storno Doc"
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Trasferimento Fatture" 0 2 0 0
|
||||
|
||||
SPREADSHEET F_RIGHE
|
||||
BEGIN
|
||||
PROMPT 0 0 "Righe movimenti"
|
||||
ITEM "Data\n Reg.@8F"
|
||||
ITEM "Tipo\nDocum.@2F"
|
||||
ITEM "Tipo\nDoc. AE.@5F"
|
||||
ITEM "Numero\nDocum.@5F"
|
||||
ITEM "Data\nDocum.@10"
|
||||
ITEM "Aliquota@4"
|
||||
ITEM "Imponibile@10"
|
||||
ITEM "Imposta@10"
|
||||
ITEM "Natura\nIVA@4"
|
||||
ITEM "% Detr.@6"
|
||||
ITEM "C/F@2"
|
||||
PROMPT 1 4 ""
|
||||
ITEM "Codice@6"
|
||||
ITEM "Occas.@16"
|
||||
ITEM "Ragione Sociale@35"
|
||||
ITEM "RF/SO@16"
|
||||
ITEM "Rag. Soc. RF/SO@35"
|
||||
ITEM "Partita IVA@11"
|
||||
ITEM "Codice Fiscale@15"
|
||||
ITEM "Rev.\nCharge@4"
|
||||
ITEM "Auto\nfatt.@3"
|
||||
ITEM "Spedita@5"
|
||||
ITEM "Inviare@5"
|
||||
ITEM "Modificata@10"
|
||||
ITEM "N.\nRegistraz.@10"
|
||||
ITEM "Codici Errori@10"
|
||||
|
||||
ITEM "Ragione Sociale"
|
||||
ITEM "P.A.@4"
|
||||
ITEM "PEC"
|
||||
ITEM "Cod. SDI@10"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
@ -206,234 +74,32 @@ ENDMASK
|
||||
|
||||
PAGE "Riga" -1 -1 69 14
|
||||
|
||||
BOOLEAN A_SPEDITA
|
||||
NUMBER S_CODCF 6
|
||||
BEGIN
|
||||
PROMPT 52 10 "Gia' spedita"
|
||||
FIELD SPEDITA
|
||||
FLAGS "D"
|
||||
PROMPT 1 1 "Cod. C/F"
|
||||
END
|
||||
|
||||
LIST A_INVIO 1 15
|
||||
BEGIN
|
||||
PROMPT 1 10 "Da inviare"
|
||||
ITEM "X|X, Da Inviare"
|
||||
ITEM "I|I, Inviato"
|
||||
ITEM "N|N, Disabilitato"
|
||||
ITEM "F|F, Forzato"
|
||||
ITEM "E|E, Errato"
|
||||
FIELD INVIO
|
||||
END
|
||||
|
||||
BOOLEAN A_FORZATA
|
||||
BEGIN
|
||||
PROMPT 30 10 "Forzatura manuale"
|
||||
FIELD FORZATURA
|
||||
END
|
||||
|
||||
NUMBER A_NUMERO 10
|
||||
BEGIN
|
||||
PROMPT 1 0 "N.Movimento"
|
||||
FLAGS "D"
|
||||
FIELD PROGR
|
||||
END
|
||||
|
||||
DATE A_DATAREG
|
||||
BEGIN
|
||||
PROMPT 26 0 "Data reg."
|
||||
FIELD DATAREG
|
||||
CHEKTYPE REQUIRED
|
||||
END
|
||||
|
||||
LIST A_TIPOCF 1 10
|
||||
BEGIN
|
||||
PROMPT 1 1 "Tipo C/F "
|
||||
ITEM "C|Cliente"
|
||||
ITEM "F|Fornitore"
|
||||
FIELD TIPOCF
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER A_CODCF 6
|
||||
BEGIN
|
||||
PROMPT 26 1 "Cod. C/F"
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF A_TIPOCF SELECT
|
||||
INPUT CODCF A_CODCF
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
DISPLAY "Occasionale@C" OCCAS
|
||||
DISPLAY "Partita IVA" PAIV
|
||||
DISPLAY "Codice fiscale@16" COFI
|
||||
OUTPUT A_CODCF CODCF
|
||||
OUTPUT A_RAGSOC RAGSOC
|
||||
OUTPUT A_PAIV PAIV
|
||||
OUTPUT A_COFI COFI
|
||||
ADD RUN cg0 -1
|
||||
FIELD CODCF
|
||||
END
|
||||
|
||||
STRING A_OCFPI 16
|
||||
BEGIN
|
||||
PROMPT 44 1 "Occas."
|
||||
USE LF_OCCAS
|
||||
INPUT CFPI A_OCFPI
|
||||
DISPLAY "Codice@16" CFPI
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
DISPLAY "Partita IVA" PAIV
|
||||
DISPLAY "Codice fiscale@16" COFI
|
||||
OUTPUT A_OCFPI CFPI
|
||||
OUTPUT A_RAGSOC RAGSOC
|
||||
OUTPUT A_PAIV PAIV
|
||||
OUTPUT A_COFI COFI
|
||||
CHEKTYPE NORMAL
|
||||
GROUP 3
|
||||
ADD RUN cg0 -6
|
||||
FIELD OCFPI
|
||||
END
|
||||
|
||||
STRING A_RAGSOC 50 47
|
||||
STRING S_RAGSOC 50 50
|
||||
BEGIN
|
||||
FIELD RAGSOC
|
||||
PROMPT 1 2 "Ragione Sociale"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING A_RFSO 6
|
||||
BOOLEAN S_ISPA
|
||||
BEGIN
|
||||
FIELD RFSO
|
||||
PROMPT 1 4 "Codice RF/SO: "
|
||||
HELP "Codice Rappresentante Fiscale o Stabile Organizzazione"
|
||||
PROMPT 15 1 "Pubblica Amministrazione"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING A_RAGSOCRFSO 50 47
|
||||
STRING S_PEC 50
|
||||
BEGIN
|
||||
FIELD RAGSOCRFSO
|
||||
PROMPT 1 5 "Rag. Soc. RF/SO"
|
||||
HELP "Ragione Sociale RF/SO"
|
||||
FLAGS "D"
|
||||
PROMPT 1 3 "PEC"
|
||||
END
|
||||
|
||||
STRING A_TIPODOC 2
|
||||
STRING S_CODSDI 7
|
||||
BEGIN
|
||||
PROMPT 23 6 "Tipo doc. "
|
||||
FIELD TIPODOC
|
||||
USE %TPD
|
||||
INPUT CODTAB A_TIPODOC
|
||||
DISPLAY "Tipo " CODTAB
|
||||
DISPLAY "Descrizione @50" S0
|
||||
OUTPUT A_TIPODOC CODTAB
|
||||
WARNING "Tipo documento errato"
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "HUD"
|
||||
ADD NONE
|
||||
END
|
||||
|
||||
LIST A_TIPODOCAE 6
|
||||
BEGIN
|
||||
PROMPT 23 6 "Tipo doc. "
|
||||
ITEM "TD01|TD01"
|
||||
ITEM "TD04|TD04"
|
||||
ITEM "TD05|TD05"
|
||||
ITEM "TD07|TD07"
|
||||
ITEM "TD08|TD08"
|
||||
ITEM "TD10|TD10"
|
||||
ITEM "TD11|TD11"
|
||||
ITEM "ERR0|Errore"
|
||||
END
|
||||
|
||||
STRING A_NUMDOC 7
|
||||
BEGIN
|
||||
PROMPT 42 6 "Num. doc. "
|
||||
FLAGS "U"
|
||||
FIELD NUMDOC
|
||||
CHEKTYPE REQUIRED
|
||||
END
|
||||
|
||||
DATE A_DATADOC
|
||||
BEGIN
|
||||
PROMPT 1 6 "Data doc."
|
||||
FIELD DATADOC
|
||||
CHEKTYPE REQUIRED
|
||||
END
|
||||
|
||||
LIST A_NATURA 1 35
|
||||
BEGIN
|
||||
PROMPT 20 7 "Natura IVA"
|
||||
ITEM "|IVA ordinaria"
|
||||
ITEM "N1|N1 - IVA esclusa ex art 15"
|
||||
ITEM "N2|N2 - IVA non soggetta"
|
||||
ITEM "N3|N3 - IVA non imponibile"
|
||||
ITEM "N4|N4 - IVA esente"
|
||||
ITEM "N5|N5 - IVA in regime del margine"
|
||||
ITEM "N6|N6 - IVA in reverse charge"
|
||||
ITEM "N7|N7 - IVA assolta in altro stato U3"
|
||||
END
|
||||
|
||||
STRING A_ALIQUOTA 4
|
||||
BEGIN
|
||||
PROMPT 1 7 "Aliquota "
|
||||
HELP "Codice aliquota"
|
||||
FIELD CODTAB
|
||||
KEY 1
|
||||
USE %IVA
|
||||
FLAGS "U"
|
||||
INPUT CODTAB A_ALIQUOTA
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Tipo" S1
|
||||
DISPLAY "%@5" R0
|
||||
DISPLAY "Vent." S6
|
||||
DISPLAY "Sospeso" B2
|
||||
OUTPUT A_ALIQUOTA CODTAB
|
||||
CHECKTYPE REQUIRED
|
||||
VALIDATE ZEROFILL_FUNC 2
|
||||
END
|
||||
|
||||
STRING A_DETRAIB 6
|
||||
BEGIN
|
||||
PROMPT 1 8 "% Detraibilita'"
|
||||
HELP "Percentuale di detraibilita'"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER A_IMPONIBILE 12 2
|
||||
BEGIN
|
||||
PROMPT 42 8 "Imponibile"
|
||||
END
|
||||
|
||||
NUMBER A_IMPOSTA 12 2
|
||||
BEGIN
|
||||
PROMPT 42 9 "Imposta "
|
||||
END
|
||||
|
||||
BOOLEAN A_REVERSE
|
||||
BEGIN
|
||||
PROMPT 1 9 "Reverse charge"
|
||||
END
|
||||
|
||||
BOOLEAN A_AUTOFATT
|
||||
BEGIN
|
||||
PROMPT 25 9 "Autofattura"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING A_PAIV 12
|
||||
BEGIN
|
||||
PROMPT 1 3 "Partita IVA "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING A_COFI 16
|
||||
BEGIN
|
||||
PROMPT 33 3 "Codice Fiscale"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING A_CODERR 10
|
||||
BEGIN
|
||||
PROMPT 0 13 "Codici errori"
|
||||
//FLAGS "D"
|
||||
PROMPT 50 3 "Codice SDI"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
308
src/fp/fp0200b.h
308
src/fp/fp0200b.h
@ -1,308 +0,0 @@
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <config.h>
|
||||
#include <execp.h>
|
||||
#include <golem.h>
|
||||
#include <progind.h>
|
||||
#include <reputils.h>
|
||||
#include <tabutil.h>
|
||||
#include <utility.h>
|
||||
#include <agasys.h>
|
||||
#include <printer.h>
|
||||
#include <dongle.h> // dongle()
|
||||
#include <odbcrset.h> // Oracle Recset
|
||||
#include <tsdb.h>
|
||||
#include <xvtdb.h>
|
||||
#include <map> // std::map
|
||||
|
||||
#include "../ve/velib05.h"
|
||||
#include "../cg/cglib03.h"
|
||||
#include "../fe/felib.h"
|
||||
|
||||
#include "fp0200a.h"
|
||||
#include "../tf/tfutility.h"
|
||||
#include <memory>
|
||||
|
||||
#ifdef DISABLED
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// Globals
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
enum return_code
|
||||
{
|
||||
found, // Trovato
|
||||
foundcust, // Trovato in trasfatt
|
||||
foundidcust,// Trovato ma con id customizzato
|
||||
nextmov, // Trovato ma cambiato movimento
|
||||
eof, // EOF rmoviva
|
||||
eofcust, // EOF trasfatt
|
||||
after // File mov su un movimento dopo rispetto a rmoviva
|
||||
};
|
||||
|
||||
// Su DB: X o ''->Da inviare, F->Forzato, I->Inviato, N->Non inviare
|
||||
enum filter_fatt
|
||||
{
|
||||
toSend, // "", "X", "F", "E"
|
||||
sent, // "I"
|
||||
untouched, // "", "X"
|
||||
forced, // "F"
|
||||
disabled, // "N"
|
||||
err, // "E"
|
||||
all // Nessun controllo
|
||||
};
|
||||
|
||||
#define SHEET_GAP 101
|
||||
#define DTE_PROVV "DTE0000001"
|
||||
#define DTR_PROVV "DTR0000001"
|
||||
#define TOLLARANZA 0.05
|
||||
// Flag invio
|
||||
#define FLAG_INVIO "X"
|
||||
#define FLAG_ERRORE "E"
|
||||
#define FLAG_NINVIO "N"
|
||||
#define FLAG_FORZATO "F"
|
||||
#define FLAG_INVIATO "I"
|
||||
#define SPESOMETROBASE "ModuliSirio"
|
||||
#define REG_ATT 1
|
||||
#define REG_PAS 2
|
||||
#define CARATTERI_SPECIALI "àèéìòù°"
|
||||
|
||||
/* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza)
|
||||
* per avere l'inserimento nello sheet corretto */
|
||||
enum spesometroFields{
|
||||
_spedita = A_SPEDITA - SHEET_GAP,
|
||||
_invio = A_INVIO - SHEET_GAP,
|
||||
_forzata = A_FORZATA - SHEET_GAP,
|
||||
_numero = A_NUMERO - SHEET_GAP,
|
||||
_datareg = A_DATAREG - SHEET_GAP,
|
||||
_tipocf = A_TIPOCF - SHEET_GAP,
|
||||
_codcf = A_CODCF - SHEET_GAP,
|
||||
_occas = A_OCFPI - SHEET_GAP,
|
||||
_ragsoc = A_RAGSOC - SHEET_GAP,
|
||||
_rfso = A_RFSO - SHEET_GAP,
|
||||
_ragsocrfso = A_RAGSOCRFSO - SHEET_GAP,
|
||||
_codnum = A_TIPODOC - SHEET_GAP,
|
||||
_codnumAE = A_TIPODOCAE - SHEET_GAP,
|
||||
_numdoc = A_NUMDOC - SHEET_GAP,
|
||||
_datadoc = A_DATADOC - SHEET_GAP,
|
||||
_natura = A_NATURA - SHEET_GAP,
|
||||
_aliquota = A_ALIQUOTA - SHEET_GAP,
|
||||
_detraibile = A_DETRAIB - SHEET_GAP,
|
||||
_imponibile = A_IMPONIBILE - SHEET_GAP,
|
||||
_importoIVA = A_IMPOSTA - SHEET_GAP, // Imposta è già preso
|
||||
_reverse = A_REVERSE - SHEET_GAP,
|
||||
_autofatt = A_AUTOFATT - SHEET_GAP,
|
||||
_paiv = A_PAIV - SHEET_GAP,
|
||||
_codfis = A_COFI - SHEET_GAP,
|
||||
_coderr = A_CODERR - SHEET_GAP
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// Utilities
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Da un id ritorna il tipo doc corrispondente
|
||||
TString getTipoDoc(int id);
|
||||
int getTipoDoc(TString id);
|
||||
|
||||
// Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h)
|
||||
static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str);
|
||||
// Aggiorna il file dst se più vecchio di src (Potrebbe diventare una funzione di XVT.h)
|
||||
bool xvt_fsys_fupdate(const char* src, const char* dst);
|
||||
// Decodifica il tipo di documento per il trasferimento fatture
|
||||
const char * decodTipo(TToken_string* strarr);
|
||||
// Salvo un singolo record
|
||||
//bool saveRec(TToken_string row, bool esportato = false);
|
||||
// Ritorno una data in formato ANSI
|
||||
inline TDate toDate(const char * date) { return TDate(date).string(); }
|
||||
// Salto se la riga non è abilitata
|
||||
#define IF_IS_ENABLED(strarr) if(strcmp(strarr->get(_invio), FLAG_INVIO) != 0 && strcmp(strarr->get(_invio), FLAG_FORZATO) != 0 && strcmp(strarr->get(_invio), FLAG_INVIATO) != 0) continue;
|
||||
// Ritorno il carattere senza accento maiuscolo
|
||||
inline const char * noSpecial(char a);
|
||||
// Ritorno se è ancora valida la bolla doganale senza informazioni fornitore
|
||||
bool bd2017();
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// TFp_record
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Connessione a db
|
||||
SSimple_query& db()
|
||||
{
|
||||
SSimple_query * _db = nullptr;
|
||||
if (_db == nullptr)
|
||||
_db = new SSimple_query();
|
||||
return *_db;
|
||||
}
|
||||
|
||||
// Contenitore di campi di un record di database MSSQL
|
||||
class TFp_record : public TObject
|
||||
{
|
||||
TString8 _table;
|
||||
TToken_string _key;
|
||||
TAssoc_array _fields;
|
||||
|
||||
protected:
|
||||
void copy(const TFp_record& rec) { _table = rec._table; _key = rec._key; _fields = rec._fields; }
|
||||
const TString& var2str(const TString& fld, const TVariant& var) const;
|
||||
|
||||
public:
|
||||
void reset() { _fields.destroy(); }
|
||||
void set(const char* fld, const TVariant& var);
|
||||
void set(const char* fld, long var);
|
||||
void set(const char* fld, const char* var);
|
||||
void set(const char* fld, const real& var);
|
||||
void set(const char* fld, const TString& var);
|
||||
void set(const char* fld, const TDate& var);
|
||||
void set(const char* fld, bool var);
|
||||
const TVariant& get(const char* fld) const;
|
||||
|
||||
bool insert();
|
||||
bool remove();
|
||||
bool search();
|
||||
bool search(const char* k1, const char* k2 = NULL, const char* k3 = NULL);
|
||||
|
||||
virtual TObject* dup() const { return new TFp_record(*this); }
|
||||
virtual bool ok() const { return _table.not_empty(); }
|
||||
|
||||
TFp_record& operator=(const TFp_record& rec) { copy(rec); return *this; }
|
||||
TFp_record(const TFp_record& rec) { copy(rec); }
|
||||
TFp_record(const char* table);
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// TFp_cursors
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/*
|
||||
* Classe per la gestione di RMOVIVA, MOV, TFCUST
|
||||
*/
|
||||
class TFp_cursors : TObject
|
||||
{
|
||||
friend class TCursor;
|
||||
TISAM_recordset* c_rmoviva;
|
||||
TISAM_recordset* c_trasfatt;
|
||||
bool _newMov;
|
||||
bool _newCust;
|
||||
// Se trovo un record custom devo saltare tutti quelli che trovo successivamente, per fare ciò utilizzo una TToken_string
|
||||
TToken_string _alqCust;
|
||||
|
||||
TRectype _next(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento
|
||||
TRectype _nextCust(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento tra quelli custom
|
||||
bool checkEnabled(TISAM_recordset* origCur);
|
||||
public:
|
||||
//TFp_cursors();
|
||||
~TFp_cursors();
|
||||
long int getIvaItems() { return c_rmoviva->items(); }
|
||||
long int getIvaPos() { return c_rmoviva->cursor()->pos(); }
|
||||
TRectype getIva() { return c_rmoviva->cursor()->curr(); }
|
||||
int next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TString& codcf, TString& ocfpi); // Legge tutto il prossimo movimento, in importi mette per ogni codiva la somma
|
||||
|
||||
int updateFilters(const char tipocf, const long codcf, TDate dal, TDate al, int cod = toSend);
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// TFp_mask
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class TFp_mask : public TAutomask
|
||||
{
|
||||
friend class TFp_cursors;
|
||||
|
||||
TMaskmode _mode;
|
||||
bool _sheet_dirty;
|
||||
bool _filter_changed;
|
||||
|
||||
protected:
|
||||
virtual void next_page(int p);
|
||||
TRecnotype nuovo_progr() const;
|
||||
void changeInvio(TString tipocf, TString codcf, TString numdoc, TString invio) const;
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
void openJava();
|
||||
|
||||
public:
|
||||
void setFilterChanged() { _filter_changed = true; }
|
||||
void load_sheet();
|
||||
TFp_mask(TString msk);
|
||||
~TFp_mask();
|
||||
// Carico i tipi documento all'inizio
|
||||
void loadConfig();
|
||||
// Salvo i tipi documento
|
||||
void saveConfig();
|
||||
// Salvo tutti i records
|
||||
bool saveAll();
|
||||
// Controllo tutti i records
|
||||
bool checkAll();
|
||||
// Testo validità record
|
||||
bool checkRec(TPrinter* stampa, TToken_string* rec);
|
||||
// Controllo che siano presenti records
|
||||
bool checkNotEmpty();
|
||||
// Controllo finale prima di inviare il tutto, se ci sono fatture
|
||||
// con più volte lo stesso codice aliquota disabilito il precedente
|
||||
void theFinalCheckDown();
|
||||
// Mette il flag di invio = [flag] per la riga numero [nrow]
|
||||
void flagRow(int nrow, TString flag);
|
||||
// Salto se la riga ha un tipo invio non del filtro
|
||||
bool checkInvio(const TString& invio);
|
||||
};
|
||||
|
||||
// Funzione inline di stampa
|
||||
inline void printError(TPrinter* stampa, TString movimento, TString documento, TString msgerr);
|
||||
TFp_mask& msk();
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// TFp_app
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct clifoDoc
|
||||
{
|
||||
long contCliFo;
|
||||
long countDoc;
|
||||
std::map<TString, long> docID;
|
||||
};
|
||||
|
||||
class TFp_app : public TSkeleton_application
|
||||
{
|
||||
TAnagrafica _ditta;
|
||||
TString16 _cofi;
|
||||
TFilename _dbname;
|
||||
TLog_report* _log;
|
||||
TString _logTFF;
|
||||
bool _append;
|
||||
TString myrfso;
|
||||
static long header;
|
||||
// Solitamente nei programmi di campo cerco di sfruttare le classi interne ma per mancanza di tempo sono costretto a usare l'std::vector
|
||||
std::map<TString, clifoDoc> mCliDoc;
|
||||
|
||||
private:
|
||||
int parse_line(const TString& line, TString& var, TString& val) const;
|
||||
bool create_table(TScanner& TFF, const TString& table);
|
||||
TString getKey(TToken_string* strarr);
|
||||
TString getHeader(TToken_string* strarr);
|
||||
TString getBody(TToken_string* strarr, bool add = true);
|
||||
bool tff0100(TSheet_field& sheet); // Header esportazione
|
||||
bool tff0200(TString key); // Anagrafica ditta
|
||||
bool tff0300(TString key, TRectype r_ana); // Rappresentante fiscale ditta
|
||||
bool tff0400(TSheet_field& sheet); // Anagrafica clifo
|
||||
bool tff0700(TSheet_field& sheet); // Testata documento
|
||||
bool tff2200(TToken_string* strarr, int nriga); // Riepilogo aliquote
|
||||
bool tff3100(TToken_string* strarr, TRectype r_ana); // Rappresentante fiscale clifo
|
||||
bool setEsportato(TSheet_field& sheet);
|
||||
bool emptyTables(TString key); // Cancella da tutte le tabelle i record con chiave key
|
||||
|
||||
protected:
|
||||
void log(int severity, const char* msg);
|
||||
bool show_log();
|
||||
bool syncronizeDB();
|
||||
bool verifyDB(const bool create);
|
||||
|
||||
public:
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
virtual void main_loop();
|
||||
bool send(TFp_mask* msk);
|
||||
|
||||
TFp_app() : _log(NULL) {}
|
||||
};
|
||||
|
||||
#endif
|
@ -12,8 +12,6 @@
|
||||
|
||||
#include "fp0.h"
|
||||
#include "fp0300a.h"
|
||||
#include <memory>
|
||||
#include <map>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// Globals
|
||||
@ -363,7 +361,6 @@ void TPA_mask::next_page(int p)
|
||||
{
|
||||
TSheet_field& sf = sfield(F_DOCS);
|
||||
fill();
|
||||
sf.force_update();
|
||||
_filter_changed = false;
|
||||
}
|
||||
}
|
||||
@ -451,6 +448,9 @@ void TDoc2Paf::main_loop()
|
||||
ndocs = 0;
|
||||
FOR_EACH_ARRAY_ROW(sht, r, riga)
|
||||
{
|
||||
if (!pi.add_status(1))
|
||||
break;
|
||||
|
||||
if (riga->starts_with("X"))
|
||||
{
|
||||
const int anno = riga->get_int(mask.sfield(F_DOCS).cid2index(S_ANNO));
|
||||
@ -472,8 +472,6 @@ void TDoc2Paf::main_loop()
|
||||
ndocs++;
|
||||
}
|
||||
}
|
||||
if (!pi.add_status(1))
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ndocs > 0)
|
||||
|
@ -851,7 +851,7 @@ const TString& TDoc_fp::converti_prezzo(const real& prezzo) const
|
||||
{
|
||||
TCurrency app(prezzo, _doc_cambio._cod_val, _doc_cambio._cambio, true);
|
||||
app.change_to_euro_val();
|
||||
ret << app.get_num().stringa_eng(0,8);
|
||||
ret << app.get_num().string(0,8);
|
||||
}
|
||||
else
|
||||
ret << prezzo;
|
||||
@ -1501,10 +1501,11 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
// <DatiRitenuta>
|
||||
if (sp.tipo_ritenuta() == 'F')
|
||||
{
|
||||
paf0700f.set("P7_TIPORITENUTA", cliente.fisica() ? "RT01" : "RT02");
|
||||
paf0700f.set("P7_IMPORTORIT", converti_prezzo(doc.imponibile() * sp.perc() / CENTO));
|
||||
paf0700f.set("P7_ALIQUOTARIT", TCodiceIVA(sp.cod_iva()).percentuale());
|
||||
paf0700f.set("P7_CAUSPAGAM", cache().get("CA7", to_tstring(sp.caus_770()), "S2"));
|
||||
paf0700f.set("P7_TIPORITENUTA", cliente.fisica() ? "RT01" : "RT02");
|
||||
paf0700f.set("P7_IMPORTORIT", converti_prezzo(doc.imponibile() * sp.perc() / CENTO));
|
||||
paf0700f.set("P7_ALIQUOTARIT", TCodiceIVA(sp.cod_iva()).percentuale());
|
||||
static TString caus770; caus770.cut(0); caus770.format("%02d", sp.caus_770());
|
||||
paf0700f.set("P7_CAUSPAGAM", cache().get("CA7", caus770, "S2"));
|
||||
}
|
||||
// </DatiRitenuta>
|
||||
}
|
||||
|
@ -4,4 +4,5 @@ Picture = <cg01>
|
||||
Module = fp
|
||||
Flags = ""
|
||||
Item_01 = "Configurazione", "fp0 -0", ""+
|
||||
Item_02 = "Invio fatture", "fp0 -2", ""
|
||||
Item_02 = "Invio fatture", "fp0 -2", ""
|
||||
Item_03 = "Inserimento riferimenti C/F", "fp0 -1", ""
|
@ -13,6 +13,7 @@
|
||||
#include <treectrl.h>
|
||||
#include <urldefid.h>
|
||||
#include <utility.h>
|
||||
#include <xvtdb.h>
|
||||
|
||||
static int txt_sort(const TSortable& o1, const TSortable& o2, void* jolly)
|
||||
{
|
||||
@ -471,7 +472,7 @@ TInfo_mask::TInfo_mask() : TProperty_sheet(TR("Informazioni"))
|
||||
}
|
||||
|
||||
TFilename temp; temp.tempdir();
|
||||
TString strdb, strsql;
|
||||
TString strdb, strsql, strsqlapi = SQLAPIV;
|
||||
{
|
||||
TISAM_recordset rs("");
|
||||
strdb = rs.driver_version();
|
||||
@ -555,6 +556,7 @@ TInfo_mask::TInfo_mask() : TProperty_sheet(TR("Informazioni"))
|
||||
add_prop(TR("Libreria GUI"), strwx);
|
||||
add_prop(TR("Libreria PDF"), printer);
|
||||
add_prop(TR("Libreria SQL"), strsql);
|
||||
add_prop(TR("Libreria SQLAPI"), strsqlapi);
|
||||
add_prop(TR("Libreria Matematica"), "GreenLeaf Library");
|
||||
|
||||
#ifdef _MSC_VER
|
||||
@ -567,11 +569,11 @@ TInfo_mask::TInfo_mask() : TProperty_sheet(TR("Informazioni"))
|
||||
else
|
||||
{
|
||||
// 1900 -> 14, 1910 -> 15
|
||||
cver = _MSC_VER;
|
||||
cver = _MSC_VER / 100 - 5 + _MSC_VER % 100 / 10;
|
||||
csub = _MSC_VER % 100 % 10; // Is that a thing?
|
||||
}
|
||||
add_prop(TR("Libreria C++"), format("Microsoft Visual Studio %d.%d", cver, csub));
|
||||
TString msg = "Microsoft Visual Studio"; msg << cver << "." << csub;
|
||||
add_prop(TR("Libreria C++"), msg);
|
||||
#endif
|
||||
|
||||
set_read_only();
|
||||
|
@ -1285,13 +1285,6 @@ const char* real::stringa (int len, int dec, char pad) const
|
||||
return str;
|
||||
}
|
||||
|
||||
// Certified 99%
|
||||
const char* real::stringa_eng(int len, int dec, char pad) const
|
||||
{
|
||||
char* str = const_cast<char*>(string(len, dec, pad));
|
||||
return str;
|
||||
}
|
||||
|
||||
// Certified 99%
|
||||
const char* real::stringe(int len, int dec, char pad) const
|
||||
{
|
||||
|
@ -115,9 +115,6 @@ public:
|
||||
// @cmember Trasforma un reale in stringa (chiama <mf real::string>), ma
|
||||
// ritorna il formato italiano
|
||||
const char* stringa(int len = 0, int dec = UNDEFINED, char pad = ' ') const;
|
||||
// @cmember Trasforma un reale in stringa (chiama <mf real::string>), ma
|
||||
// ritorna il formato inglese
|
||||
const char* stringa_eng(int len = 0, int dec = UNDEFINED, char pad = ' ') const;
|
||||
// @cmember Trasforma un reale in stringa (chiama <mf real::string>),
|
||||
//ma ritorna il formato atteso da Excel
|
||||
const char* stringe(int len = 0, int dec = UNDEFINED, char pad = ' ') const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user