Patch level : XX.126

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Riportata la versione aga 1.7 patch 126 sul main trunk


git-svn-id: svn://10.65.10.50/trunk@9819 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2001-07-24 13:28:55 +00:00
parent f7af9ddfa9
commit 63ac8f5406
126 changed files with 8529 additions and 1586 deletions

View File

@ -107,23 +107,17 @@ BEGIN
HELP "Provincia dell'intestatario"
END
LIST F_STATO 20
STRING F_STATO 2
BEGIN
PROMPT 2 6 "Stato "
HELP "Codice dello stato cui si riferisce la partita IVA"
ITEM " |Italia o extra CEE"
ITEM "BE|Belgio"
ITEM "DE|Germania"
ITEM "DK|Danimarca"
ITEM "EL|Grecia"
ITEM "ES|Spagna"
ITEM "FR|Francia"
ITEM "GB|Gran Bretagna"
ITEM "IE|Irlanda"
ITEM "IT|Italia"
ITEM "LU|Lussemburgo"
ITEM "NL|Olanda"
ITEM "PT|Portogallo"
FLAGS "U"
USE %SCE
INPUT CODTAB F_STATO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_STATO CODTAB
CHECKTYPE NORMAL
END
STRING F_PAIV 12

View File

@ -124,24 +124,18 @@ BEGIN
PROMPT 12 5 "Partita IVA "
END
LIST FLD_AF1_STATOPAIV 20
STRING FLD_AF1_STATOPAIV 2
BEGIN
PROMPT 13 6 "Stato "
FIELD LF_ANAG->STATOPAIV
HELP "Codice dello stato cui si riferisce la partita IVA"
ITEM " |Italia o extra CEE"
ITEM "BE|Belgio"
ITEM "DE|Germania"
ITEM "DK|Danimarca"
ITEM "EL|Grecia"
ITEM "ES|Spagna"
ITEM "FR|Francia"
ITEM "GB|Gran Bretagna"
ITEM "IE|Irlanda"
ITEM "IT|Italia"
ITEM "LU|Lussemburgo"
ITEM "NL|Olanda"
ITEM "PT|Portogallo"
PROMPT 13 6 "Stato "
FIELD LF_ANAG->STATOPAIV
HELP "Codice dello stato cui si riferisce la partita IVA"
FLAGS "U"
USE %SCE
INPUT CODTAB FLD_AF1_STATOPAIV
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FLD_AF1_STATOPAIV CODTAB
CHECKTYPE NORMAL
END
STRING FLD_AF1_PAIV 12
@ -269,7 +263,7 @@ END
STRING FLD_ANAG_UTAGG 10
BEGIN
PROMPT 56 16 "Utente "
FLAGS "D"
FLAGS "D"
END
ENDPAGE

View File

@ -97,24 +97,18 @@ BEGIN
PROMPT 0 4 "Partita IVA "
END
LIST FLD_AG1_STATOPAIV 20
STRING FLD_AG1_STATOPAIV 2
BEGIN
PROMPT 2 5 "Stato "
FIELD LF_ANAG->STATOPAIV
HELP "Codice dello stato cui si riferisce la partita IVA"
ITEM " |Italia o extra CEE"
ITEM "BE|Belgio"
ITEM "DE|Germania"
ITEM "DK|Danimarca"
ITEM "EL|Grecia"
ITEM "ES|Spagna"
ITEM "FR|Francia"
ITEM "GB|Gran Bretagna"
ITEM "IE|Irlanda"
ITEM "IT|Italia"
ITEM "LU|Lussemburgo"
ITEM "NL|Olanda"
ITEM "PT|Portogallo"
FLAGS "U"
USE %SCE
INPUT CODTAB FLD_AG1_STATOPAIV
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FLD_AG1_STATOPAIV CODTAB
CHECKTYPE NORMAL
END
STRING FLD_AG1_PAIV 12

View File

@ -135,5 +135,6 @@
#define LST_IN_TIPOSOGDEL 199
#define FLD_IN_CODSOGDEL 200
#define FLD_IN_DESSOGDEL 201
#define CHK_IN_NONOBBSTAT 202
#endif // __BA4300_H

View File

@ -791,7 +791,7 @@ BEGIN
GROUP 2
END
GROUPBOX DLG_NULL 76 6
GROUPBOX DLG_NULL 76 7
BEGIN
PROMPT 1 4 "Soggetto Obbligato INTRA"
FLAGS "R"
@ -827,15 +827,21 @@ BEGIN
FIELD FREQACQ
END
BOOLEAN CHK_IN_NONOBBSTAT
BEGIN
PROMPT 2 9 "Soggetto non obbligato alla dei valori statistico, consegna e trasporto"
FIELD NONOBBSTAT
END
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 1 10 "Soggetto Delegato INTRA"
PROMPT 1 11 "Soggetto Delegato INTRA"
FLAGS "R"
END
LIST LST_IN_TIPOSOGDEL 1 10
BEGIN
PROMPT 1 11 "Tipo persona "
PROMPT 1 12 "Tipo persona "
ITEM "F|Fisica"
ITEM "G|Giuridica"
FIELD TIPOSOGDEL
@ -843,7 +849,7 @@ END
NUMBER FLD_IN_CODSOGDEL 6
BEGIN
PROMPT 35 11 "Codice "
PROMPT 35 12 "Codice "
USE LF_ANAG
INPUT TIPOA LST_IN_TIPOSOGDEL SELECT
INPUT CODANAGR FLD_IN_CODSOGDEL
@ -854,11 +860,12 @@ BEGIN
OUTPUT FLD_IN_DESSOGDEL RAGSOC
FIELD CODSOGDEL
CHECKTYPE NORMAL
ADD RUN ba4 -1
END
STRING FLD_IN_DESSOGDEL 50
BEGIN
PROMPT 1 12 "Denominazione "
PROMPT 1 13 "Denominazione "
USE LF_ANAG KEY 2
INPUT TIPOA LST_IN_TIPOSOGDEL SELECT
INPUT RAGSOC FLD_IN_DESSOGDEL
@ -867,6 +874,7 @@ BEGIN
DISPLAY "Codice" CODANAGR
COPY OUTPUT FLD_IN_CODSOGDEL
CHECKTYPE NORMAL
ADD RUN ba4 -1
END
ENDPAGE

View File

@ -440,6 +440,11 @@ bool TInstallmodule_app::preload_mask()
return TRUE;
}
bool TInstallmodule_app::some_to_load()
{
return _m->get_bool(F_DEFAULTSDATA);
}
void TInstallmodule_app::main_loop()
{
bool ok =TRUE;
@ -449,7 +454,7 @@ void TInstallmodule_app::main_loop()
preload_mask();
if (_m->run()!=K_QUIT)
{
if (_m->get_bool(F_DEFAULTSDATA))
if (some_to_load())
{
install_firm();
install_com();
@ -554,6 +559,8 @@ int main(int argc,char** argv)
r=bainst07(argc,argv); // pre/post installazione contabilità generale:
else if (mod == "at")
r=bainst17(argc, argv);// pre/post installazione avis
else if (mod == "in")
r=bainst18(argc, argv);// pre/post installazione intra
else if (mod == "ve")
r=bainst31(argc, argv);// pre/post installazione vendite:
else if (mod == "mg")

View File

@ -6,6 +6,7 @@
int bainst00(int argc, char** argv);
int bainst07(int argc, char** argv);
int bainst17(int argc, char** argv);
int bainst18(int argc, char** argv);
int bainst31(int argc, char** argv);
int bainst32(int argc, char** argv);
int bainst35(int argc, char** argv);
@ -59,6 +60,8 @@ protected:
virtual int module_number() const pure;
virtual bool preload_mask();
virtual bool post_installer() {return TRUE;}
virtual bool some_to_load();
virtual bool install_com() ; // setta i dati comuni
virtual bool install_firm() ; // setta i dati ditta

View File

@ -16,10 +16,11 @@ protected:
virtual bool modal() const {return TRUE;}
virtual int module_number() const {return 0;}
virtual bool install_firm() {return TRUE;} // no firm installation
// virtual bool install_com() {return TRUE;} // no com installation
virtual bool install_com();
virtual bool load_default_data() const ;
virtual bool post_installer();
virtual bool preload_mask();
virtual bool some_to_load();
public:
virtual ~TInstall_BA () {}
@ -82,12 +83,41 @@ bool TInstall_BA::post_installer()
return TRUE;
}
bool TInstall_BA::some_to_load()
{
return _m->get_bool(F_TAB_CEE) || TInstallmodule_app::some_to_load();
}
bool TInstall_BA::preload_mask()
{
if (!test_database())
{
_m->set(F_TAB_CEE," ");
_m->disable(F_TAB_CEE);
}
else
{
TTable sce("%SCE");
const bool empty = sce.first() != NOERR;
if (empty)
_m->set(F_TAB_CEE,"X");
}
return TInstallmodule_app::preload_mask();
}
bool TInstall_BA ::install_com()
{
bool ok=TRUE;
TStd_filename txtfile;
if (txtfile.check(TRUE,"lfiva.txt"))
if (_m->get_bool(F_DEFAULTSDATA) && txtfile.check(TRUE,"lfiva.txt"))
{
TSystemisamfile tabcom(LF_TABCOM);
tabcom.load((const char *)txtfile);
}
if (_m->get_bool(F_TAB_CEE) && txtfile.check(TRUE,"batbsce.txt"))
{
TSystemisamfile tabcom(LF_TABCOM);
tabcom.load((const char *)txtfile);

View File

@ -1,2 +1,2 @@
#include "bainsta.h"
#define F_TAB_CEE 102

View File

@ -10,6 +10,12 @@ BEGIN
GROUP 1
END
BOOL F_TAB_CEE
BEGIN
PROMPT 2 4 "Installa Tabella Stati CEE"
GROUP 1
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -11 -1 "~Conferma"

37
ba/bainst18.cpp Executable file
View File

@ -0,0 +1,37 @@
#include <applicat.h>
#include <mask.h>
#include <config.h>
#include <utility.h>
#include <isam.h>
#include <tabutil.h>
#include "bainst.h"
#include "bainst18.h"
class TInstall_IN : public TInstallmodule_app
{
TMask * _m;
protected:
virtual bool load_default_data() const ;
virtual int module_number() const {return 18;}
virtual bool post_installer() { return TRUE; }
public:
virtual ~TInstall_IN () {}
};
bool TInstall_IN::load_default_data() const
{
TTable icc("%ICC");
const bool empty = icc.first() != NOERR;
return empty;
}
int bainst18(int argc, char** argv)
{
TInstall_IN app;
app.run(argc, argv);
return 0;
}

1
ba/bainst18.h Executable file
View File

@ -0,0 +1 @@
#include "bainsta.h"

21
ba/bainst18.uml Executable file
View File

@ -0,0 +1,21 @@
#include "bainst18.h"
PAGE "Installazione MG" -1 -1 78 8
// GROUP 1 = PRE-INSTALLATION
// GROUP 2 = POST-INSTALLATION
BOOL F_DEFAULTSDATA
BEGIN
PROMPT 2 2 "Carica le tabelle INTRA"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -11 -1 "~Conferma"
MESSAGE EXIT,K_ENTER
PICTURE BMP_OK
END
ENDPAGE
ENDMASK

90
ba/bastnoc.uml Executable file
View File

@ -0,0 +1,90 @@
#include "ba3200.h"
PAGE "Stampa Nomenclatura combinata" -1 -1 50 8
STRING F_INIZIO1 4
BEGIN
PROMPT 4 1 "Da codice "
FLAGS "U"
USE %NOC
INPUT CODTAB[1,4] F_INIZIO1
INPUT CODTAB[5,6] F_INIZIO2
INPUT CODTAB[6,8] F_INIZIO3
DISPLAY "Codice 1" CODTAB[1,4]
DISPLAY "Codice 2" CODTAB[5,6]
DISPLAY "Codice 3" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT F_INIZIO1 CODTAB[1,4]
OUTPUT F_INIZIO2 CODTAB[5,6]
OUTPUT F_INIZIO3 CODTAB[7,8]
FIELD CODTAB[1,4]
GROUP 1
END
STRING F_INIZIO2 2
BEGIN
PROMPT 22 1 ""
FLAGS "U"
COPY ALL F_INIZIO1
FIELD CODTAB[5,6]
GROUP 1
END
STRING F_INIZIO3 2
BEGIN
PROMPT 27 1 ""
FLAGS "U"
COPY ALL F_INIZIO1
FIELD CODTAB[7,8]
GROUP 1
END
STRING F_FINE1 4
BEGIN
PROMPT 4 3 "A codice "
FLAGS "UZ"
COPY USE F_INIZIO1
INPUT CODTAB[1,4] F_FINE1
INPUT CODTAB[5,6] F_FINE2
INPUT CODTAB[6,8] F_FINE3
DISPLAY "Codice 1" CODTAB[1,4]
DISPLAY "Codice 2" CODTAB[5,6]
DISPLAY "Codice 3" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT F_FINE1 CODTAB[1,4]
OUTPUT F_FINE2 CODTAB[5,6]
OUTPUT F_FINE3 CODTAB[7,8]
FIELD CODTAB[1,4]
GROUP 2
END
STRING F_FINE2 2
BEGIN
PROMPT 22 3 ""
FLAGS "U"
COPY ALL F_FINE1
FIELD CODTAB[5,6]
GROUP 2
END
STRING F_FINE3 2
BEGIN
PROMPT 27 3 ""
FLAGS "U"
COPY ALL F_FINE1
FIELD CODTAB[7,8]
GROUP 2
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

42
ba/bastsce.uml Executable file
View File

@ -0,0 +1,42 @@
#include "../ba/ba3200.h"
PAGE "Stampa Stati CEE" -1 -1 50 8
STRING F_INIZIO1 2
BEGIN
PROMPT 4 1 "Da codice "
USE %SCE
INPUT CODTAB F_INIZIO1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_INIZIO1 CODTAB
FIELD CODTAB
FLAGS "U"
GROUP 1
END
STRING F_FINE1 2
BEGIN
PROMPT 4 3 "A codice "
COPY USE F_INIZIO1
INPUT CODTAB F_FINE1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_FINE1 CODTAB
FIELD CODTAB
GROUP 2
FLAGS "U"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

15
ba/batbnoc.rpt Executable file
View File

@ -0,0 +1,15 @@
[Headers]
80
Tabella Nomenclatura combinata
1|@3g%s|Codice
1|@17g%s|Denominazione
1|@69g%s|Obbl.
1|@75g%s|Um.S.
[Rows]
1|CODTAB[1,4]|@3g@4,ls
1|CODTAB[5,6]|@10g@2,ls
1|CODTAB[7,8]|@14g@2,ls
1|S0|@17g@50,ls
1|S4|@69g@1,ls
1|S5|@75g@2,ls

View File

@ -13,18 +13,43 @@ BEGIN
PROMPT 1 1 "@bCodice Nomenclatura"
END
STRING NOC_CODICE1 8
STRING NOC_CODICE1 4
BEGIN
PROMPT 2 3 "Codice "
FLAGS "U"
USE %NOC
INPUT CODTAB[1,8] NOC_CODICE1
DISPLAY "Codice@8" CODTAB
INPUT CODTAB[1,4] NOC_CODICE1
INPUT CODTAB[5,6] NOC_CODICE2
INPUT CODTAB[6,8] NOC_CODICE3
DISPLAY "Codice" CODTAB[1,4]
DISPLAY "" CODTAB[5,6]
DISPLAY "" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT NOC_CODICE1 CODTAB[1,8]
OUTPUT NOC_DESCR S0
OUTPUT NOC_CODICE1 CODTAB[1,4]
OUTPUT NOC_CODICE2 CODTAB[5,6]
OUTPUT NOC_CODICE3 CODTAB[7,8]
CHECKTYPE REQUIRED
FIELD CODTAB[1,8]
FIELD CODTAB[1,4]
KEY 1
VALIDATE REQIF_FUNC 1 NOC_CODICE2
END
STRING NOC_CODICE2 2
BEGIN
PROMPT 21 3 ""
FLAGS "U"
COPY ALL NOC_CODICE1
FIELD CODTAB[5,6]
KEY 1
VALIDATE REQIF_FUNC 1 NOC_CODICE3
END
STRING NOC_CODICE3 2
BEGIN
PROMPT 26 3 ""
FLAGS "U"
COPY ALL NOC_CODICE1
FIELD CODTAB[7,8]
KEY 1
END
@ -44,7 +69,8 @@ ENDPAGE
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 1 8 "@bUnita' di misura supplementare"
FLAGS "R"
FLAGS "R"
GROUP 1
END
LIST NOC_UMS_OBB 1 50
@ -55,6 +81,7 @@ BEGIN
ITEM "C|Obbligatoria per cessioni"
ITEM "E|Obbligatoria per acquisti e cessioni"
FIELD S4
GROUP 1
END
STRING NOC_UMS_CODICE 2
@ -69,6 +96,7 @@ BEGIN
OUTPUT NOC_UMS_DESCR S0
CHECKTYPE NORMAL
FIELD S5
GROUP 1
END
STRING NOC_UMS_DESCR 50
@ -80,6 +108,7 @@ BEGIN
DISPLAY "Codice" CODTAB
COPY OUTPUT NOC_UMS_CODICE
CHECKTYPE NORMAL
GROUP 1
END
ENDMASK

2
ba/batbsce.h Executable file
View File

@ -0,0 +1,2 @@
#define F_CODICE 101
#define F_DESCR 102

9
ba/batbsce.rpt Executable file
View File

@ -0,0 +1,9 @@
[Headers]
80
Tabella STati CEE
1|@3g%s|Codice
1|@10g%s|Denominazione
[Rows]
1|CODTAB|@3g@4,ls
1|S0|@10g@50,ls

27
ba/batbsce.txt Executable file
View File

@ -0,0 +1,27 @@
[Header]
Version=199518
Fields=COD,3|CODTAB,25|S0,70|S1,70|S2,70|S3,70|S4,20|S5,20|S6,5|S7,5
Fields=S8,5|S9,5|S10,5|S11,5|I0,7|I1,7|I2,7|I3,7|I4,7|I5,7
Fields=I6,7|I7,7|I8,7|I9,7|I10,7|I11,7|I12,7|I13,7|I14,7|R0,18
Fields=R1,18|R2,18|R3,18|R4,18|R5,18|R6,18|R7,18|R8,18|R9,18|R10,18
Fields=R11,18|R12,18|R13,18|R14,18|R15,18|R16,18|R17,18|R18,18|R19,18|D0,10
Fields=D1,10|D2,10|D3,10|D4,10|B0,1|B1,1|B2,1|B3,1|B4,1|B5,1
Fields=B6,1|B7,1|B8,1|B9,1|FPC,1
[Data]
SCE||Italia o Extra CEE|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|AT|Austria|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|BE|Belgio|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|DE|Germania|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|DK|Danimarca|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|EL|Grecia|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|ES|Spagna|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|FI|Finlandia|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|FR|Francia|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|GB|Gran Bretagna|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|IE|Irlanda|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|IT|Italia|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|LU|Lussemburgo|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|NL|Olanda|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|PT|Portogallo|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |
SCE|SE|Svezia|||||||||||||||||||||||||||||||||||||||||||||||||||| | | | | | | | | | |

45
ba/batbsce.uml Executable file
View File

@ -0,0 +1,45 @@
#include "batbsce.h"
TOOLBAR "Toolbar" 0 19 0 3
#include <toolbar.h>
ENDPAGE
PAGE "Stati CEE" -1 -1 78 18
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 1 1 "@bStati CEE"
END
STRING F_CODICE 2
BEGIN
PROMPT 2 3 "Codice "
FLAGS "U"
USE %SCE
INPUT CODTAB F_CODICE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODICE CODTAB
CHECKTYPE REQUIRED
FIELD CODTAB
KEY 1
END
STRING F_DESCR 50
BEGIN
PROMPT 2 5 "Descrizione "
USE %SCE KEY 2
INPUT S0 F_DESCR
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@8" CODTAB
COPY OUTPUT F_CODICE
CHECKTYPE REQUIRED
FIELD S0
KEY 2
END
ENDPAGE
ENDMASK

View File

@ -1,3 +1,3 @@
9
1
%nditte|0|0|559|0|Ditte|#6||
%nditte|0|0|560|0|Ditte|#6||

View File

@ -1,5 +1,5 @@
9
52
53
CODDITTA|3|5|0|
TIPOA|1|1|0|
CODANAGR|3|5|0|
@ -52,6 +52,7 @@ FREQCES|1|1|0|Frequenza riepiloghi cessioni INTRA
FREQACQ|1|1|0|Frequenza riepiloghi acquisti INTRA
TIPOSOGDEL|1|1|0|Tipo anagrafico del soggetto delegato
CODSOGDEL|3|6|0|Codice del soggetto delegato
NONOBBSTAT|8|1|0|Non obbligato alla compilazione del valore statistico se mensile
4
CODDITTA|
UPPER(RAGSOC)|X

View File

@ -26,6 +26,7 @@ protected:
int calcola_stato_attivita();
bool cespite_ok() const;
void set_cespi_filter();
public:
int stato_attivita() const { return _staat; }
@ -59,8 +60,9 @@ void TQuery_mask::on_search_event(TOperable_field& o)
TRelation rel(LF_CESPI);
TString filter;
if (!field(F_IMPIANTO).empty())
filter << CESPI_CODIMP << "==" << get(F_IMPIANTO);
const TEdit_field& imp = efield(F_IMPIANTO);
if (imp.active() && !imp.empty())
filter << CESPI_CODIMP << "=\"" << imp.get() << '"';
TSorted_cursor cur(&rel, order, filter);
TCursor_sheet sht(&cur, fields, "Cespiti", header, 0, 1);
@ -107,6 +109,24 @@ bool TQuery_mask::cespite_ok() const
return ok;
}
void TQuery_mask::set_cespi_filter()
{
TString filter;
if (get(F_SELECT)[0] == 'I') // Filtro per impianto
{
const TEdit_field& imp = efield(F_IMPIANTO);
if (!imp.empty())
filter << CESPI_CODIMP << "=\"" << imp.get() << '"';
}
else // Filtro per attività
{
filter << '(' << CESPI_CODCGRA << "=\"" << get(F_GRUPPO) << "\")";
filter << "&&(" << CESPI_CODSPA << "=\"" << get(F_SPECIE) << "\")";
}
efield(F_IDCESPITE).browse()->set_filter(filter);
efield(F_DESC).browse()->set_filter(filter);
}
bool TQuery_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
@ -117,10 +137,16 @@ bool TQuery_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
if (e == fe_init || e == fe_modify)
{
const bool can_create = calcola_stato_attivita() != 3; // Bollato non stampato
enable(DLG_NEWREC, can_create && !field(F_CATEGORIA).empty());
enable(DLG_NEWREC, can_create && !field(F_SPECIE).empty() && !field(F_CATEGORIA).empty());
enable(DLG_DELREC, can_create);
set_cespi_filter();
}
break;
case F_SELECT:
case F_IMPIANTO:
if (e == fe_modify)
set_cespi_filter();
break;
case F_SEARCH1:
case F_SEARCH2:
case F_SEARCH3:
@ -144,7 +170,7 @@ bool TQuery_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
if (e == fe_init || e == fe_modify)
{
const bool bollati = stato_attivita() == 3;
enable(DLG_NEWREC, !bollati && !o.empty());
enable(DLG_NEWREC, !bollati && !o.empty() && !field(F_SPECIE).empty());
}
if (e == fe_close && o.empty() && !cespite_ok())
return error_box("È necessario specificare la categoria del nuovo cespite");
@ -152,7 +178,6 @@ bool TQuery_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
}
break;
case F_IDCESPITE:
case F_IDCESPITE_I:
if (e == fe_close)
{
if (stato_attivita() == 3 && !cespite_ok())
@ -186,6 +211,13 @@ class TEdit_mask : public TAutomask
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual bool on_key(KEY k);
bool one_compiled(const short* f) const;
TCurrency sum_fields(const short* f) const;
bool test_ammissibilita_dati();
bool test_ammissibilita_saldi();
bool test_ammissibilita_fondi();
public:
void set_stato_attivita(int sa) { _staat = sa; }
@ -194,9 +226,35 @@ public:
void set_tipo_cespite(TTipo_cespite tc) { _tipo = tc; }
TTipo_cespite tipo_cespite() const { return _tipo; }
void protect_page(int page, TToken_string& enabling);
TEdit_mask() : TAutomask("ce0500b") { }
};
bool TEdit_mask::one_compiled(const short* f) const
{
for (int i = 0; f[i]; i++)
{
if (!field(f[i]).empty())
break;
}
return i >= 0;
}
TCurrency TEdit_mask::sum_fields(const short* f) const
{
TCurrency sum, val;
for (int i = 0; f[i] != 0; i++)
{
get_currency(abs(f[i]), val);
if (f[i] > 0)
sum += val;
else
sum -= val;
}
return sum;
}
bool TEdit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
bool ok = TRUE;
@ -217,7 +275,7 @@ bool TEdit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
TDate iniz, fine;
const int ese = dc.esercizio_corrente(iniz, fine);
if (insert_mode() && stato_attivita() == 2)
if (stato_attivita() == 2)
{
if (dtcomp < iniz)
return error_box("La data appartiene ad un esercizio già stampato su bollato");
@ -230,43 +288,338 @@ bool TEdit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
return error_box("La data è succesiva alla fine della validità della categoria");
}
if (dc.esercizio_costituzione() && dtcomp < iniz)
return error_box("Non è possibile specificare una data antecedente all'eserczio di costituzione");
return error_box("Non è possibile specificare una data antecedente all'esercizio di costituzione");
if (tipo_cespite() != tc_materiale && dtcomp.year() >= dc.anno_tuir())
{
if (field(F_DTFUNZ).empty())
set(F_DTFUNZ, o.get());
}
}
break;
case F_DTFUNZ:
if (e == fe_modify || e == fe_close)
{
TDitta_cespiti& dc = ditta_cespiti();
const TDate dtcomp = field(F_DTCOMP).get();
const TDate dtfunz = o.get();
if (dtfunz < dtcomp)
return error_box("La data di entrata in funzione deve essere successiva a quella di aquisizione");
if (dtfunz.ok() && !dtcomp.ok())
return error_box("La data di entrata in funzione non puo' essere inserita senza specificare quella di aquisizione");
if (_tipo != tc_materiale && dtfunz != dtcomp)
{
if (dtcomp.year() >= dc.anno_tuir())
return error_box("In base alla normativa del TUIR, le date di acquisizione e di entrata in funzione devono coincidere");
}
if (dtfunz.ok())
{
const TDate dtcomp = field(F_DTCOMP).get();
if (dtfunz < dtcomp)
return error_box("La data di entrata in funzione deve essere successiva a quella di aquisizione");
if (!dtcomp.ok())
return error_box("La data di entrata in funzione non puo' essere inserita senza specificare quella di aquisizione");
if (stato_attivita() == 2)
{
const TDate iniz = get(F_INIZIO_ES);
if (dtfunz < iniz)
return error_box("La data di entrata in funzione deve essere successiva a quella di inizio esercizio");
}
TDitta_cespiti& dc = ditta_cespiti();
if (_tipo != tc_materiale && dtfunz != dtcomp)
{
if (dtcomp.year() >= dc.anno_tuir())
return error_box("In base alla normativa del TUIR, le date di acquisizione e di entrata in funzione devono coincidere");
}
const TRectype& cac = dc.categoria(0, NULL, get_int(F_CATEGORIA));
const TDate iniz = cac.get("D0");
if (iniz.ok() && dtfunz < iniz)
return error_box("La data è precedente all'inizio della validità della categoria");
const TDate fine = cac.get("D1");
if (fine.ok() && dtcomp > fine)
if (fine.ok() && dtfunz > fine)
return error_box("La data è succesiva alla fine della validità della categoria");
set(F_TUIR, dtfunz.year() >= dc.anno_tuir() ? "X" : "");
if (dtfunz.year() >= dc.anno_tuir())
{
set(F_TUIR, "X");
set(F_AMMPROP, "X");
}
else
{
reset(F_TUIR);
reset(F_AMMPROP);
}
}
}
break;
case F_QUADRATURA:
if (e == fe_button)
{
set(F_NORMALE2, get(F_NORMALE));
set(F_NORMALE3, get(F_NORMALE));
set(F_ACCELERATO2, get(F_ACCELERATO));
set(F_ACCELERATO3, get(F_ACCELERATO));
set(F_ANTICIPATO2, get(F_ANTICIPATO));
set(F_ANTICIPATO3, get(F_ANTICIPATO));
}
break;
case F_VNONAMM:
if (e == fe_modify || e == fe_close)
{
if (o.empty() && get_bool(F_LEASING))
return error_box("Indicare il valore del riscatto per beni in leasing");
test_ammissibilita_saldi();
}
break;
case F_PLUSREIN:
if ((e == fe_modify || e == fe_close) && !o.empty())
{
TCurrency costo; get_currency(F_COSTO, costo);
TCurrency noamm; get_currency(F_VNONAMM, noamm);
TCurrency plusr; get_currency(F_PLUSREIN, plusr);
const TCurrency minim = costo - noamm;
if (plusr > minim)
return error_box("La plusvalenza reinvestita non puo' superare %s", minim.string(TRUE));
}
break;
case F_ELEMENTI:
if ((e == fe_modify || e == fe_close) && o.empty())
{
const TDate dtcomp = field(F_DTCOMP).get();
const TDate dtiniz = field(F_INIZIO_ES).get();
if (dtcomp.ok() && dtcomp < dtiniz)
return error_box("E' necessario specificare il numero di elementi per cespiti acquisiti negli esercizi precedenti");
const short fields[] = { F_COSTO, F_VNONAMM, F_RIV75, F_RIV83, F_RIV90, F_RIV91, F_RIVGF, F_RIVGC, 0 };
if (one_compiled(fields))
return error_box("E' necessario inserire il nunero degli elementi");
}
break;
case F_RIV90:
case F_RIV91:
if ((e == fe_init || e == fe_modify) && o.active())
{
TEdit_field& anni = efield(o.dlg()+1);
if (o.empty())
{
anni.reset();
anni.disable();
}
else
anni.enable();
}
break;
case F_ANNIAMM:
if (e == fe_init || e == fe_modify)
enable_page(2, !o.empty());
break;
case F_NORMALE:
if (e == fe_close)
{
const short fv[] = { F_COSTO, -F_VNONAMM, F_RIV75, F_RIV83, F_RIV90, F_RIV91, F_RIVGF, 0 };
const short fa[] = { F_NORMALE, F_ACCELERATO, F_ANTICIPATO, F_QPERSE, F_FPRIVATO, F_QPERSEPRIV, 0 };
const TCurrency val_amm = sum_fields(fv);
const TCurrency fon_amm = sum_fields(fa);
if (fon_amm > val_amm)
{
TString msg;
msg << "Il fondo ammortamento fiscale (" << fon_amm.string(TRUE) << ')';
msg << "non puo' superare il valore da ammortizzare (" << val_amm.string(TRUE) << ')';
return error_box(msg);
}
}
break;
case F_FPRIVATO:
if (e == fe_close)
{
if (get_int(F_USOPROM) > 1 && !field(F_ANNIAMM).empty())
{
if (field(F_FPRIVATO).empty() && field(F_QPERSEPRIV).empty())
return error_box("E' necessario inserire un fondo di ammortamento privato o delle quote perse private");
}
}
break;
case F_NORMALE2:
if (e == fe_close)
{
const short fv[] = { F_COSTO, F_RIV75, F_RIV83, F_RIV90, F_RIV91, F_RIVGC, 0 };
const short fa[] = { F_NORMALE2, F_ACCELERATO2, F_ANTICIPATO2, 0 };
const TCurrency val_amm = sum_fields(fv);
const TCurrency fon_amm = sum_fields(fa);
if (fon_amm > val_amm)
{
TString msg;
msg << "Il fondo ammortamento civilistico (" << fon_amm.string(TRUE) << ')';
msg << "non puo' superare il valore da ammortizzare (" << val_amm.string(TRUE) << ')';
return error_box(msg);
}
}
break;
default:
break;
}
return ok;
}
// Disabilita tutti i campi della pagina "page" (1 based) tranne quelli nella lista "enabling"
void TEdit_mask::protect_page(int page, TToken_string& enabling)
{
// Determina l'id del primo campo della pagina
short cid = 0;
switch (page)
{
case 2: cid = F_ELEMENTI; break;
case 3: cid = F_NORMALE; break;
default: cid = F_IDCESPITE; break;
}
// Determina l'handle della pagina selezionata
WINDOW parent = field(cid).parent();
for (int f = fields()-1; f >= 0; f--)
{
TMask_field& c = fld(f);
if (c.parent() == parent) // Il campo appartiene alla pagina voluta?
{
const short id = c.dlg();
if (id > 100 && id < 1000 && c.is_operable() && c.enabled_default())
{
const bool on = enabling.empty() || enabling.get_pos(c.dlg()) >= 0;
c.enable(on);
if (cid == id) // Ho raggiunto il capo pagina?
break;
}
}
}
}
bool TEdit_mask::test_ammissibilita_dati()
{
const char* msg = insert_mode() ? "Inserimento" : "Modifica";
xvt_statbar_set(msg, TRUE);
return FALSE;
}
bool TEdit_mask::test_ammissibilita_saldi()
{
bool protez = FALSE;
const char* msg = "";
switch (_staat)
{
case 1:
case 2:
{
const TDate iniz = get(F_INIZIO_ES);
const TDate dtacq = get(F_DTCOMP);
const TDate dtfunz = get(F_DTFUNZ);
if (!dtacq.ok() || !dtfunz.ok())
protez = TRUE;
else
protez = dtacq >= iniz || dtfunz >= iniz;
if (protez)
msg = "Inserire gli importi nel movimento d'acquisto";
}
break;
case 3:
protez = TRUE;
msg = "Bollato stampato: non sono ammesse modifiche";
break;
default:
break;
}
TToken_string enabling;
if (protez)
enabling = "883"; // Disabilita tutto!
protect_page(2, enabling);
if (*msg)
beep(1);
else
msg = insert_mode() ? "Inserimento" : "Modifica";
xvt_statbar_set(msg, TRUE);
return protez;
}
bool TEdit_mask::test_ammissibilita_fondi()
{
bool protez = FALSE;
const char* msg = "";
switch (_staat)
{
case 1:
case 2:
{
const TDate dtacq = get(F_DTCOMP);
const TDate dtfunz = get(F_DTFUNZ);
if (!dtacq.ok() || !dtfunz.ok())
protez = TRUE;
else
{
const TDate iniz = get(F_INIZIO_ES);
protez = dtacq >= iniz;
}
if (protez)
msg = "Inserire gli importi nel movimento d'acquisto";
}
break;
case 3:
protez = TRUE;
msg = "Bollato stampato: non sono ammesse modifiche";
break;
default: protez = FALSE; break;
}
TToken_string enabling;
if (protez)
enabling = "883"; // Disabilita tutto!
protect_page(3, enabling);
if (!protez)
{
const TDate dtfunz = get(F_DTFUNZ);
const TDate iniz = get(F_INIZIO_ES);
bool prot9 = FALSE;
if (!dtfunz.ok() || dtfunz >= iniz)
{
msg = "Cespite non ancora entrato in funzione a inizio esercizio";
prot9 = TRUE;
}
else
{
const TRectype& cac = ditta_cespiti().categoria(0, NULL, get_int(F_CATEGORIA));
if (cac.get_bool("B0"))
{
msg = "Categoria non ammortizzabile";
prot9 = TRUE;
}
}
enable(-9, !prot9);
}
if (*msg)
beep(1);
else
msg = insert_mode() ? "Inserimento" : "Modifica";
xvt_statbar_set(msg, TRUE);
return protez;
}
bool TEdit_mask::on_key(KEY k)
{
// Try to predict next page!
const int old_page = curr_page()+1;
int new_page = old_page;
switch (k)
{
case K_CTRL+K_F1: new_page = 1; break;
case K_CTRL+K_F2: new_page = 2; break;
case K_CTRL+K_F3: new_page = 3; break;
case K_PREV : new_page--; break;
case K_NEXT : new_page++; break;
default: break;
}
// If page will change ...
if (old_page != new_page) switch(new_page)
{
case 1: test_ammissibilita_dati(); break;
case 2: test_ammissibilita_saldi(); break;
case 3: test_ammissibilita_fondi(); break;
default: break;
}
return TAutomask::on_key(k);
}
class TAnacespi : public TRelation_application
{
TRelation* _cespiti;
@ -274,6 +627,10 @@ class TAnacespi : public TRelation_application
TQuery_mask* _qmask;
TEdit_mask* _emask;
private:
void init_mask(TMask& m);
void kill_cespite(const TString& idcespite, int lfile, int key = 1);
protected:
// @cmember Inizializzazione dei dati dell'utente
@ -286,9 +643,6 @@ protected:
// @cmember Ritorna la relazione da modificare
virtual TRelation* get_relation() const;
void protect_fields(TMask& m, TToken_string& enabling) const;
void init_mask(TMask& m);
virtual const char* get_next_key();
virtual bool protected_record(TRectype& rec);
virtual void init_query_mode(TMask& m);
@ -296,6 +650,8 @@ protected:
virtual void init_modify_mode(TMask& m);
virtual int read(TMask& m);
virtual int write(const TMask& m);
virtual bool remove();
};
bool TAnacespi::changing_mask(int)
@ -327,17 +683,16 @@ TRelation* TAnacespi::get_relation() const
// Collega salce
TString80 expr1;
expr1 << SALCE_IDCESPITE << "==" << CESPI_IDCESPITE;
if (year > 0)
expr1 << '|' << SALCE_CODES << "==" << year;
expr1 << '|' << SALCE_CODES << "==" << year;
expr1 << '|' << SALCE_TPSALDO << "==1";
csp->add(LF_SALCE, expr1);
// Collega i tre tipi di ammce
TString80 expr2;
for (int a = 1; a <= 3; a++)
{
expr2 = expr1;
TString80 expr2 = expr1;
expr2 << '|' << AMMCE_TPAMM << "==" << a;
csp->add(LF_AMMCE, expr2, 1, 0, LF_AMMCE+100*(a-1));
csp->add(LF_AMMCE, expr2, 1, 0, a-1);
}
// Attiva il salvataggio anche di salce e ammce
@ -350,6 +705,7 @@ TRelation* TAnacespi::get_relation() const
void TAnacespi::init_query_mode(TMask& m)
{
ditta_cespiti().init_mask(m);
set_search_field(F_IDCESPITE);
}
bool TAnacespi::protected_record(TRectype& rec)
@ -365,6 +721,7 @@ void TAnacespi::init_mask(TMask& m)
const bool can_edit = !dc.bollato_stampato() && m.field(F_DTALIEN).empty();
m.enable(DLG_SAVEREC, can_edit);
m.enable(DLG_DELREC, can_edit);
m.disable(DLG_NEWREC);
_emask->set_stato_attivita(_qmask->stato_attivita());
@ -381,67 +738,53 @@ void TAnacespi::init_mask(TMask& m)
void TAnacespi::init_insert_mode(TMask& m)
{
init_mask(m);
m.enable(F_DTALIEN);
m.set(F_TUIR, "X");
m.set(F_SPEMAN, _emask->tipo_cespite() == tc_materiale ? 2 : 1);
m.set(F_ESCLPR, _emask->tipo_cespite() != tc_pluriennale ? "X" : "");
}
void TAnacespi::protect_fields(TMask& m, TToken_string& enabling) const
{
for (int f = m.fields()-1; f >= 0; f--)
if (_emask->tipo_cespite() == tc_materiale)
m.set(F_SPEMAN, 2);
else
{
TMask_field& fld = m.fld(f);
const short id = fld.dlg();
if (id > 100 && id < 1000 && fld.is_editable() && fld.enabled_default())
{
const bool on = enabling.empty() || enabling.get_pos(fld.dlg()) >= 0;
fld.enable(on);
}
m.set(F_SPEMAN, 1);
m.disable(F_SPEMAN);
}
m.set(F_ESCLPR, _emask->tipo_cespite() != tc_pluriennale ? "X" : "");
// Extra: non richiesti da analisi, ma obbligatori
m.set(F_VEICOLO, 1);
m.set(F_USOPROM, 1);
}
void TAnacespi::init_modify_mode(TMask& m)
{
init_mask(m);
m.disable(F_DTALIEN);
TDitta_cespiti& dc = ditta_cespiti();
TDate iniz, fine;
const int ese = dc.esercizio_corrente(iniz, fine);
const TDate dtacq = m.get(F_DTCOMP);
const TDate dtfunz = m.get(F_DTFUNZ);
TToken_string enabling;
const int staat = _qmask->stato_attivita();
switch (_qmask->stato_attivita())
TToken_string enabling;
switch (staat)
{
case 2:
if (dtacq.ok())
if (dtacq < iniz)
{
if (dtacq < iniz)
if (!dtfunz.ok() || dtfunz >= iniz)
{
if (!dtfunz.ok() || dtfunz >= iniz)
{
enabling.add(F_DTFUNZ);
enabling.add(F_SPEMAN);
enabling.add(F_USOPROM);
}
else
{
enabling.add(F_SPEMAN);
enabling.add(F_USOPROM);
}
}
}
else
{
if (!dtfunz.ok())
{
enabling.add(F_DTCOMP);
enabling.add(F_DTFUNZ);
enabling.add(F_SPEMAN);
enabling.add(F_USOPROM);
enabling.add(F_VEIDIP);
enabling.add(F_VEICOLO);
if (_emask->tipo_cespite() == tc_materiale)
enabling.add(F_SPEMAN);
}
else
{
enabling.add(F_USOPROM);
enabling.add(F_VEIDIP);
enabling.add(F_VEICOLO);
if (_emask->tipo_cespite() == tc_materiale)
enabling.add(F_SPEMAN);
}
}
break;
@ -455,7 +798,14 @@ void TAnacespi::init_modify_mode(TMask& m)
break;
}
protect_fields(m, enabling);
_emask->protect_page(1, enabling);
enabling.cut(0);
if (staat == 2 || staat == 3)
_emask->protect_page(2, enabling);
if (!m.field(F_DTALIEN).empty())
xvt_statbar_set("Cespite alienato: non è possibile apportare modifiche", TRUE);
}
const char* TAnacespi::get_next_key()
@ -473,9 +823,100 @@ int TAnacespi::read(TMask& m)
return err;
}
int TAnacespi::write(const TMask& m)
{
TRectype& curr = get_relation()->curr();
const TDitta_cespiti& dc = ditta_cespiti();
const TRectype& cac = dc.categoria(0, NULL, m.get_int(F_CATEGORIA));
switch (_emask->tipo_cespite())
{
case tc_immateriale:
if (cac.get_int("I0") == 2) // Percentuali
{
curr.put(CESPI_PIMM, cac.get("R13"));
curr.put(CESPI_VINCOLO, 1);
}
else // Anni
{
curr.zero(CESPI_PIMM);
curr.put(CESPI_ANNIRIC, cac.get("I3"));
curr.put(CESPI_VINCOLO, 2);
}
break;
case tc_pluriennale:
curr.put(CESPI_VINCOLO, cac.get("I2"));
curr.put(CESPI_PMINP, cac.get("R14"));
curr.put(CESPI_PMAXP, cac.get("R15"));
curr.put(CESPI_ANNIRIC, cac.get("I3"));
break;
default:
{
TDate dt = m.get(F_DTFUNZ);
if (!dt.ok())
dt = m.get_date(F_INIZIO_ES);
if (dt.year() < 1989)
curr.put(CESPI_PMAT, cac.get("R12")); // % beni mat D.M. 29/10/74
else
curr.put(CESPI_PMAT, cac.get("R11")); // % beni mat D.M. 31/12/88
}
break;
}
const int cat = m.get_int(F_CATEGORIA);
if (cat >= 41)
{
curr.zero(CESPI_CODCGR);
curr.zero(CESPI_CODSP);
}
else
{
curr.put(CESPI_CODCGR, curr.get(CESPI_CODCGRA));
curr.put(CESPI_CODSP, curr.get(CESPI_CODSPA));
}
int err = TRelation_application::write(m);
return err;
}
void TAnacespi::kill_cespite(const TString& idcespite, int lfile, int key)
{
TRelation rel(lfile);
TRectype& filter = rel.curr();
filter.put("IDCESPITE", idcespite);
TCursor cur(&rel, "", key, &filter, &filter);
const long items = cur.items();
cur.freeze();
for (cur = 0L; cur.pos() < items; ++cur)
rel.remove();
}
bool TAnacespi::remove()
{
const int staat = _qmask->stato_attivita();
bool yes = FALSE;
if (staat != 1)
yes = yesno_box("ATTENZIONE: il cespite è già stato stampato su bollato.\n"
"Si desidera confermare l'elimininazione?");
else
yes = yesno_box("ATTENZIONE: verranno eliminati anche i valori relativi agli esercizi precedenti.\n"
"Si desidera confermare l'elimininazione?");
if (yes)
{
const TString16 idcespite = get_relation()->curr().get(CESPI_IDCESPITE);
TRelation_application::remove();
kill_cespite(idcespite, LF_MOVCE, 2);
kill_cespite(idcespite, LF_MOVAM);
kill_cespite(idcespite, LF_AMMMV);
kill_cespite(idcespite, LF_SALCE);
kill_cespite(idcespite, LF_AMMCE);
}
return yes;
}
bool TAnacespi::user_create()
{
open_files(LF_TABCOM, LF_TAB, LF_CESPI, LF_SALCE, LF_AMMCE, 0);
open_files(LF_TABCOM, LF_TAB, LF_CESPI, LF_SALCE, LF_AMMCE, LF_MOVCE, LF_AMMMV, 0);
_cespiti = NULL;
_rel_year = 0;

View File

@ -18,8 +18,6 @@
#define F_IDCESPITE 120
#define F_DESC 121
#define F_IDCESPITE_I 122
#define F_DESC_I 123
#define F_LOCALIZZ 130
#define F_LOCALIZZ_DESC 131
@ -53,24 +51,22 @@
#define F_RIVGF 212
#define F_RIVGC 213
#define F_NORMALE 302
#define F_ACCELERATO 303
#define F_ANTICIPATO 304
#define F_QPERSE 305
#define F_FPRIVATO 306
#define F_QPERSEPRIV 307
#define F_NORMALE 252
#define F_ACCELERATO 253
#define F_ANTICIPATO 254
#define F_QPERSE 255
#define F_FPRIVATO 256
#define F_QPERSEPRIV 257
#define F_VSPMANU 258
#define F_ANNIAMM 259
#define F_NORMALE2 402
#define F_ACCELERATO2 403
#define F_ANTICIPATO2 404
#define F_QPERSE2 405
#define F_FPRIVATO2 406
#define F_QPERSEPRIV2 407
#define F_NORMALE2 302
#define F_ACCELERATO2 303
#define F_ANTICIPATO2 304
#define F_NORMALE3 502
#define F_ACCELERATO3 503
#define F_ANTICIPATO3 504
#define F_QPERSE3 505
#define F_FPRIVATO3 506
#define F_QPERSEPRIV3 507
#define F_NORMALE3 312
#define F_ACCELERATO3 313
#define F_ANTICIPATO3 314
#define F_QUADRATURA 320

View File

@ -89,7 +89,7 @@ BEGIN
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE NORMAL
CHECKTYPE FORCED
GROUP 1
END
@ -149,7 +149,7 @@ NUMBER F_IDCESPITE 10
BEGIN
PROMPT 1 8 "Cespite "
FLAGS "Z"
USE LF_CESPI SELECT (CODCGRA=#F_GRUPPO)&&(CODSPA=#F_SPECIE)
USE LF_CESPI
INPUT IDCESPITE F_IDCESPITE
DISPLAY "Codice@10" IDCESPITE
DISPLAY "Desc@50" DESC
@ -165,13 +165,12 @@ BEGIN
CHECKTYPE REQUIRED
FIELD IDCESPITE
KEY 1
GROUP 1
END
STRING F_DESC 50
STRING F_DESC 60 50
BEGIN
PROMPT 24 8 ""
USE LF_CESPI KEY 2 SELECT (CODCGRA=#F_GRUPPO)&&(CODSPA=#F_SPECIE)
USE LF_CESPI KEY 2
INPUT DESC F_DESC
DISPLAY "Desc@50" DESC
DISPLAY "Codice@10" IDCESPITE
@ -185,40 +184,8 @@ BEGIN
CHECKTYPE REQUIRED
FIELD DESC
KEY 2
GROUP 1
END
NUMBER F_IDCESPITE_I 10
BEGIN
PROMPT 1 8 "Cespite "
FLAGS "Z"
USE LF_CESPI SELECT CODIMP=#F_IMPIANTO
INPUT IDCESPITE F_IDCESPITE_I
COPY DISPLAY F_IDCESPITE
OUTPUT F_IDCESPITE_I IDCESPITE
OUTPUT F_DESC DESC_I
OUTPUT F_CATEGORIA CODCAT
CHECKTYPE REQUIRED
MESSAGE COPY F_IDCESPITE
FIELD IDCESPITE
KEY 1
GROUP 2
END
STRING F_DESC_I 50
BEGIN
PROMPT 24 8 ""
USE LF_CESPI KEY 2 SELECT CODIMP=#F_IMPIANTO
INPUT DESC F_DESC_I
COPY DISPLAY F_DESC
COPY OUTPUT F_IDCESPITE_I
CHECKTYPE REQUIRED
MESSAGE COPY F_DESC
FIELD DESC
KEY 2
GROUP 2
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 15 "@bRicerce alternative"

View File

@ -16,7 +16,7 @@ END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "DF"
FLAGS "DFG"
END
STRING F_RAGSOC 50
@ -60,17 +60,20 @@ END
NUMBER F_IDCESPITE 10
BEGIN
PROMPT 1 5 "Cespite "
FLAGS "DZ"
FLAGS "DGZ"
FIELD IDCESPITE
MESSAGE COPY,5@
KEY 1
END
STRING F_DESC 50
BEGIN
PROMPT 26 5 ""
FLAGS "G"
CHECKTYPE REQUIRED
FIELD DESC
MESSAGE COPY,5@
MESSAGE COPY,6@
WARNING "La descrizione è obbligatoria"
END
NUMBER F_GRUPPO 2
@ -126,8 +129,10 @@ BEGIN
INPUT CODTAB F_IMPIANTO
DISPLAY "Codice@10" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "Localizzazione" S1
OUTPUT F_IMPIANTO CODTAB
OUTPUT F_DESC_IMP S0
OUTPUT F_LOCALIZZ S1
CHECKTYPE NORMAL
FIELD CODIMP
END
@ -140,6 +145,7 @@ BEGIN
INPUT S0 F_DESC_IMP
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@10" CODTAB
DISPLAY "Localizzazione" S1
COPY OUTPUT F_IMPIANTO
CHECKTYPE NORMAL
END
@ -174,7 +180,9 @@ END
DATE F_DTCOMP
BEGIN
PROMPT 1 10 "Data completamento/acquisizione "
FLAGS "A"
FIELD DTCOMP
CHECKTYPE REQUIRED
END
BOOLEAN F_TUIR
@ -193,6 +201,7 @@ DATE F_DTALIEN
BEGIN
PROMPT 46 11 "Data di alienazione "
FIELD DTALIEN
FLAGS "D"
END
BOOLEAN F_AMMPROP
@ -225,6 +234,8 @@ NUMBER F_ANNIRIC 3
BEGIN
PROMPT 40 15 "Anni di durata del leasing "
FIELD ANNIRIC
CHECKTYPE REQUIRED
WARNING "È neccessario specificare la durata del leasing"
END
BOOLEAN F_USATO
@ -269,15 +280,15 @@ BEGIN
PROMPT 1 19 "Uso promiscuo "
SHEET "Tipo@4R|Descrizione@60"
INPUT F_USOPROM
ITEM "1|Deducibilita 100% - Esclusivamente strumentale"
ITEM "2|Deducibilita 50% - Uso promiscuo"
ITEM "3|Deducibilita 80% - Uso promiscuo agenti/rappresentanti"
ITEM "1|Deducibilità 100% - Esclusivamente strumentale"
ITEM "2|Deducibilità 50% - Uso promiscuo"
ITEM "3|Deducibilità 80% - Uso promiscuo agenti/rappresentanti"
OUTPUT F_USOPROM
OUTPUT F_DESC_USOPROM
FIELD USOPROM
END
STRING F_DESC_USOPROM 54
STRING F_DESC_USOPROM 80 54
BEGIN
PROMPT 22 19 ""
FLAGS "D"
@ -310,6 +321,7 @@ BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "DZ"
GROUP 2
FIELD LF_SALCE->CODES
END
DATE DLG_NULL
@ -330,19 +342,29 @@ NUMBER DLG_NULL 10
BEGIN
PROMPT 1 4 "Cespite "
FLAGS "DZ"
FIELD IDCESPITE
GROUP 5
FIELD LF_SALCE->IDCESPITE
END
STRING DLG_NULL 50
BEGIN
PROMPT 26 4 ""
FLAGS "DZ"
GROUP 5
GROUP 6
END
LIST DLG_NULL 1
BEGIN
PROMPT 41 6 ""
ITEM "1|1"
FLAGS "H"
FIELD LF_SALCE->TPSALDO
END
NUMBER F_ELEMENTI 4
BEGIN
PROMPT 1 6 "Elementi "
FLAGS "U"
FIELD LF_SALCE->NUMELE
END
@ -368,48 +390,76 @@ CURRENCY F_RIV75 15
BEGIN
PROMPT 1 10 "Rivalutazione L. 576/75 "
FIELD LF_SALCE->RIV75
GROUP 8
END
CURRENCY F_RIV83 15
BEGIN
PROMPT 1 11 "Rivalutazione L. 72/83 "
FIELD LF_SALCE->RIV83
GROUP 8
END
CURRENCY F_RIV90 15
BEGIN
PROMPT 1 12 "Rivalutazione L. 408/90 "
FIELD LF_SALCE->RIV90
GROUP 8
END
NUMBER F_ANNI_90 2
BEGIN
PROMPT 1 13 "Anni post rivalutazione L. 408/90 "
FLAGS "DU"
FIELD LF_SALCE->ANNIPOST90
CHECKTYPE REQUIRED
WARNING "E' necessario specificare anche un numero di anni"
GROUP 8
END
CURRENCY F_RIV91 15
BEGIN
PROMPT 1 14 "Rivalutazione L. 413/91 "
FIELD LF_SALCE->RIV91
GROUP 8
END
NUMBER F_ANNI_91 2
BEGIN
PROMPT 1 15 "Anni post rivalutazione L. 413/91 "
FLAGS "DU"
FIELD LF_SALCE->ANNIPOST91
CHECKTYPE REQUIRED
WARNING "E' necessario specificare anche un numero di anni"
GROUP 8
END
CURRENCY F_RIVGF 15
BEGIN
PROMPT 1 16 "Rivalutazione generica fiscale "
FIELD LF_SALCE->RIVGF
GROUP 8
END
CURRENCY F_RIVGC 15
BEGIN
PROMPT 1 17 "Rivalutazione generica civilistica "
FIELD LF_SALCE->RIVGC
GROUP 8
END
CURRENCY F_VSPMANU 15
BEGIN
PROMPT 1 18 "Valore spese di manutenzione "
FIELD LF_SALCE->VSPMANU
FLAGS "D"
END
NUMBER F_ANNIAMM 3
BEGIN
PROMPT 1 19 "Numero di esercizi di ammortamento già chiusi "
FLAGS "U"
FIELD LF_SALCE->ANNIAMM
END
ENDPAGE
@ -438,6 +488,7 @@ NUMBER DLG_NULL 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "DZ"
FIELD LF_AMMCE->CODES
GROUP 2
END
@ -459,14 +510,15 @@ NUMBER DLG_NULL 10
BEGIN
PROMPT 1 4 "Cespite "
FLAGS "DZ"
FIELD IDCESPITE
FIELD LF_AMMCE->IDCESPITE
GROUP 5
END
STRING DLG_NULL 50
BEGIN
PROMPT 26 4 ""
FLAGS "DZ"
GROUP 5
GROUP 6
END
TEXT DLG_NULL
@ -481,89 +533,160 @@ END
TEXT DLG_NULL
BEGIN
PROMPT 43 6 "@bGestionale"
PROMPT 43 6 "@bCivilistico"
END
TEXT DLG_NULL
BEGIN
PROMPT 63 6 "@bCivilistico"
PROMPT 63 6 "@bGestionale"
END
CURRENCY F_NORMALE 15
BEGIN
PROMPT 1 7 "Normale "
FIELD LF_AMMCE->QNOR
GROUP 9
END
CURRENCY F_ACCELERATO 15
BEGIN
PROMPT 1 8 "Accelerato "
FIELD LF_AMMCE->QACC
GROUP 9
END
CURRENCY F_ANTICIPATO 15
BEGIN
PROMPT 1 9 "Anticipato "
FIELD LF_AMMCE->QANT
GROUP 9
END
CURRENCY F_QPERSE 15
BEGIN
PROMPT 1 11 "Quote perse "
FIELD LF_AMMCE->QPERSE
GROUP 9
END
CURRENCY F_FPRIVATO 15
BEGIN
PROMPT 1 12 "Fondo amm. privato "
FIELD LF_AMMCE->FPRIVATO
GROUP 9
END
CURRENCY F_QPERSEPRIV 15
BEGIN
PROMPT 1 13 "Quote perse private "
FIELD LF_AMMCE->QPPRIVATE
GROUP 9
END
#define LF_AMMCE2 LF_AMMCE+100
LIST DLG_NULL 1 1
BEGIN
PROMPT 41 6 ""
ITEM "1|1"
FLAGS "H"
FIELD LF_AMMCE->TPSALDO
END
LIST DLG_NULL 1 1
BEGIN
PROMPT 41 6 ""
ITEM "1|1"
FLAGS "H"
FIELD LF_AMMCE->TPAMM
END
#define LF_AMMCE2 -1
NUMBER DLG_NULL 10
BEGIN
PROMPT 41 6 ""
FLAGS "HZ"
GROUP 5
FIELD LF_AMMCE2->IDCESPITE
END
NUMBER DLG_NULL 4
BEGIN
PROMPT 41 6 ""
FLAGS "HZ"
GROUP 2
FIELD LF_AMMCE2->CODES
END
LIST DLG_NULL 1
BEGIN
PROMPT 41 6 ""
ITEM "1|1"
FLAGS "H"
FIELD LF_AMMCE2->TPSALDO
END
LIST DLG_NULL 1
BEGIN
PROMPT 41 6 ""
ITEM "2|2"
FLAGS "H"
FIELD LF_AMMCE2->TPAMM
END
CURRENCY F_NORMALE2 15
BEGIN
PROMPT 41 7 ""
FIELD LF_AMMCE2->QNOR
GROUP 9
END
CURRENCY F_ACCELERATO2 15
BEGIN
PROMPT 41 8 ""
FIELD LF_AMMCE2->QACC
GROUP 9
END
CURRENCY F_ANTICIPATO2 15
BEGIN
PROMPT 41 9 ""
FIELD LF_AMMCE2->QANT
GROUP 9
END
CURRENCY F_QPERSE2 15
#define LF_AMMCE3 -2
NUMBER DLG_NULL 10
BEGIN
PROMPT 41 11 ""
FIELD LF_AMMCE2->QPERSE
PROMPT 61 6 ""
FLAGS "HZ"
GROUP 5
FIELD LF_AMMCE3->IDCESPITE
END
CURRENCY F_FPRIVATO2 15
NUMBER DLG_NULL 4
BEGIN
PROMPT 41 12 ""
FIELD LF_AMMCE2->FPRIVATO
PROMPT 41 6 ""
FLAGS "HZ"
GROUP 2
FIELD LF_AMMCE3->CODES
END
CURRENCY F_QPERSEPRIV2 15
LIST DLG_NULL 1
BEGIN
PROMPT 41 13 ""
FIELD LF_AMMCE2->QPPRIVATE
PROMPT 41 6 ""
ITEM "1|1"
FLAGS "H"
FIELD LF_AMMCE3->TPSALDO
END
#define LF_AMMCE3 LF_AMMCE+200
LIST DLG_NULL 1
BEGIN
PROMPT 41 6 ""
ITEM "3|3"
FLAGS "H"
FIELD LF_AMMCE3->TPAMM
END
CURRENCY F_NORMALE3 15
BEGIN
@ -583,22 +706,10 @@ BEGIN
FIELD LF_AMMCE3->QANT
END
CURRENCY F_QPERSE3 15
BUTTON F_QUADRATURA 24 2
BEGIN
PROMPT 61 11 ""
FIELD LF_AMMCE3->QPERSE
END
CURRENCY F_FPRIVATO3 15
BEGIN
PROMPT 61 12 ""
FIELD LF_AMMCE3->FPRIVATO
END
CURRENCY F_QPERSEPRIV3 15
BEGIN
PROMPT 61 13 ""
FIELD LF_AMMCE3->QPPRIVATE
PROMPT 51 11 "Quadratura fondi"
GROUP 9
END
ENDPAGE

File diff suppressed because it is too large Load Diff

View File

@ -7,10 +7,10 @@ int main(int argc,char** argv)
const int r = (argc > 1) ? (argv[1][1]-'0') : 0;
switch (r)
{
case 1:
ce1100(argc,argv) ; break;
default:
ce1100(argc,argv) ; break;
case 1 : ce1200(argc,argv); break; // Forzatura ammortamento su movimenti
case 2 : ce1300(argc,argv); break; // Scelta ammortamento per cespite
case 4 : ce1500(argc,argv); break; // Gestione movimenti
default: ce1100(argc,argv); break; // Forzatura ammortamento su cespiti
}
return 0;
}

View File

@ -2,6 +2,9 @@
#define __CE1_H
int ce1100(int argc, char* argv[]);
int ce1200(int argc, char* argv[]);
int ce1300(int argc, char* argv[]);
int ce1500(int argc, char* argv[]);
#endif // __CE1_H

View File

@ -4,7 +4,7 @@
#include <sheet.h>
#include <utility.h>
#include "ce0.h"
#include "ce1.h"
#include "ce2101.h"
#include "celib.h"
@ -22,6 +22,7 @@
class TQuery_mask : public TAutomask
{
int _staat;
real _residuof, _residuoc;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -29,10 +30,14 @@ protected:
int calcola_stato_attivita();
bool cespite_ok() const;
void set_cespi_filter();
public:
int stato_attivita() const { return _staat; }
real get_residuof() const { return _residuof; }
real get_residuoc() const { return _residuoc; }
void calc_res(bool prec);
TQuery_mask();
};
@ -103,33 +108,85 @@ bool TQuery_mask::cespite_ok() const
return ok;
}
void TQuery_mask::calc_res(bool prec)
{
TCespite ces (get(F_IDCESPITE));
// calcolo ammortamento sul cespite (per sit. fiscale(1) e civilistica(2))
TDate fine_es = get(F_FINE_ES);
ces.calc_amm(1, FALSE, fine_es);
const TRectype& salce2=ces.sal_pro(); //rectype giá di "tipo fiscale"
const TRectype& ammce2=ces.amm_pro();
// determinazione del residuo fiscale
_residuof = ZERO;
_residuof = salce2.get_real(SALCE_CSTO)-salce2.get_real(SALCE_VNONAMM)+salce2.get_real(SALCE_RIV75)+salce2.get_real(SALCE_RIV83)+salce2.get_real(SALCE_RIV90)+salce2.get_real(SALCE_RIV91)+salce2.get_real(SALCE_RIVGF);
_residuof -= ammce2.get_real(AMMCE_QNORP)+ammce2.get_real(AMMCE_QACCP)+ammce2.get_real(AMMCE_QANTP)+ammce2.get_real(AMMCE_QPERSEP)+ammce2.get_real(AMMCE_FPRIVATOP)+ammce2.get_real(AMMCE_QPPRIVATEP);
if (!prec)
_residuof -= ammce2.get_real(AMMCE_QNOR)+ammce2.get_real(AMMCE_QACC)+ammce2.get_real(AMMCE_QANT)+ammce2.get_real(AMMCE_QPERSE)+ammce2.get_real(AMMCE_FPRIVATO)+ammce2.get_real(AMMCE_QPPRIVATE);
ces.calc_amm(2, FALSE, fine_es);
//rectype giá di "tipo civilistico"
// determinazione del residuo civilistico
_residuoc = ZERO;
_residuoc = salce2.get_real(SALCE_CSTO)+salce2.get_real(SALCE_RIV75)+salce2.get_real(SALCE_RIV83)+salce2.get_real(SALCE_RIV90)+salce2.get_real(SALCE_RIV91)+salce2.get_real(SALCE_RIVGC);
_residuoc -= ammce2.get_real(AMMCE_QNORP)+ammce2.get_real(AMMCE_QACCP)+ammce2.get_real(AMMCE_QANTP);
if (!prec)
_residuoc -= ammce2.get_real(AMMCE_QNOR)+ammce2.get_real(AMMCE_QACC)+ammce2.get_real(AMMCE_QANT);
}
void TQuery_mask::set_cespi_filter() //metodo per il filtraggio corretto sulla maschera; stabilisce il tipo di filtro in
{ //base alla selezone con il radiobutton (per attivitá o per impianto)
TString filter;
if (get(F_SELECT)[0] == 'I') // Filtro per impianto
{
const TEdit_field& imp = efield(F_IMPIANTO);
if (!imp.empty())
filter << CESPI_CODIMP << "=\"" << imp.get() << '"';
}
else // Filtro per attività
{
filter << '(' << CESPI_CODCGRA << "=\"" << get(F_GRUPPO) << "\")";
filter << "&&(" << CESPI_CODSPA << "=\"" << get(F_SPECIE) << "\")";
}
efield(F_IDCESPITE).browse()->set_filter(filter);
efield(F_DESC).browse()->set_filter(filter);
}
bool TQuery_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
{
case F_ESERCIZIO:
if (e == fe_init || e == fe_modify)
set_cespi_filter();
if (e == fe_close) //il controllo sul bollato viene fatto solo per l'esercizio
calcola_stato_attivita();
break;
case F_GRUPPO:
case F_SPECIE:
/* if (e == fe_close)
{
const bool can_edit = calcola_stato_attivita() != 1; // Bollato non stampato (se =1 -> bollato stampato)
enable(DLG_NEWREC, can_edit);
} */
break;
if (e == fe_modify)
set_cespi_filter();
break;
case F_SELECT:
case F_IMPIANTO:
if (e == fe_modify)
set_cespi_filter();
break;
case F_SEARCH1:
case F_SEARCH2:
case F_SEARCH3:
if (e == fe_button)
on_search_event(o);
break;
case F_IDCESPITE:
case F_IDCESPITE_I:
if (e == fe_close)
{
if (!cespite_ok())
return error_box("Inserire un cespite valido"); //controlla che esista il cespite
if (stato_attivita() == 1)
return error_box("E' stato stampato il bollato dell'anno:\nnon sono permesse forzature"); //il bollato é stato stampato
warning_box("E' stato stampato il bollato dell'anno:\nnon sono permesse forzature"); //il bollato é stato stampato
TLocalisamfile salce(LF_SALCE); // controlla che esista almeno un saldo
salce.put(SALCE_IDCESPITE, get(F_IDCESPITE));
@ -145,16 +202,26 @@ bool TQuery_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
ammce.put(AMMCE_TPAMM, 1);
if (ammce.read() != NOERR)
return error_box("Non esistono ammortamenti per l'anno selezionato");
TCespite ces (get(F_IDCESPITE)); // controlla che la categoria del cespite sia ammortizzabile
const TRectype& categoria = ces.categoria();
bool non_ammortizzabile = categoria.get_bool("B0");
if (non_ammortizzabile)
return error_box("La categoria del cespite selezionato non é ammortizzabile");
calc_res(TRUE); // controllo dei residui fiscale e civilistico in ingresso (prec=TRUE)
if (_residuof==ZERO)
return error_box("Impossibile forzare ammortamento perché non esiste residuo fiscale da ammortizzare per il cespite");
if (_residuoc==ZERO)
return error_box("Impossibile forzare ammortamento perché non esiste residuo civilistico da ammortizzare per il cespite");
}
break;
default:
break;
break;
}
return TRUE;
}
@ -170,6 +237,7 @@ class TForce_mask : public TAutomask
{
TTipo_cespite _tipo;
int _staat;
real _residuof_ini,_residuoc_ini;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -180,77 +248,69 @@ public:
void set_tipo_cespite(TTipo_cespite tc) { _tipo = tc; }
TTipo_cespite tipo_cespite() const { return _tipo; }
void set_residuof_ini(const real& rfini) { _residuof_ini = rfini; }
void set_residuoc_ini(const real& rcini) { _residuoc_ini = rcini; }
TForce_mask() : TAutomask("ce1101b") { }
};
bool TForce_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
bool ok = TRUE;
/* switch (o.dlg())
{
case F_CATEGORIA:
if (e == fe_init)
{
TDitta_cespiti& dc = ditta_cespiti();
dc.on_category_event(o, e, jolly);
}
switch (o.dlg())
{
case F_CATEGORIA:
ditta_cespiti().on_category_event(o, e, jolly);
break;
case F_DTCOMP:
if (e == fe_modify || e == fe_close)
{
const TDate dtcomp = o.get();
TDitta_cespiti& dc = ditta_cespiti();
TDate iniz, fine;
const int ese = dc.esercizio_corrente(iniz, fine);
if (insert_mode() && stato_attivita() == 2)
{
if (dtcomp < iniz)
return error_box("La data appartiene ad un esercizio già stampato su bollato");
const TRectype& cac = dc.categoria(0, NULL, get_int(F_CATEGORIA));
iniz = cac.get("D0");
if (iniz.ok() && dtcomp < iniz)
return error_box("La data è precedente all'inizio della validità della categoria");
fine = cac.get("D1");
if (fine.ok() && dtcomp > fine)
return error_box("La data è succesiva alla fine della validità della categoria");
}
if (dc.esercizio_costituzione() && dtcomp < iniz)
return error_box("Non è possibile specificare una data antecedente all'eserczio di costituzione");
case F_FORZATURA_Q_F: //gestione reset dei vari checkbox di forzatura
if (e==fe_modify && o.get()=="X" && get(F_FORZATURA_P_F)=="X")
reset(F_FORZATURA_P_F);
break;
case F_FORZATURA_P_F:
if (e==fe_modify && o.get()=="X" && get(F_FORZATURA_Q_F)=="X")
reset(F_FORZATURA_Q_F);
break;
case F_FORZATURA_Q_C:
if (e==fe_modify && o.get()=="X" && get(F_FORZATURA_P_C)=="X")
reset(F_FORZATURA_P_C);
break;
case F_FORZATURA_P_C:
if (e==fe_modify && o.get()=="X" && get(F_FORZATURA_Q_C)=="X")
reset(F_FORZATURA_Q_C);
break;
case F_AMMNOR_F: // controlla che residuof sia < della somma dei campi quota fiscali (al variare di
case F_AMMACC_F: // ognuno dei campi quota componenti, in modo che in caso di errore il campo sia
case F_AMMANT_F: // subito identificato
case F_QUOTE_PERSE:
case F_PRIVATO:
case F_QUOTE_PRIV:
if (e==fe_close||e==fe_modify)
{
real sumf = get_real(F_AMMNOR_F)+get_real(F_AMMACC_F)+get_real(F_AMMANT_F)+get_real(F_QUOTE_PERSE)+get_real(F_PRIVATO)+get_real(F_QUOTE_PRIV);
if (sumf > _residuof_ini)
return error_box("Attenzione: l'ammortamento richiesto supera il residuo fiscale del cespite");
}
break;
case F_DTFUNZ:
if (e == fe_modify || e == fe_close)
case F_AMMNOR_C: // controlla che residuoc sia < della somma dei campi quota civilistici
case F_AMMACC_C:
case F_AMMANT_C:
if (e==fe_close||e==fe_modify)
{
TDitta_cespiti& dc = ditta_cespiti();
const TDate dtcomp = field(F_DTCOMP).get();
const TDate dtfunz = o.get();
if (dtfunz < dtcomp)
return error_box("La data di entrata in funzione deve essere successiva a quella di aquisizione");
if (dtfunz.ok() && !dtcomp.ok())
return error_box("La data di entrata in funzione non puo' essere inserita senza specificare quella di aquisizione");
if (_tipo != tc_materiale && dtfunz != dtcomp)
{
if (dtcomp.year() >= dc.anno_tuir())
return error_box("In base alla normativa del TUIR, le date di acquisizione e di entrata in funzione devono coincidere");
}
if (dtfunz.ok())
{
const TRectype& cac = dc.categoria(0, NULL, get_int(F_CATEGORIA));
const TDate iniz = cac.get("D0");
if (iniz.ok() && dtfunz < iniz)
return error_box("La data è precedente all'inizio della validità della categoria");
const TDate fine = cac.get("D1");
if (fine.ok() && dtcomp > fine)
return error_box("La data è succesiva alla fine della validità della categoria");
set(F_TUIR, dtfunz.year() >= dc.anno_tuir() ? "X" : "");
}
real sumc = get_real(F_AMMNOR_C)+get_real(F_AMMACC_C)+get_real(F_AMMANT_C);
if (sumc > _residuoc_ini)
return error_box("Attenzione: l'ammortamento richiesto supera il residuo civilistico del cespite");
}
break;
default:
break;
} */
break;
default:
break;
}
return ok;
}
@ -258,12 +318,16 @@ bool TForce_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
//Applicazione
class TForza_amm_cespi : public TRelation_application
{
TRelation* _cespiti;
int _rel_year;
TRelation* _ammce;
TQuery_mask* _qmask;
TForce_mask* _fmask;
private:
void protect_fields(TMask& m, TToken_string& enabling) const;
void init_mask(TMask& m);
void update_amm(const TMask& m);
protected:
// @cmember Inizializzazione dei dati dell'utente
virtual bool user_create();
@ -275,16 +339,11 @@ protected:
// @cmember Ritorna la relazione da modificare
virtual TRelation* get_relation() const;
void protect_fields(TMask& m, TToken_string& enabling) const;
void init_mask(TMask& m);
virtual const char* get_next_key();
virtual bool protected_record(TRectype& rec);
virtual void init_query_mode(TMask& m);
virtual void init_insert_mode(TMask& m);
virtual void init_modify_mode(TMask& m);
virtual int read(TMask& m);
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
};
bool TForza_amm_cespi::changing_mask(int)
@ -297,43 +356,9 @@ TMask* TForza_amm_cespi::get_mask(int mode)
return mode == MODE_QUERY ? (TMask*)_qmask : (TMask*)_fmask;
}
// get_relation più complessa della storia di campo
TRelation* TForza_amm_cespi::get_relation() const
{
const int year = _qmask->get_int(F_ESERCIZIO);
TRelation*& csp = ((TForza_amm_cespi*)this)->_cespiti;
if (year != _rel_year && csp != NULL)
{
delete csp;
csp = NULL;
}
if (csp == NULL)
{
// Crea nuova relazione su cespi
csp = new TRelation(LF_CESPI);
((TForza_amm_cespi*)this)->_rel_year = year; // Memorizza anno utilizzato
// Collega salce
TString80 expr1;
expr1 << SALCE_IDCESPITE << "==" << CESPI_IDCESPITE;
if (year > 0)
expr1 << '|' << SALCE_CODES << "==" << year;
csp->add(LF_SALCE, expr1);
// Collega i tre tipi di ammce
TString80 expr2;
for (int a = 1; a <= 3; a++)
{
expr2 = expr1;
expr2 << '|' << AMMCE_TPAMM << "==" << a;
csp->add(LF_AMMCE, expr2, 1, 0, LF_AMMCE+100*(a-1));
}
// Attiva il salvataggio anche di salce e ammce
csp->write_enable();
}
return _cespiti;
return _ammce;
}
void TForza_amm_cespi::init_query_mode(TMask& m)
@ -341,40 +366,25 @@ void TForza_amm_cespi::init_query_mode(TMask& m)
ditta_cespiti().init_mask(m);
}
bool TForza_amm_cespi::protected_record(TRectype& rec)
{
const TDate dtalien = rec.get(CESPI_DTALIEN);
return dtalien.ok();
}
void TForza_amm_cespi::init_mask(TMask& m)
{
TDitta_cespiti& dc = ditta_cespiti();
TDitta_cespiti& dc = ditta_cespiti(); //se il bollato dell'esercizio é stato stampato inibisce il REGISTRA
dc.init_mask(m);
const bool can_edit = !dc.bollato_stampato() ;//&& m.field(F_DTALIEN).empty();
const bool can_edit = !dc.bollato_stampato() ;
m.enable(DLG_SAVEREC, can_edit);
m.enable(DLG_DELREC, can_edit);
_fmask->set_stato_attivita(_qmask->stato_attivita());
_fmask->set_stato_attivita(_qmask->stato_attivita()); //copia lo stato attivitá della precedente
_qmask->calc_res(TRUE); //calcola residuo precedente (prec=TRUE)
_fmask->set_residuof_ini(_qmask->get_residuof()); //memorizza i residui precedenti nella maschera (non a video)
_fmask->set_residuoc_ini(_qmask->get_residuoc());
const TRectype& cac = dc.categoria(0, NULL, _qmask->get_int(F_CATEGORIA));
const int tc = cac.get_int("I0");
_fmask->set_tipo_cespite(tc==0 ? tc_materiale : (tc==1 ? tc_immateriale : tc_pluriennale));
const bool mat_only = _fmask->tipo_cespite() == tc_materiale;
// m.show(F_LEASING, mat_only);
// m.show(F_ANNIRIC, mat_only);
// m.show(F_USATO, mat_only);
_qmask->calc_res(FALSE); // ricalcola il residuo fiscale e civilistico in forzatura (prec=FALSE)
_fmask->set(F_RESIDUO_F, _qmask->get_residuof()); //prende il residuo fiscale (civilistico) del cespite calcolato
_fmask->set(F_RESIDUO_C, _qmask->get_residuoc()); //nella maschera di selezione e lo mette nella maschera di forzatura
}
void TForza_amm_cespi::init_insert_mode(TMask& m)
{
init_mask(m);
// m.enable(F_DTALIEN);
// m.set(F_TUIR, "X");
// m.set(F_SPEMAN, _fmask->tipo_cespite() == tc_materiale ? 2 : 1);
// m.set(F_ESCLPR, _fmask->tipo_cespite() != tc_pluriennale ? "X" : "");
}
void TForza_amm_cespi::protect_fields(TMask& m, TToken_string& enabling) const
{
@ -391,83 +401,92 @@ void TForza_amm_cespi::protect_fields(TMask& m, TToken_string& enabling) const
}
void TForza_amm_cespi::init_modify_mode(TMask& m)
{
{
init_mask(m);
/* m.disable(F_DTALIEN);
TDitta_cespiti& dc = ditta_cespiti();
TDate iniz, fine;
const int ese = dc.esercizio_corrente(iniz, fine);
const TDate dtacq = m.get(F_DTCOMP);
const TDate dtfunz = m.get(F_DTFUNZ);
TToken_string enabling;
const bool accendiforzatura=_fmask->stato_attivita()!=1;
m.enable(F_FORZATURA_Q_F, accendiforzatura); //abilita i checks della forzatura quando il bollato NON é stampato
m.enable(F_FORZATURA_P_F, accendiforzatura);
m.enable(F_FORZATURA_Q_C, accendiforzatura);
m.enable(F_FORZATURA_P_C, accendiforzatura);
switch (_qmask->stato_attivita())
if (accendiforzatura) //se lo stato attivitá lascia liberi di forzare, controlla se il tipocespite fa altrettanto...
{
case 2:
if (dtacq.ok())
TCespite ces(m.get(F_IDCESPITE));
const TRectype& cac = ces.categoria();
switch (ces.tipo())
{
if (dtacq < iniz)
case tc_immateriale:
if (cac.get_int("I1")!=0)
{
if (!dtfunz.ok() || dtfunz >= iniz)
{
enabling.add(F_DTFUNZ);
enabling.add(F_SPEMAN);
enabling.add(F_USOPROM);
}
else
{
enabling.add(F_SPEMAN);
enabling.add(F_USOPROM);
}
}
}
else
{
if (!dtfunz.ok())
m.disable(F_FORZATURA_P_F);
m.disable(F_FORZATURA_P_C);
}
break;
case tc_pluriennale:
if (cac.get_int("I2")==3)
{
enabling.add(F_DTCOMP);
enabling.add(F_DTFUNZ);
enabling.add(F_SPEMAN);
enabling.add(F_USOPROM);
m.disable(F_FORZATURA_P_F);
m.disable(F_FORZATURA_P_C);
}
}
break;
case 3:
if (!dtfunz.ok() || dtfunz >= iniz)
{
enabling.add(F_DTFUNZ);
}
break;
default:
break;
break;
default:
break;
}
}
protect_fields(m, enabling); */
// aggiornamento della colonna dei valori risultanti
m.set(F_RIS_AMMNOR_F, m.get_real(F_AMMNOR_F));
m.set(F_RIS_AMMACC_F, m.get_real(F_AMMACC_F));
m.set(F_RIS_AMMANT_F, m.get_real(F_AMMANT_F));
m.set(F_RIS_QUOTE_PERSE, m.get_real(F_QUOTE_PERSE));
m.set(F_RIS_PRIVATO, m.get_real(F_PRIVATO));
m.set(F_RIS_QUOTE_PRIV, m.get_real(F_QUOTE_PRIV));
m.set(F_RIS_AMMNOR_C, m.get_real(F_AMMNOR_C));
m.set(F_RIS_AMMACC_C, m.get_real(F_AMMACC_C));
m.set(F_RIS_AMMANT_C, m.get_real(F_AMMANT_C));
}
const char* TForza_amm_cespi::get_next_key()
// funzione per il ricalcolo degli ammortamenti dopo la forzatura
void TForza_amm_cespi::update_amm(const TMask& m)
{
real num = 1;
TLocalisamfile cespi(LF_CESPI);
if (cespi.last() == NOERR)
num = cespi.get_real(CESPI_IDCESPITE) + 1;
return format("%d|%s", F_IDCESPITE, num.string());
TCespite ces(m.get(F_IDCESPITE));
TDate fine_es = m.get_date(F_FINE_ES);
ces.calc_amm(1, FALSE, fine_es);
ces.calc_amm(2, FALSE, fine_es);
}
int TForza_amm_cespi::read(TMask& m)
//funzione per il ricalcolo automatico dei valori degli ammortamenti dopo la forzatura (in caso di prima forzatura)
int TForza_amm_cespi::write(const TMask& m)
{
int err = TRelation_application::read(m);
int err = TRelation_application::write(m);
if (err==NOERR)
update_amm(m);
return err;
}
//funzione per il ricalcolo automatico dei valori degli ammortamenti dopo la forzatura
int TForza_amm_cespi::rewrite(const TMask& m)
{
int err = TRelation_application::rewrite(m);
if (err==NOERR)
update_amm(m);
return err;
}
bool TForza_amm_cespi::user_create()
{
open_files(LF_TABCOM, LF_TAB, LF_CESPI, LF_SALCE, LF_AMMCE, 0);
_cespiti = NULL;
_rel_year = 0;
_ammce = new TRelation (LF_AMMCE); // relazione principale su AMMCE
TString expr;
expr << "IDCESPITE==IDCESPITE|CODES==CODES|TPSALDO==TPSALDO|TPAMM==2"; //seconda relazione su AMMCE
_ammce->add(LF_AMMCE, expr, 1, 0, 69); //69 é l'alias di AMMCE
_ammce->write_enable(-69); //abilita la scrittura su secondo AMMCE
_ammce->add(LF_CESPI, "IDCESPITE==IDCESPITE"); //estende la relazione con CESPI
_qmask = new TQuery_mask;
_fmask = new TForce_mask;
return TRUE;
@ -477,7 +496,7 @@ bool TForza_amm_cespi::user_destroy()
{
delete _fmask;
delete _qmask;
delete _cespiti;
delete _ammce;
return TRUE;
}

View File

@ -18,6 +18,4 @@
#define F_IDCESPITE 120
#define F_DESC 121
#define F_IDCESPITE_I 122
#define F_DESC_I 123

View File

@ -51,6 +51,8 @@ BEGIN
OUTPUT F_INIZIO_ES 104@->D0
OUTPUT F_FINE_ES 104@->D1
CHECKTYPE REQUIRED
KEY 1
FIELD CODES
END
DATE F_INIZIO_ES
@ -139,7 +141,7 @@ NUMBER F_IDCESPITE 10
BEGIN
PROMPT 1 8 "Cespite "
FLAGS "Z"
USE LF_CESPI SELECT (CODCGRA=#F_GRUPPO)&&(CODSPA=#F_SPECIE)
USE LF_CESPI
INPUT IDCESPITE F_IDCESPITE
DISPLAY "Codice@10" IDCESPITE
DISPLAY "Desc@50" DESC
@ -154,13 +156,12 @@ BEGIN
CHECKTYPE REQUIRED
FIELD IDCESPITE
KEY 1
GROUP 1
END
STRING F_DESC 50
BEGIN
PROMPT 24 8 ""
USE LF_CESPI KEY 2 SELECT (CODCGRA=#F_GRUPPO)&&(CODSPA=#F_SPECIE)
USE LF_CESPI KEY 2
INPUT DESC F_DESC
DISPLAY "Desc@50" DESC
DISPLAY "Codice@10" IDCESPITE
@ -173,39 +174,25 @@ BEGIN
COPY OUTPUT F_IDCESPITE
CHECKTYPE REQUIRED
FIELD DESC
KEY 2
GROUP 1
END
NUMBER F_IDCESPITE_I 10
LIST DLG_NULL 1
BEGIN
PROMPT 1 8 "Cespite "
FLAGS "Z"
USE LF_CESPI SELECT CODIMP=#F_IMPIANTO
INPUT IDCESPITE F_IDCESPITE_I
COPY DISPLAY F_IDCESPITE
OUTPUT F_IDCESPITE_I IDCESPITE
OUTPUT F_DESC DESC_I
CHECKTYPE REQUIRED
MESSAGE COPY F_IDCESPITE
FIELD IDCESPITE
PROMPT 1 90 ""
FLAGS "D"
ITEM "2|2"
FIELD TPSALDO
KEY 1
GROUP 2
END
STRING F_DESC_I 50
LIST DLG_NULL 1
BEGIN
PROMPT 24 8 ""
USE LF_CESPI KEY 2 SELECT CODIMP=#F_IMPIANTO
INPUT DESC F_DESC_I
COPY DISPLAY F_DESC
COPY OUTPUT F_IDCESPITE_I
CHECKTYPE REQUIRED
MESSAGE COPY F_DESC
FIELD DESC
KEY 2
GROUP 2
END
PROMPT 1 91 ""
FLAGS "D"
ITEM "1|1"
FIELD TPAMM
KEY 1
END
GROUPBOX DLG_NULL 78 4
BEGIN

View File

@ -13,31 +13,40 @@
#define F_DESC_CAT 111
#define F_IMPIANTO 112
#define F_DESC_IMP 113
#define F_FORZATURA 114
#define F_SEARCH1 117
#define F_SEARCH2 118
#define F_SEARCH3 119
#define F_FORZATURA_Q_F 114
#define F_FORZATURA_P_F 115
#define F_FORZATURA_Q_C 116
#define F_FORZATURA_P_C 117
#define F_IDCESPITE 120
#define F_DESC 121
#define F_IDCESPITE_I 122
#define F_DESC_I 123
#define F_AMMNOR 130
#define F_AMMACC 131
#define F_AMMANT 132
#define F_QUOTE_PERSE 133
#define F_PRIVATO 134
#define F_QUOTE_PRIV 135
#define F_P_AMMNOR 136
#define F_P_AMMACC 137
#define F_P_AMMANT 138
#define F_AMMNOR_F 130
#define F_AMMACC_F 131
#define F_AMMANT_F 132
#define F_AMMNOR_C 133
#define F_AMMACC_C 134
#define F_AMMANT_C 135
#define F_QUOTE_PERSE 136
#define F_PRIVATO 137
#define F_QUOTE_PRIV 138
#define F_P_AMMNOR_F 139
#define F_P_AMMACC_F 140
#define F_P_AMMANT_F 141
#define F_P_AMMNOR_C 142
#define F_P_AMMACC_C 143
#define F_P_AMMANT_C 144
#define F_RIS_AMMNOR 140
#define F_RIS_AMMACC 141
#define F_RIS_AMMANT 142
#define F_RIS_QUOTE_PERSE 143
#define F_RIS_PRIVATO 144
#define F_RIS_QUOTE_PRIV 145
#define F_RESIDUO 146
#define F_RIS_AMMNOR_F 145
#define F_RIS_AMMACC_F 146
#define F_RIS_AMMANT_F 147
#define F_RIS_AMMNOR_C 148
#define F_RIS_AMMACC_C 149
#define F_RIS_AMMANT_C 150
#define F_RIS_QUOTE_PERSE 151
#define F_RIS_PRIVATO 152
#define F_RIS_QUOTE_PRIV 153
#define F_RESIDUO_F 154
#define F_RESIDUO_C 155

View File

@ -4,7 +4,8 @@ TOOLBAR "Toolbar" 0 -2 0 2
BUTTON DLG_SAVEREC 10 2
BEGIN
PROMPT -13 -1 ""
PROMPT -13 -1 "~Registra"
MESSAGE EXIT,K_SAVE
PICTURE BMP_SAVEREC
PICTURE BMP_SAVERECDN
END
@ -19,6 +20,12 @@ BEGIN
PROMPT -33 -1 ""
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -23 10 ""
FLAGS "D"
END
ENDPAGE
PAGE "Forzatura ammortamento sul cespite" -1 -1 78 18
@ -47,7 +54,7 @@ END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "DAZ"
FLAGS "DGZ"
USE CCE
JOIN ESC ALIAS 104 INTO CODTAB==CODTAB
INPUT CODTAB F_ESERCIZIO
@ -55,6 +62,7 @@ BEGIN
OUTPUT F_INIZIO_ES 104@->D0
OUTPUT F_FINE_ES 104@->D1
CHECKTYPE REQUIRED
KEY 1
END
DATE F_INIZIO_ES
@ -73,14 +81,13 @@ NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 4 "Gruppo "
FLAGS "DZ"
//// GROUP 1
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 4 "Specie "
FLAGS "_D"
USE CCB
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
@ -88,59 +95,83 @@ BEGIN
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE NORMAL
//// GROUP 1
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 4 ""
FLAGS "D"
//// GROUP 1
END
NUMBER F_IDCESPITE 10
BEGIN
PROMPT 1 5 "Cespite "
FLAGS "DZ"
USE LF_CESPI SELECT (CODCGRA=#F_GRUPPO)&&(CODSPA=#F_SPECIE)
INPUT IDCESPITE F_IDCESPITE
OUTPUT F_IDCESPITE IDCESPITE
OUTPUT F_DESC DESC
CHECKTYPE REQUIRED
FIELD IDCESPITE
KEY 1
//// GROUP 1
END
STRING F_DESC 50
BEGIN
PROMPT 24 5 ""
FLAGS "D"
USE LF_CESPI KEY 2 SELECT (CODCGRA=#F_GRUPPO)&&(CODSPA=#F_SPECIE)
INPUT DESC F_DESC
COPY OUTPUT F_IDCESPITE
USE LF_CESPI
INPUT IDCESPITE F_IDCESPITE
OUTPUT F_DESC DESC
CHECKTYPE REQUIRED
FIELD DESC
KEY 2
//// GROUP 1
END
NUMBER F_CATEGORIA 2
BEGIN
PROMPT 1 6 "Categoria "
FLAGS "DBZ"
FLAGS "DBZG"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
FIELD CODCAT
FIELD LF_CESPI->CODCAT
END
STRING F_DESC_CAT 60 58
BEGIN
PROMPT 16 6 ""
FLAGS "DB"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
END
LIST DLG_NULL 1
BEGIN
PROMPT 1 90 ""
FLAGS "D"
ITEM "2|2"
FIELD TPSALDO
GROUP 1
END
LIST DLG_NULL 1
BEGIN
PROMPT 1 91 ""
FLAGS "D"
ITEM "2|2"
FIELD 69@->TPSALDO
GROUP 2
END
LIST DLG_NULL 1
BEGIN
PROMPT 1 92 ""
FLAGS "D"
ITEM "1|1"
FIELD TPAMM
GROUP 1
END
LIST DLG_NULL 1
BEGIN
PROMPT 1 93 ""
FLAGS "D"
ITEM "2|2"
FIELD 69@->TPAMM
GROUP 2
END
GROUPBOX DLG_NULL 78 3
@ -152,10 +183,10 @@ RADIOBUTTON F_SITUAZIONE 1 75
BEGIN
PROMPT 1 8 ""
FLAGS "Z"
ITEM "F|Fiscale"
MESSAGE SHOW,1@
ITEM "F|Fiscale" //group1 é quello fiscale, il group 2 quello civilistico
MESSAGE SHOW,1@|HIDE,2@
ITEM "C|Civilistica"
MESSAGE HIDE,1@
MESSAGE HIDE,1@|SHOW,2@
END
GROUPBOX DLG_NULL 78 3
@ -163,16 +194,44 @@ BEGIN
PROMPT 0 11 "@bForzatura"
END
RADIOBUTTON F_FORZATURA 1 75
BOOLEAN F_FORZATURA_Q_F
BEGIN
PROMPT 1 11 ""
FLAGS "Z"
ITEM "N|Nessuna"
// MESSAGE SHOW,1@|HIDE,2@
ITEM "Q|Quote"
// MESSAGE SHOW,2@|HIDE,1@
ITEM "P|Percentuali"
// MESSAGE SHOW,2@|HIDE,1@
PROMPT 17 12 "Quote "
FLAGS "G"
MESSAGE FALSE DISABLE,3@
MESSAGE TRUE ENABLE,3@|DISABLE,4@
FIELD FZQUO
GROUP 1
END
BOOLEAN F_FORZATURA_P_F
BEGIN
PROMPT 35 12 "Percentuale "
FLAGS "G"
MESSAGE FALSE DISABLE,4@
MESSAGE TRUE ENABLE,4@|DISABLE,3@
FIELD FZPER
GROUP 1
END
BOOLEAN F_FORZATURA_Q_C
BEGIN
PROMPT 17 12 "Quote "
FLAGS "G"
MESSAGE FALSE DISABLE,5@
MESSAGE TRUE ENABLE,5@|DISABLE,6@
FIELD 69@->FZQUO
GROUP 2
END
BOOLEAN F_FORZATURA_P_C
BEGIN
PROMPT 35 12 "Percentuale "
FLAGS "G"
MESSAGE FALSE DISABLE,6@
MESSAGE TRUE ENABLE,6@|DISABLE,5@
FIELD 69@->FZPER
GROUP 2
END
GROUPBOX DLG_NULL 78 9
@ -180,42 +239,92 @@ BEGIN
PROMPT 0 14 "@b Valori Forzati Valori Risultanti"
END
CURRENCY F_AMMNOR 15
CURRENCY F_AMMNOR_F 15
BEGIN
PROMPT 1 15 "Normale "
FIELD QNOR
GROUP 1
GROUP 3
END
CURRENCY F_AMMACC 15
CURRENCY F_AMMNOR_C 15
BEGIN
PROMPT 1 15 "Normale "
FIELD 69@->QNOR
GROUP 2
GROUP 5
END
CURRENCY F_AMMACC_F 15
BEGIN
PROMPT 1 16 "Accelerato "
FIELD QACC
GROUP 1
GROUP 3
END
CURRENCY F_AMMANT 15
CURRENCY F_AMMACC_C 15
BEGIN
PROMPT 1 16 "Accelerato "
FIELD 69@->QACC
GROUP 2
GROUP 5
END
CURRENCY F_AMMANT_F 15
BEGIN
PROMPT 1 17 "Anticipato "
FIELD QANT
GROUP 1
GROUP 3
END
CURRENCY F_AMMANT_C 15
BEGIN
PROMPT 1 17 "Anticipato "
FIELD 69@->QANT
GROUP 2
GROUP 5
END
NUMBER F_QUOTE_PERSE 15
BEGIN
PROMPT 1 18 "Quote perse "
FIELD QPERSE
GROUP 1
GROUP 3
END
NUMBER F_PRIVATO 15
BEGIN
PROMPT 1 19 "Privato "
FIELD FPRIVATO
GROUP 1
GROUP 3
END
NUMBER F_QUOTE_PRIV 15
BEGIN
PROMPT 1 20 "Quote per priv. "
FIELD QPPRIVATE
GROUP 1
GROUP 3
END
NUMBER F_P_AMMNOR 6 2
NUMBER F_P_AMMNOR_F 6 2
BEGIN
PROMPT 35 15 ""
FIELD PNOR
GROUP 1
GROUP 4
END
NUMBER F_P_AMMNOR_C 6 2
BEGIN
PROMPT 35 15 ""
FIELD 69@->PNOR
GROUP 2
GROUP 6
END
TEXT -1
@ -223,9 +332,20 @@ BEGIN
PROMPT 42 15 "%"
END
NUMBER F_P_AMMACC 6 2
NUMBER F_P_AMMACC_F 6 2
BEGIN
PROMPT 35 16 ""
FIELD PACC
GROUP 1
GROUP 4
END
NUMBER F_P_AMMACC_C 6 2
BEGIN
PROMPT 35 16 ""
FIELD 69@->PACC
GROUP 2
GROUP 6
END
TEXT -1
@ -233,9 +353,20 @@ BEGIN
PROMPT 42 16 "%"
END
NUMBER F_P_AMMANT 6 2
NUMBER F_P_AMMANT_F 6 2
BEGIN
PROMPT 35 17 ""
FIELD PANT
GROUP 1
GROUP 4
END
NUMBER F_P_AMMANT_C 6 2
BEGIN
PROMPT 35 17 ""
FIELD 69@->PANT
GROUP 2
GROUP 6
END
TEXT -1
@ -243,42 +374,81 @@ BEGIN
PROMPT 42 17 "%"
END
CURRENCY F_RIS_AMMNOR 15
CURRENCY F_RIS_AMMNOR_F 15
BEGIN
FLAGS "D"
PROMPT 55 15 ""
GROUP 1
END
CURRENCY F_RIS_AMMACC 15
CURRENCY F_RIS_AMMNOR_C 15
BEGIN
FLAGS "D"
PROMPT 55 15 ""
GROUP 2
END
CURRENCY F_RIS_AMMACC_F 15
BEGIN
FLAGS "D"
PROMPT 55 16 ""
GROUP 1
END
CURRENCY F_RIS_AMMANT 15
CURRENCY F_RIS_AMMACC_C 15
BEGIN
FLAGS "D"
PROMPT 55 16 ""
GROUP 2
END
CURRENCY F_RIS_AMMANT_F 15
BEGIN
FLAGS "D"
PROMPT 55 17 ""
GROUP 1
END
CURRENCY F_RIS_AMMANT_C 15
BEGIN
FLAGS "D"
PROMPT 55 17 ""
GROUP 2
END
CURRENCY F_RIS_QUOTE_PERSE 15
BEGIN
FLAGS "D"
PROMPT 55 18 ""
GROUP 1
END
CURRENCY F_RIS_PRIVATO 15
BEGIN
FLAGS "D"
PROMPT 55 19 ""
GROUP 1
END
CURRENCY F_RIS_QUOTE_PRIV 15
BEGIN
FLAGS "D"
PROMPT 55 20 ""
GROUP 1
END
CURRENCY F_RESIDUO 15
CURRENCY F_RESIDUO_F 15
BEGIN
FLAGS "D"
PROMPT 45 21 "Residuo "
GROUP 1
END
CURRENCY F_RESIDUO_C 15
BEGIN
FLAGS "D"
PROMPT 45 21 "Residuo "
GROUP 2
END
ENDPAGE

535
ce/ce1200.cpp Executable file
View File

@ -0,0 +1,535 @@
#include <defmask.h>
#include <recarray.h>
#include <relapp.h>
#include <sheet.h>
#include <utility.h>
#include "ce1.h"
#include "ce2101.h"
#include "celib.h"
#include "ce1201a.h"
#include "ce1201b.h"
#include "../cg/cglib01.h"
#include "movce.h"
#include "cespi.h"
#include "salce.h"
#include "ammce.h"
#include "movam.h"
#include "ammmv.h"
//-----------------------------------------------------------------------------------------------------------------------//
///////////////////////////////////////////////////////////
// Maschera di selezione
///////////////////////////////////////////////////////////
class TForce_mov_qmask : public TAutomask
{
int _staat, _ammoelim;
real _residuof, _residuoc, _difff, _diffc;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
void on_search_event(TOperable_field& o);
int calcola_stato_attivita();
int calcola_ammo_eliminate();
public:
int stato_attivita() const { return _staat; }
int ammo_eliminate() const { return _ammoelim; }
real get_residuof() const { return _residuof; }
real get_residuoc() const { return _residuoc; }
real get_plusminusf() const { return _difff; }
real get_plusminusc() const { return _diffc; }
void calc_res_mov(TCespite& ces, const TRectype& movce, const TRectype& movam);
TForce_mov_qmask();
};
int TForce_mov_qmask::calcola_stato_attivita()
{
const int ese = get_int(F_ESERCIZIO);
const int gru = get_int(F_GRUPPO);
const char* spe = get(F_SPECIE);
TString16 str;
str.format("%04d%02d%-4s", ese, gru, spe);
const TRectype& curr_ccb = cache().get("CCB", str);
if (curr_ccb.get_bool("B1")) // Bollato stampato
_staat = 1;
TDitta_cespiti& dc = ditta_cespiti();
dc.set_attivita(ese, gru, spe);
return _staat;
}
int TForce_mov_qmask::calcola_ammo_eliminate()
{
const int ese = get_int(F_ESERCIZIO);
TString16 str;
str.format("%04d", ese);
const TRectype& curr_cce = cache().get("CCE", str);
if (curr_cce.get_bool("B3")) //possibilitá ammortamenti su parti eliminate (si prosegue solo se TRUE)
_ammoelim = 1;
return _ammoelim;
}
void TForce_mov_qmask::calc_res_mov(TCespite& ces, const TRectype& movce, const TRectype& movam)
{
// calcolo ammortamento sul cespite (per sit. fiscale(tpamm=1) o civilistica(tpamm=2))
const TDate dtmov = movce.get_date(MOVCE_DTMOV);
const int tpamm = movam.get_int(MOVAM_TPAMM); //in base al movam passato prendo il tpamm corrispondente
ces.calc_amm(tpamm, FALSE, dtmov);
// determinazione del residuo fiscale
if (tpamm == 1)
{
_residuof = ZERO;
_residuof = movce.get_real(MOVCE_CSTO)-movce.get_real(MOVCE_VNONAMM)+movce.get_real(MOVCE_RIV75)+movce.get_real(MOVCE_RIV83)+movce.get_real(MOVCE_RIV90)+movce.get_real(MOVCE_RIV91)+movce.get_real(MOVCE_RIVGF);
_residuof -= movam.get_real(MOVAM_QNOR)+movam.get_real(MOVAM_QACC)+movam.get_real(MOVAM_QANT)+movam.get_real(MOVAM_QPERSE)+movam.get_real(MOVAM_FPRIVATO)+movam.get_real(MOVAM_QPPRIVATE);
//calcolo di plus/minus valenze sparse
_difff = movce.get_real(MOVCE_IMPVEN) - _residuof;
}
// determinazione del residuo civilistico
if (tpamm == 2)
{
_residuoc = ZERO;
_residuoc = movce.get_real(MOVCE_CSTO)+movce.get_real(MOVCE_RIV75)+movce.get_real(MOVCE_RIV83)+movce.get_real(MOVCE_RIV90)+movce.get_real(MOVCE_RIV91)+movce.get_real(MOVCE_RIVGC);
_residuoc -= movam.get_real(MOVAM_QNOR)+movam.get_real(MOVAM_QACC)+movam.get_real(MOVAM_QANT);
_diffc = movce.get_real(MOVCE_IMPVEN) - _residuoc;
}
}
bool TForce_mov_qmask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_ESERCIZIO:
if (e == fe_close)
{
calcola_stato_attivita();
calcola_ammo_eliminate();
if (_ammoelim != 1)
return error_box("Non previsti ammortamenti sulle parti eliminate");
}
break;
case F_IDCESPITE:
if (e == fe_init || e == fe_modify) //seleziona il filtro da applicare alla maschera nel campo del movimento
{
const TString& ces = get(F_IDCESPITE);
const bool cesok = !real::is_null(ces);
TString filter;
filter << "(IDRET=\"\")&&(ANSI(DTMOV)>=ANSI(#" << F_INIZIO_ES
<< "))&&(ANSI(DTMOV)<=ANSI(#" << F_FINE_ES << "))";
if (cesok) // se viene selezionato un particolare cespite al filtro si aggiunge il suo codice
filter << "&&(IDCESPITE==\"" << ces << "\")";
TEdit_field& m = efield(F_IDMOV); // setta il filtro della ricerca sulla maschera
m.browse()->set_filter(filter);
}
if (e == fe_close)
{
if (stato_attivita() == 1)
warning_box("E' stato stampato il bollato dell'anno:\nnon sono permesse forzature");
if (ammo_eliminate() == 0)
warning_box("Non é previsto l'ammortamento sulle parti eliminate nell'esercizio selezionato");
}
break;
case F_IDMOV:
if (e == fe_close)
{
const TRectype& curr_movce = cache().get(LF_MOVCE, get(F_IDMOV)); //seleziona il cespite corrente in base al movimento
const TString16 idcespite = curr_movce.get(MOVCE_IDCESPITE); //selezionato nella maschera (qsto x poter lasciare idcespite vuoto)
TLocalisamfile salce(LF_SALCE); // controlla che esista il saldo iniziale nell'anno selezionato
salce.put(SALCE_IDCESPITE, idcespite);
salce.put(SALCE_CODES, get(F_ESERCIZIO));
salce.put(SALCE_TPSALDO, 1);
if (salce.read() != NOERR)
return error_box("Non esistono saldi per l'anno selezionato");
TLocalisamfile ammce(LF_AMMCE); // controlla che esista l'ammortamento iniziale nell'anno selezionato
ammce.put(AMMCE_IDCESPITE, idcespite);
ammce.put(AMMCE_CODES, get(F_ESERCIZIO));
ammce.put(AMMCE_TPSALDO, 1);
ammce.put(AMMCE_TPAMM, 1);
if (ammce.read() != NOERR)
return error_box("Non esistono ammortamenti per l'anno selezionato");
TCespite ces (idcespite); // controlla che la categoria del cespite sia ammortizzabile
const TRectype& categoria = ces.categoria();
bool non_ammortizzabile = categoria.get_bool("B0");
if (non_ammortizzabile)
return error_box("Ammortamenti non effettuabili perché la categoria del cespite non é ammortizzabile");
if (!curr_movce.empty())
{
const TRectype& curr_tmc = cache().get("%TMC", curr_movce.get(MOVCE_CODMOV));
if (!curr_tmc.get_bool("B4")) // non ammessi ammortamenti sul tipomov selezionato
return error_box("Non sono ammessi ammortamenti su questo tipo movimento");
if (!curr_tmc.get_int("I0") == 1) // non ammessi ammortamenti su movimenti di rettifica
return error_box("Non sono ammessi ammortamenti sulle rettifiche");
const TDate dtmov = curr_movce.get_date(MOVCE_DTMOV); // controlla che datamovimento sia inclusa nell'esercizio selezionato
const TDate dataini = get(F_INIZIO_ES);
const TDate datafine = get(F_FINE_ES);
if ( dtmov < dataini || dtmov > datafine)
return error_box("Il movimento selezionato non é di competenza dell'esercizio selezionato");
}
TLocalisamfile movam(LF_MOVAM); // controlla la consistenza dei movimenti fondi sui movimenti
movam.put(MOVAM_IDCESPITE, idcespite);
movam.put(MOVAM_IDMOV, get(F_IDMOV));
movam.put(MOVAM_TPAMM, 1);
if (movam.read() != NOERR)
return error_box("Movimenti dei fondi fiscali incoerenti per il movimento selezionato");
const TRectype movam1 = movam.curr();
movam.put(MOVAM_IDCESPITE, idcespite);
movam.put(MOVAM_IDMOV, get(F_IDMOV));
movam.put(MOVAM_TPAMM, 2);
if (movam.read() != NOERR)
return error_box("Movimenti dei fondi civilistici incoerenti per il movimento selezionato");
const TRectype movam2 = movam.curr();
TLocalisamfile ammmv(LF_AMMMV); // controlla la consistenza degli ammortamenti sui movimenti
ammmv.put(AMMMV_IDCESPITE, idcespite);
ammmv.put(AMMMV_IDMOV, get(F_IDMOV));
ammmv.put(AMMMV_TPAMM, 1);
if (ammmv.read() != NOERR)
return error_box("Ammortamenti fiscali sui movimenti incoerenti per il movimento selezionato");
ammmv.put(AMMMV_IDCESPITE, idcespite);
ammmv.put(AMMMV_IDMOV, get(F_IDMOV));
ammmv.put(AMMMV_TPAMM, 2);
if (ammmv.read() != NOERR)
return error_box("Ammortamenti civilistici sui movimenti incoerenti per il movimento selezionato");
calc_res_mov(ces, curr_movce, movam1); //calcolo del residuo fiscale in uscita maschera di selezione
if (_residuof==ZERO)
return error_box("Impossibile forzare ammortamento perché non esiste residuo fiscale\nda ammortizzare per le parti eliminate del cespite");
calc_res_mov(ces, curr_movce, movam2); //calcolo del residuo civilistico in uscita maschera di selezione
if (_residuoc==ZERO)
return error_box("Impossibile forzare ammortamento perché non esiste residuo civilistico\nda ammortizzare per le parti eliminate del cespite");
}
break;
default:
break;
}
return TRUE;
}
TForce_mov_qmask::TForce_mov_qmask() : TAutomask("ce1201a")
{
first_focus(F_IDMOV);
}
//-----------------------------------------------------------------------------------------------------------------------//
///////////////////////////////////////////////////////////
// Maschera di forzatura
///////////////////////////////////////////////////////////
class TForce_mov_fmask : public TAutomask
{
TTipo_cespite _tipo;
int _staat;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
void set_stato_attivita(int sa) { _staat = sa; }
int stato_attivita() const { return _staat; }
void set_tipo_cespite(TTipo_cespite tc) { _tipo = tc; }
TTipo_cespite tipo_cespite() const { return _tipo; }
TForce_mov_fmask() : TAutomask("ce1201b") { }
};
bool TForce_mov_fmask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_FORZATURA_Q_F: //gestione reset dei vari checkbox di forzatura
if (e==fe_modify && o.get()=="X" && get(F_FORZATURA_P_F)=="X")
reset(F_FORZATURA_P_F);
break;
case F_FORZATURA_P_F:
if (e==fe_modify && o.get()=="X" && get(F_FORZATURA_Q_F)=="X")
reset(F_FORZATURA_Q_F);
break;
case F_FORZATURA_Q_C:
if (e==fe_modify && o.get()=="X" && get(F_FORZATURA_P_C)=="X")
reset(F_FORZATURA_P_C);
break;
case F_FORZATURA_P_C:
if (e==fe_modify && o.get()=="X" && get(F_FORZATURA_Q_C)=="X")
reset(F_FORZATURA_Q_C);
break;
case F_AMMNOR_F: // controlla che residuof sia < della somma dei campi quota fiscali (al variare di
case F_AMMACC_F: // ognuno dei campi quota componenti, in modo che in caso di errore il campo sia
case F_AMMANT_F: // subito identificato
case F_QUOTE_PERSE:
case F_PRIVATO:
case F_QUOTE_PRIV:
if (e==fe_close||e==fe_modify)
{
real sumf = get_real(F_AMMNOR_F)+get_real(F_AMMACC_F)+get_real(F_AMMANT_F)+get_real(F_QUOTE_PERSE)+get_real(F_PRIVATO)+get_real(F_QUOTE_PRIV);
real maxresf = get_real(F_RIS_AMMNOR_F)+get_real(F_RIS_AMMACC_F)+get_real(F_RIS_AMMANT_F)+get_real(F_RIS_QUOTE_PERSE)+get_real(F_RIS_PRIVATO)+get_real(F_RIS_QUOTE_PRIV)+get_real(F_RESIDUO_F);
if (sumf > maxresf)
return error_box("Attenzione: l'ammortamento richiesto supera il residuo fiscale delle parti eliminate");
}
break;
case F_AMMNOR_C: // controlla che residuoc sia < della somma dei campi quota civilistici
case F_AMMACC_C:
case F_AMMANT_C:
if (e==fe_close||e==fe_modify)
{
real sumc = get_real(F_AMMNOR_C)+get_real(F_AMMACC_C)+get_real(F_AMMANT_C);
real maxresc = get_real(F_RIS_AMMNOR_C)+get_real(F_RIS_AMMACC_C)+get_real(F_RIS_AMMANT_C)+get_real(F_RESIDUO_C);
if (sumc > maxresc)
return error_box("Attenzione: l'ammortamento richiesto supera il residuo civilistico delle parti eliminate");
}
break;
default:
break;
}
return TRUE;
}
//-------------------------------------------------------------------------------------------------------------------------
///////////////////////////////////////////////////////////
// Applicazione principale
///////////////////////////////////////////////////////////
class TForza_amm_movce : public TRelation_application
{
TRelation* _rel;
TForce_mov_qmask* _qmask;
TForce_mov_fmask* _fmask;
private:
void update_amm(const TMask& m);
void update_plusminus();
void init_mask(TMask& m);
protected:
//inizializzazione dati utente
virtual bool user_create();
//distruzione dati utente
virtual bool user_destroy();
virtual bool changing_mask(int mode) { return TRUE; }
//richiede la maschera da usare
virtual TMask* get_mask(int mode);
//ritorna la relazione da modificare
virtual TRelation* get_relation() const { return _rel; }
virtual void init_query_mode(TMask& m);
virtual void init_insert_mode(TMask& m);
virtual void init_modify_mode(TMask& m);
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
public:
TForza_amm_movce() { }
};
TMask* TForza_amm_movce::get_mask(int mode)
{
return mode == MODE_QUERY ? (TMask*)_qmask : (TMask*)_fmask;
}
void TForza_amm_movce::init_mask(TMask& m) //funzione per settare i dati ditta in uscita
{
const int ese = _qmask->get_int(F_ESERCIZIO);
const int gru = _qmask->get_int(F_GRUPPO);
const char* spe = _qmask->get(F_SPECIE);
TDitta_cespiti& dc = ditta_cespiti();
dc.set_attivita(ese, gru, spe);
dc.init_mask(m);
const bool can_edit = !dc.bollato_stampato();
m.enable(DLG_SAVEREC, can_edit);
m.enable(DLG_DELREC, can_edit);
_fmask->set_stato_attivita(_qmask->stato_attivita()); //copia lo stato attivitá della precedente
TCespite ces(_fmask->get(F_IDCESPI));
const TRectype& movce = get_relation()->curr();
const TRectype& movam1 = get_relation()->curr(-69);
_qmask->calc_res_mov(ces, movce, movam1); // ricalcola il residuo fiscale in forzatura
_fmask->set(F_RESIDUO_F, _qmask->get_residuof()); //prende il residuo fiscale del cespite calcolato in Qmask e lo mette in Fmask
// _fmask->set_residuof_ini(_qmask->get_residuof()); //mette il valore del residuo precedente la forzatura nella var _rediduof_ini
_fmask->set(F_PLUSMINUS_F, _qmask->get_plusminusf());
const TRectype& movam2 = get_relation()->curr(-77);
_qmask->calc_res_mov(ces, movce, movam2); // ricalcola il residuo civilistico in forzatura
_fmask->set(F_RESIDUO_C, _qmask->get_residuoc()); //prende il residuo civilistico del cespite calcolato in Qmask e lo mette in Fmask
// _fmask->set_residuoc_ini(_qmask->get_residuoc()); //mette il valore del residuo precedente la forzatura nella var _rediduoc_ini
_fmask->set(F_PLUSMINUS_C, _qmask->get_plusminusc());
}
void TForza_amm_movce::init_query_mode(TMask& m)
{
ditta_cespiti().init_mask(m);
}
void TForza_amm_movce::init_insert_mode(TMask& m)
{
init_mask(m);
}
void TForza_amm_movce::init_modify_mode(TMask& m)
{
init_mask(m);
const bool accendiforzatura=_fmask->stato_attivita()!=1;
m.enable(F_FORZATURA_Q_F, accendiforzatura); //abilita i checks della forzatura quando il bollato NON é stampato
m.enable(F_FORZATURA_P_F, accendiforzatura);
m.enable(F_FORZATURA_Q_C, accendiforzatura);
m.enable(F_FORZATURA_P_C, accendiforzatura);
if (accendiforzatura) //se lo stato attivitá lascia liberi di forzare, controlla se il tipocespite fa altrettanto...
{
TCespite ces(m.get(F_IDCESPITE));
const TRectype& cac = ces.categoria();
switch (ces.tipo())
{
case tc_immateriale: //controllo sull'immaterialitá del cespite....
if (cac.get_int("I1")!=0)
{
m.disable(F_FORZATURA_P_F);
m.disable(F_FORZATURA_P_C);
}
break;
case tc_pluriennale: //...e quindi sulla pluriennalitá
if (cac.get_int("I2")==3)
{
m.disable(F_FORZATURA_P_F);
m.disable(F_FORZATURA_P_C);
}
break;
default:
break;
}
}
// aggiornamento della colonna dei valori risultanti
m.set(F_RIS_AMMNOR_F, m.get_real(F_AMMNOR_F));
m.set(F_RIS_AMMACC_F, m.get_real(F_AMMACC_F));
m.set(F_RIS_AMMANT_F, m.get_real(F_AMMANT_F));
m.set(F_RIS_QUOTE_PERSE, m.get_real(F_QUOTE_PERSE));
m.set(F_RIS_PRIVATO, m.get_real(F_PRIVATO));
m.set(F_RIS_QUOTE_PRIV, m.get_real(F_QUOTE_PRIV));
m.set(F_RIS_AMMNOR_C, m.get_real(F_AMMNOR_C));
m.set(F_RIS_AMMACC_C, m.get_real(F_AMMACC_C));
m.set(F_RIS_AMMANT_C, m.get_real(F_AMMANT_C));
}
// funzione per il ricalcolo degli ammortamenti dopo la forzatura
void TForza_amm_movce::update_amm(const TMask& m)
{
TCespite ces(m.get(F_IDCESPITE));
TDate dtmov = m.get_date(F_DTMOV);
ces.calc_amm(1, FALSE, dtmov);
ces.calc_amm(2, FALSE, dtmov);
}
//funzione per l'aggiornamento dei campi plus-minusvalenza sul file AMMMV
void TForza_amm_movce::update_plusminus()
{
TRectype& amm1 = _rel->curr(-69);
TRectype& amm2 = _rel->curr(-77);
const real& difff = _qmask->get_plusminusf();
amm1.put(AMMMV_MINUS, difff<ZERO ? -difff : ZERO);
amm1.put(AMMMV_PLUS, difff>ZERO ? difff : ZERO);
const real& diffc = _qmask->get_plusminusc();
amm2.put(AMMMV_MINUS, diffc<ZERO ? -diffc : ZERO);
amm2.put(AMMMV_PLUS, diffc>ZERO ? diffc : ZERO);
}
//funzione per il ricalcolo automatico dei valori degli ammortamenti dopo la forzatura (in caso di prima forzatura)
int TForza_amm_movce::write(const TMask& m)
{
update_plusminus();
int err = TRelation_application::write(m);
if (err==NOERR)
update_amm(m);
return err;
}
//funzione per il ricalcolo automatico dei valori degli ammortamenti dopo la forzatura
int TForza_amm_movce::rewrite(const TMask& m)
{
update_plusminus();
int err = TRelation_application::rewrite(m);
if (err==NOERR)
update_amm(m);
return err;
}
bool TForza_amm_movce::user_create()
{
open_files(LF_TAB, LF_TABCOM, LF_CESPI, LF_AMMCE, LF_MOVCE, LF_MOVAM, LF_AMMMV, LF_SALCE, 0);
_rel = new TRelation(LF_MOVCE); // relazione principale su MOVCE
TString expr69;
expr69 << "IDCESPITE==IDCESPITE|IDMOV==IDMOV|TPAMM==1";
_rel->add(LF_AMMMV, expr69, 1, 0, 69); // prima relazione su AMMMV (alias 69): TPAMM=1
_rel->write_enable(-69);
TString expr77;
expr77 << "IDCESPITE==IDCESPITE|IDMOV==IDMOV|TPAMM==2";
_rel->add(LF_AMMMV, expr77, 1, 0, 77); // seconda relazione su AMMMV (alias 77): TPAMM=2
_rel->write_enable(-77);
_qmask = new TForce_mov_qmask;
_fmask = new TForce_mov_fmask;
return TRUE;
}
bool TForza_amm_movce::user_destroy()
{
delete _fmask;
delete _qmask;
delete _rel;
return TRUE;
}
int ce1200(int argc, char* argv[])
{
TForza_amm_movce fm;
fm.run(argc, argv, "Forzatura ammortamento sui movimenti");
return 0;
}

20
ce/ce1201a.h Executable file
View File

@ -0,0 +1,20 @@
// per ce1201a.uml
#define F_DITTA 101
#define F_RAGSOC 102
#define F_ESERCIZIO 103
#define F_INIZIO_ES 104
#define F_FINE_ES 105
#define F_SELECT 106
#define F_GRUPPO 107
#define F_SPECIE 108
#define F_DESC_GRSP 109
#define F_IDCESPITE 111
#define F_DESC_CES 112
#define F_IDMOV 113
#define F_DESC_MOV 123

167
ce/ce1201a.uml Executable file
View File

@ -0,0 +1,167 @@
#include "ce1201a.h"
TOOLBAR "Toolbar" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Selezione Movimenti" -1 -1 78 18
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 0 1 "@bParametri ditta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "DF"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 2 ""
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
FLAGS "D"
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "AZ"
USE CCE
JOIN ESC ALIAS 104 INTO CODTAB==CODTAB
INPUT CODTAB F_ESERCIZIO
DISPLAY "Codice esercizio" CODTAB
DISPLAY "Inizio esercizio" 104@->D0
DISPLAY "Fine esercizio" 104@->D1
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_INIZIO_ES 104@->D0
OUTPUT F_FINE_ES 104@->D1
CHECKTYPE REQUIRED
END
DATE F_INIZIO_ES
BEGIN
PROMPT 26 3 "Inizio "
FLAGS "D"
END
DATE F_FINE_ES
BEGIN
PROMPT 50 3 "Fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 4 "Gruppo "
FLAGS "Z"
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 4 "Specie "
FLAGS "_"
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
DISPLAY "Gruppo" CODTAB[5,6]
DISPLAY "Specie" CODTAB[7,10]
DISPLAY "Descrizione@60" 400@->S0
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE REQUIRED
WARNING "È necessario specificare l'attività corrente"
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 4 ""
FLAGS "D"
END
NUMBER F_IDCESPITE 10
BEGIN
PROMPT 1 8 "Cespite "
FLAGS "Z"
USE LF_CESPI
INPUT IDCESPITE F_IDCESPITE
DISPLAY "Cespite@10" IDCESPITE
DISPLAY "Desc@50" DESC
DISPLAY "Cat." CODCAT
DISPLAY "Impianto@10" CODIMP
DISPLAY "Stabilimento@30" STABILIM
DISPLAY "Reparto@30" REPARTO
DISPLAY "Data Acq.@10" DTCOMP
DISPLAY "Data Ali.@10" DTALIEN
OUTPUT F_IDCESPITE IDCESPITE
OUTPUT F_DESC_CES DESC
CHECKTYPE NORMAL
END
STRING F_DESC_CES 50
BEGIN
PROMPT 24 8 ""
USE LF_CESPI KEY 2
INPUT DESC F_DESC_CES
DISPLAY "Desc@50" DESC
DISPLAY "Codice@10" IDCESPITE
DISPLAY "Cat." CODCAT
DISPLAY "Impianto@10" CODIMP
DISPLAY "Stabilimento@30" STABILIM
DISPLAY "Reparto@30" REPARTO
DISPLAY "Data Acq.@10" DTCOMP
DISPLAY "Data Ali.@10" DTALIEN
COPY OUTPUT F_IDCESPITE
CHECKTYPE NORMAL
END
NUMBER F_IDMOV 11
BEGIN
PROMPT 1 10 "Movimento "
FLAGS "Z"
USE LF_MOVCE SELECT (IDRET="")&&(ANSI(DTMOV)>=ANSI(#F_INIZIO_ES))&&(ANSI(DTMOV)<=ANSI(#F_FINE_ES))
JOIN LF_CESPI INTO IDCESPITE==IDCESPITE
INPUT IDMOV F_IDMOV
DISPLAY "Movimento@11" IDMOV
DISPLAY "Data mov.@10" DTMOV
DISPLAY "Cod. tipo mov." CODMOV
DISPLAY "Data doc.@10" DTDOC
DISPLAY "Tipo doc." TPDOC
DISPLAY "Numero doc." NDOC
DISPLAY "Descrizione Movimento@50" DESC
DISPLAY "Cespite@10" IDCESPITE
DISPLAY "Impianto@10" LF_CESPI->CODIMP
DISPLAY "Descrizione Cespite@50" LF_CESPI->DESC
OUTPUT F_IDMOV IDMOV
OUTPUT F_DESC_MOV DESC
CHECKTYPE FORCED
FIELD IDMOV
KEY 1
END
STRING F_DESC_MOV 50
BEGIN
PROMPT 27 10 ""
FLAGS "D"
END
ENDPAGE
ENDMASK

52
ce/ce1201b.h Executable file
View File

@ -0,0 +1,52 @@
//campi maschera ce1201b.uml
#define F_DITTA 101
#define F_RAGSOC 102
#define F_ESERCIZIO 103
#define F_INIZIO_ES 104
#define F_FINE_ES 105
#define F_SITUAZIONE 106
#define F_GRUPPO 107
#define F_SPECIE 108
#define F_DESC_GRSP 109
#define F_DTMOV 110
#define F_IDMOVIM 111
#define F_CODMOV 112
#define F_DESCMOV 113
#define F_FORZATURA_Q_F 114
#define F_FORZATURA_P_F 115
#define F_FORZATURA_Q_C 116
#define F_FORZATURA_P_C 117
#define F_IDCESPI 120
#define F_DESC 121
#define F_AMMNOR_F 130
#define F_AMMACC_F 131
#define F_AMMANT_F 132
#define F_AMMNOR_C 133
#define F_AMMACC_C 134
#define F_AMMANT_C 135
#define F_QUOTE_PERSE 136
#define F_PRIVATO 137
#define F_QUOTE_PRIV 138
#define F_P_AMMNOR_F 139
#define F_P_AMMACC_F 140
#define F_P_AMMANT_F 141
#define F_P_AMMNOR_C 142
#define F_P_AMMACC_C 143
#define F_P_AMMANT_C 144
#define F_RIS_AMMNOR_F 145
#define F_RIS_AMMACC_F 146
#define F_RIS_AMMANT_F 147
#define F_RIS_AMMNOR_C 148
#define F_RIS_AMMACC_C 149
#define F_RIS_AMMANT_C 150
#define F_RIS_QUOTE_PERSE 151
#define F_RIS_PRIVATO 152
#define F_RIS_QUOTE_PRIV 153
#define F_RESIDUO_F 154
#define F_RESIDUO_C 155
#define F_PLUSMINUS_F 156
#define F_PLUSMINUS_C 157

464
ce/ce1201b.uml Executable file
View File

@ -0,0 +1,464 @@
#include "ce1201b.h"
TOOLBAR "Toolbar" 0 -2 0 2
BUTTON DLG_SAVEREC 10 2
BEGIN
PROMPT -13 -1 "~Registra"
MESSAGE EXIT,K_SAVE
PICTURE BMP_SAVEREC
PICTURE BMP_SAVERECDN
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -33 -1 ""
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -23 10 ""
FLAGS "D"
END
ENDPAGE
PAGE "Forzatura ammortamento sul movimento" -1 -1 78 18
GROUPBOX DLG_NULL 78 8
BEGIN
PROMPT 0 1 "@bParametri movimento selezionato"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "DF"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 2 ""
FLAGS "D"
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "DGZ"
USE CCE
JOIN ESC ALIAS 104 INTO CODTAB==CODTAB
INPUT CODTAB F_ESERCIZIO
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_INIZIO_ES 104@->D0
OUTPUT F_FINE_ES 104@->D1
CHECKTYPE REQUIRED
KEY 1
END
DATE F_INIZIO_ES
BEGIN
PROMPT 26 3 "Inizio "
FLAGS "D"
END
DATE F_FINE_ES
BEGIN
PROMPT 50 3 "Fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 4 "Gruppo "
FLAGS "DZ"
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 4 "Specie "
FLAGS "_D"
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE NORMAL
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 4 ""
FLAGS "D"
END
NUMBER F_IDCESPI 10
BEGIN
PROMPT 1 5 "Cespite "
FLAGS "DZ"
FIELD IDCESPITE
KEY 1
END
STRING F_DESC 53
BEGIN
PROMPT 23 5 ""
FLAGS "D"
USE LF_CESPI
INPUT IDCESPITE F_IDCESPI
OUTPUT F_DESC DESC
CHECKTYPE REQUIRED
END
DATE F_DTMOV
BEGIN
PROMPT 1 6 "Data Movimento "
FLAGS "D"
FIELD DTMOV
END
NUMBER F_IDMOVIM 11
BEGIN
PROMPT 33 6 "N. Mov. "
FLAGS "DZ"
FIELD IDMOV
END
STRING F_CODMOV 1
BEGIN
PROMPT 58 6 "Cod. Tipo "
FLAGS "D"
FIELD CODMOV
END
STRING F_DESCMOV 63
BEGIN
PROMPT 1 7 "Descrizione "
FLAGS "D"
FIELD DESC
END
LIST DLG_NULL 1
BEGIN
PROMPT 1 92 ""
FLAGS "D"
ITEM "1|1"
FIELD 69@->TPAMM
GROUP 1
END
LIST DLG_NULL 1
BEGIN
PROMPT 1 93 ""
FLAGS "D"
ITEM "2|2"
FIELD 77@->TPAMM
GROUP 2
END
TEXT DLG_NULL
BEGIN
PROMPT 0 9 "@bSituazione"
END
RADIOBUTTON F_SITUAZIONE 1 75
BEGIN
PROMPT 16 8 ""
FLAGS "Z"
ITEM "F|Fiscale" //group1 é quello fiscale, il group 2 quello civilistico
MESSAGE SHOW,1@|HIDE,2@
ITEM "C|Civilistica"
MESSAGE HIDE,1@|SHOW,2@
END
TEXT DLG_NULL
BEGIN
PROMPT 0 10 "@bForzatura"
END
BOOLEAN F_FORZATURA_Q_F
BEGIN
PROMPT 17 10 "Quote "
FLAGS "G"
MESSAGE FALSE DISABLE,3@
MESSAGE TRUE ENABLE,3@|DISABLE,4@
FIELD 69@->FZQUO
GROUP 1
END
BOOLEAN F_FORZATURA_P_F
BEGIN
FLAGS "G"
PROMPT 35 10 "Percentuale "
MESSAGE FALSE DISABLE,4@
MESSAGE TRUE ENABLE,4@|DISABLE,3@
FIELD 69@->FZPER
GROUP 1
END
BOOLEAN F_FORZATURA_Q_C
BEGIN
FLAGS "G"
PROMPT 17 10 "Quote "
MESSAGE FALSE DISABLE,5@
MESSAGE TRUE ENABLE,5@|DISABLE,6@
FIELD 77@->FZQUO
GROUP 2
END
BOOLEAN F_FORZATURA_P_C
BEGIN
PROMPT 35 10 "Percentuale "
FLAGS "G"
MESSAGE FALSE DISABLE,6@
MESSAGE TRUE ENABLE,6@|DISABLE,5@
FIELD 77@->FZPER
GROUP 2
END
GROUPBOX DLG_NULL 78 11
BEGIN
PROMPT 0 11 "@b Valori Forzati Valori Risultanti"
END
CURRENCY F_AMMNOR_F 15
BEGIN
PROMPT 1 12 "Normale "
FIELD 69@->QNOR
GROUP 1
GROUP 3
END
CURRENCY F_AMMNOR_C 15
BEGIN
PROMPT 1 12 "Normale "
FIELD 77@->QNOR
GROUP 2
GROUP 5
END
CURRENCY F_AMMACC_F 15
BEGIN
PROMPT 1 13 "Accelerato "
FIELD 69@->QACC
GROUP 1
GROUP 3
END
CURRENCY F_AMMACC_C 15
BEGIN
PROMPT 1 13 "Accelerato "
FIELD 77@->QACC
GROUP 2
GROUP 5
END
CURRENCY F_AMMANT_F 15
BEGIN
PROMPT 1 14 "Anticipato "
FIELD 69@->QANT
GROUP 1
GROUP 3
END
CURRENCY F_AMMANT_C 15
BEGIN
PROMPT 1 14 "Anticipato "
FIELD 77@->QANT
GROUP 2
GROUP 5
END
NUMBER F_QUOTE_PERSE 15
BEGIN
PROMPT 1 15 "Quote perse "
FIELD 69@->QPERSE
GROUP 1
GROUP 3
END
NUMBER F_PRIVATO 15
BEGIN
PROMPT 1 16 "Privato "
FIELD 69@->FPRIVATO
GROUP 1
GROUP 3
END
NUMBER F_QUOTE_PRIV 15
BEGIN
PROMPT 1 17 "Quote per priv. "
FIELD 69@->QPPRIVATE
GROUP 1
GROUP 3
END
NUMBER F_P_AMMNOR_F 6 2
BEGIN
PROMPT 35 12 ""
FIELD 69@->PNOR
GROUP 1
GROUP 4
END
NUMBER F_P_AMMNOR_C 6 2
BEGIN
PROMPT 35 12 ""
FIELD 77@->PNOR
GROUP 2
GROUP 6
END
TEXT -1
BEGIN
PROMPT 42 12 "%"
END
NUMBER F_P_AMMACC_F 6 2
BEGIN
PROMPT 35 13 ""
FIELD 69@->PACC
GROUP 1
GROUP 4
END
NUMBER F_P_AMMACC_C 6 2
BEGIN
PROMPT 35 13 ""
FIELD 77@->PACC
GROUP 2
GROUP 6
END
TEXT -1
BEGIN
PROMPT 42 13 "%"
END
NUMBER F_P_AMMANT_F 6 2
BEGIN
PROMPT 35 14 ""
FIELD 69@->PANT
GROUP 1
GROUP 4
END
NUMBER F_P_AMMANT_C 6 2
BEGIN
PROMPT 35 14 ""
FIELD 77@->PANT
GROUP 2
GROUP 6
END
TEXT -1
BEGIN
PROMPT 42 14 "%"
END
CURRENCY F_RIS_AMMNOR_F 15
BEGIN
FLAGS "D"
PROMPT 55 12 ""
GROUP 1
END
CURRENCY F_RIS_AMMNOR_C 15
BEGIN
FLAGS "D"
PROMPT 55 12 ""
GROUP 2
END
CURRENCY F_RIS_AMMACC_F 15
BEGIN
FLAGS "D"
PROMPT 55 13 ""
GROUP 1
END
CURRENCY F_RIS_AMMACC_C 15
BEGIN
FLAGS "D"
PROMPT 55 13 ""
GROUP 2
END
CURRENCY F_RIS_AMMANT_F 15
BEGIN
FLAGS "D"
PROMPT 55 14 ""
GROUP 1
END
CURRENCY F_RIS_AMMANT_C 15
BEGIN
FLAGS "D"
PROMPT 55 14 ""
GROUP 2
END
CURRENCY F_RIS_QUOTE_PERSE 15
BEGIN
FLAGS "D"
PROMPT 55 15 ""
GROUP 1
END
CURRENCY F_RIS_PRIVATO 15
BEGIN
FLAGS "D"
PROMPT 55 16 ""
GROUP 1
END
CURRENCY F_RIS_QUOTE_PRIV 15
BEGIN
FLAGS "D"
PROMPT 55 17 ""
GROUP 1
END
CURRENCY F_RESIDUO_F 15
BEGIN
FLAGS "D"
PROMPT 31 19 "Residuo parti eliminate "
GROUP 1
END
CURRENCY F_RESIDUO_C 15
BEGIN
FLAGS "D"
PROMPT 31 19 "Residuo parti eliminate "
GROUP 2
END
CURRENCY F_PLUSMINUS_F 15
BEGIN
FLAGS "D"
PROMPT 31 20 "Plusval./Minus. patrim. "
GROUP 1
END
CURRENCY F_PLUSMINUS_C 15
BEGIN
FLAGS "D"
PROMPT 31 20 "Plusval./Minus. patrim. "
GROUP 2
END
ENDPAGE
ENDMASK

481
ce/ce1300.cpp Executable file
View File

@ -0,0 +1,481 @@
#include <defmask.h>
#include <recarray.h>
#include <relapp.h>
#include <sheet.h>
#include <utility.h>
#include "ce1.h"
#include "ce2101.h"
#include "celib.h"
#include "ce1301a.h"
//#include "ce1301b.h"
#include "../cg/cglib01.h"
#include "cespi.h"
#include "salce.h"
#include "ammce.h"
//-----------------------------------------------------------------------------------------------------------------------//
//Maschera di selezione
class TSelect_ammoces_qmask : public TAutomask
{
int _staat;
real _residuof, _residuoc;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
void on_search_event(TOperable_field& o);
int calcola_stato_attivita();
bool cespite_ok() const;
public:
int stato_attivita() const { return _staat; }
real get_residuof() const { return _residuof; }
real get_residuoc() const { return _residuoc; }
void calc_res(bool prec);
TSelect_ammoces_qmask();
};
void TSelect_ammoces_qmask::on_search_event(TOperable_field& o)
{
TToken_string order, fields, header;
if (o.dlg() >= F_SEARCH3)
{
order.add(CESPI_STABILIM); header.add("Stabilimento");
order.add(CESPI_REPARTO); header.add("Reparto@10");
}
if (o.dlg() >= F_SEARCH2)
{
order.add(CESPI_CODIMP); header.add("Impianto@10");
}
if (o.dlg() >= F_SEARCH1)
{
order.add(CESPI_CODCAT); header.add("Cat");
order.add(CESPI_DTCOMP); header.add("Data Acq.@10");
}
order.add(CESPI_IDCESPITE); header.add("Codice@10");
fields = order;
fields.add(CESPI_DESC); header.add("Descrizione@50");
TRelation rel(LF_CESPI);
TString filter;
if (!field(F_IMPIANTO).empty())
filter << CESPI_CODIMP << "==" << get(F_IMPIANTO);
TSorted_cursor cur(&rel, order, filter);
TCursor_sheet sht(&cur, fields, "Cespiti", header, 0, 1);
if (sht.run() == K_ENTER)
{
TToken_string& row = sht.row();
const int cod_pos = row.items()-2;
set(F_IDCESPITE, row.get(cod_pos), TRUE);
stop_run(K_AUTO_ENTER);
}
}
int TSelect_ammoces_qmask::calcola_stato_attivita()
{
const int ese = get_int(F_ESERCIZIO);
const int gru = get_int(F_GRUPPO);
const char* spe = get(F_SPECIE);
TString16 str;
str.format("%04d%02d%-4s", ese, gru, spe);
const TRectype& curr_ccb = cache().get("CCB", str);
if (curr_ccb.get_bool("B1")) // Bollato stampato
_staat = 1;
TDitta_cespiti& dc = ditta_cespiti();
dc.set_attivita(ese, gru, spe);
return _staat;
}
bool TSelect_ammoces_qmask::cespite_ok() const
{
TLocalisamfile cespi(LF_CESPI);
cespi.put(CESPI_IDCESPITE, get(F_IDCESPITE));
bool ok = cespi.read() == NOERR;
return ok;
}
void TSelect_ammoces_qmask::calc_res(bool prec)
{
TCespite ces (get(F_IDCESPITE));
// calcolo ammortamento sul cespite (per sit. fiscale(1) e civilistica(2))
TDate fine_es = get(F_FINE_ES);
ces.calc_amm(1, FALSE, fine_es);
const TRectype& salce2=ces.sal_pro(); //rectype giá di "tipo fiscale"
const TRectype& ammce2=ces.amm_pro();
// determinazione del residuo fiscale
_residuof = ZERO;
_residuof = salce2.get_real(SALCE_CSTO)-salce2.get_real(SALCE_VNONAMM)+salce2.get_real(SALCE_RIV75)+salce2.get_real(SALCE_RIV83)+salce2.get_real(SALCE_RIV90)+salce2.get_real(SALCE_RIV91)+salce2.get_real(SALCE_RIVGF);
_residuof -= ammce2.get_real(AMMCE_QNORP)+ammce2.get_real(AMMCE_QACCP)+ammce2.get_real(AMMCE_QANTP)+ammce2.get_real(AMMCE_QPERSEP)+ammce2.get_real(AMMCE_FPRIVATOP)+ammce2.get_real(AMMCE_QPPRIVATEP);
if (!prec)
_residuof -= ammce2.get_real(AMMCE_QNOR)+ammce2.get_real(AMMCE_QACC)+ammce2.get_real(AMMCE_QANT)+ammce2.get_real(AMMCE_QPERSE)+ammce2.get_real(AMMCE_FPRIVATO)+ammce2.get_real(AMMCE_QPPRIVATE);
ces.calc_amm(2, FALSE, fine_es);
//rectype giá di "tipo civilistico"
// determinazione del residuo civilistico
_residuoc = ZERO;
_residuoc = salce2.get_real(SALCE_CSTO)+salce2.get_real(SALCE_RIV75)+salce2.get_real(SALCE_RIV83)+salce2.get_real(SALCE_RIV90)+salce2.get_real(SALCE_RIV91)+salce2.get_real(SALCE_RIVGC);
_residuoc -= ammce2.get_real(AMMCE_QNORP)+ammce2.get_real(AMMCE_QACCP)+ammce2.get_real(AMMCE_QANTP);
if (!prec)
_residuoc -= ammce2.get_real(AMMCE_QNOR)+ammce2.get_real(AMMCE_QACC)+ammce2.get_real(AMMCE_QANT);
}
bool TSelect_ammoces_qmask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_ESERCIZIO:
if (e == fe_close)
calcola_stato_attivita();
break;
case F_SEARCH1:
case F_SEARCH2:
case F_SEARCH3:
if (e == fe_button)
on_search_event(o);
break;
case F_IDCESPITE: //é come fare l'OR (F_IDCESPITE || F_IDCESPITE_I)
case F_IDCESPITE_I:
if (e == fe_close)
{
if (!cespite_ok())
return error_box("Inserire un cespite valido"); //controlla che esista il cespite
if (stato_attivita() == 1)
warning_box("E' stato stampato il bollato dell'anno:\nnon sono permesse forzature"); //il bollato é stato stampato
TLocalisamfile salce(LF_SALCE); // controlla che esista almeno un saldo
salce.put(SALCE_IDCESPITE, get(F_IDCESPITE));
salce.put(SALCE_CODES, get(F_ESERCIZIO));
salce.put(SALCE_TPSALDO, 1);
if (salce.read() != NOERR)
return error_box("Non esistono saldi per l'anno selezionato");
TLocalisamfile ammce(LF_AMMCE); // controlla che esista almeno un ammortamento (sennó che forzamo?)
ammce.put(AMMCE_IDCESPITE, get(F_IDCESPITE));
ammce.put(AMMCE_CODES, get(F_ESERCIZIO));
ammce.put(AMMCE_TPSALDO, 1);
ammce.put(AMMCE_TPAMM, 1);
if (ammce.read() != NOERR)
return error_box("Non esistono ammortamenti per l'anno selezionato");
TCespite ces (get(F_IDCESPITE)); // controlla che la categoria del cespite sia ammortizzabile
const TRectype& categoria = ces.categoria();
bool non_ammortizzabile = categoria.get_bool("B0");
if (non_ammortizzabile)
return error_box("La categoria del cespite selezionato non é ammortizzabile");
calc_res(TRUE); // controllo dei residui fiscale e civilistico in ingresso (prec=TRUE)
if (_residuof==ZERO)
return error_box("Impossibile forzare ammortamento perché non esiste residuo fiscale da ammortizzare per il cespite");
if (_residuoc==ZERO)
return error_box("Impossibile forzare ammortamento perché non esiste residuo civilistico da ammortizzare per il cespite");
}
break;
default:
break;
}
return TRUE;
}
TSelect_ammoces_qmask::TSelect_ammoces_qmask() : TAutomask("ce1301a")
{
first_focus(F_IDCESPITE);
}
/*
//-----------------------------------------------------------------------------------------------------------------------//
//Maschera di selezione ammortamento sul cespite
class TSelect_ammoces_smask : public TAutomask
{
TTipo_cespite _tipo;
int _staat;
real _residuof_ini,_residuoc_ini;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
void set_stato_attivita(int sa) { _staat = sa; }
int stato_attivita() const { return _staat; }
void set_tipo_cespite(TTipo_cespite tc) { _tipo = tc; }
TTipo_cespite tipo_cespite() const { return _tipo; }
void set_residuof_ini(const real& rfini) { _residuof_ini = rfini; }
void set_residuoc_ini(const real& rcini) { _residuoc_ini = rcini; }
TSelect_ammoces_smask() : TAutomask("ce1301b") { }
};
bool TForce_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
bool ok = TRUE;
switch (o.dlg())
{
case F_CATEGORIA:
ditta_cespiti().on_category_event(o, e, jolly);
break;
case F_FORZATURA_Q_F: //gestione reset dei vari checkbox di forzatura
if (e==fe_modify && o.get()=="X" && get(F_FORZATURA_P_F)=="X")
reset(F_FORZATURA_P_F);
break;
case F_FORZATURA_P_F:
if (e==fe_modify && o.get()=="X" && get(F_FORZATURA_Q_F)=="X")
reset(F_FORZATURA_Q_F);
break;
case F_FORZATURA_Q_C:
if (e==fe_modify && o.get()=="X" && get(F_FORZATURA_P_C)=="X")
reset(F_FORZATURA_P_C);
break;
case F_FORZATURA_P_C:
if (e==fe_modify && o.get()=="X" && get(F_FORZATURA_Q_C)=="X")
reset(F_FORZATURA_Q_C);
break;
case F_AMMNOR_F: // controlla che residuof sia < della somma dei campi quota fiscali (al variare di
case F_AMMACC_F: // ognuno dei campi quota componenti, in modo che in caso di errore il campo sia
case F_AMMANT_F: // subito identificato
case F_QUOTE_PERSE:
case F_PRIVATO:
case F_QUOTE_PRIV:
if (e==fe_close||e==fe_modify)
{
real sumf = get_real(F_AMMNOR_F)+get_real(F_AMMACC_F)+get_real(F_AMMANT_F)+get_real(F_QUOTE_PERSE)+get_real(F_PRIVATO)+get_real(F_QUOTE_PRIV);
if (sumf > _residuof_ini)
return error_box("Attenzione: l'ammortamento richiesto supera il residuo fiscale del cespite");
}
break;
case F_AMMNOR_C: // controlla che residuoc sia < della somma dei campi quota civilistici
case F_AMMACC_C:
case F_AMMANT_C:
if (e==fe_close||e==fe_modify)
{
real sumc = get_real(F_AMMNOR_C)+get_real(F_AMMACC_C)+get_real(F_AMMANT_C);
if (sumc > _residuoc_ini)
return error_box("Attenzione: l'ammortamento richiesto supera il residuo civilistico del cespite");
}
break;
default:
break;
}
return ok;
} */
//-----------------------------------------------------------------------------------------------------------------------//
//Applicazione
class TSelect_ammoces : public TRelation_application
{
TRelation* _ammce;
TSelect_ammoces_qmask* _qmask;
// TSelect_ammoces_smask* _smask;
private:
void protect_fields(TMask& m, TToken_string& enabling) const;
void init_mask(TMask& m);
void update_amm(const TMask& m);
protected:
// @cmember Inizializzazione dei dati dell'utente
virtual bool user_create();
// @cmember Distruzione dei dati dell'utente
virtual bool user_destroy();
virtual bool changing_mask(int mode);
// @cmember Richiede la maschera da usare
virtual TMask* get_mask(int mode);
// @cmember Ritorna la relazione da modificare
virtual TRelation* get_relation() const;
virtual void init_query_mode(TMask& m);
virtual void init_modify_mode(TMask& m);
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
};
bool TSelect_ammoces::changing_mask(int)
{
return TRUE;
}
TMask* TSelect_ammoces::get_mask(int mode)
{
// return mode == MODE_QUERY ? (TMask*)_qmask : (TMask*)_smask;
return mode == MODE_QUERY ? (TMask*)_qmask : (TMask*)_qmask;
}
TRelation* TSelect_ammoces::get_relation() const
{
return _ammce;
}
void TSelect_ammoces::init_query_mode(TMask& m)
{
ditta_cespiti().init_mask(m);
}
void TSelect_ammoces::init_mask(TMask& m)
{
TDitta_cespiti& dc = ditta_cespiti(); //se il bollato dell'esercizio é stato stampato inibisce il REGISTRA
dc.init_mask(m);
const bool can_edit = !dc.bollato_stampato() ;
m.enable(DLG_SAVEREC, can_edit);
m.enable(DLG_DELREC, can_edit);
/* _smask->set_stato_attivita(_qmask->stato_attivita()); //copia lo stato attivitá della precedente
_qmask->calc_res(TRUE); //calcola residuo precedente (prec=TRUE)
_smask->set_residuof_ini(_qmask->get_residuof()); //memorizza i residui precedenti nella maschera (non a video)
_smask->set_residuoc_ini(_qmask->get_residuoc());
_qmask->calc_res(FALSE); // ricalcola il residuo fiscale e civilistico in forzatura (prec=FALSE)
_smask->set(F_RESIDUO_F, _qmask->get_residuof()); //prende il residuo fiscale (civilistico) del cespite calcolato
_smask->set(F_RESIDUO_C, _qmask->get_residuoc()); //nella maschera di selezione e lo mette nella maschera di forzatura
*/}
void TSelect_ammoces::protect_fields(TMask& m, TToken_string& enabling) const
{
for (int f = m.fields()-1; f >= 0; f--)
{
TMask_field& fld = m.fld(f);
const short id = fld.dlg();
if (id > 100 && id < 1000 && fld.is_editable() && fld.enabled_default())
{
const bool on = enabling.empty() || enabling.get_pos(fld.dlg()) >= 0;
fld.enable(on);
}
}
}
void TSelect_ammoces::init_modify_mode(TMask& m)
{
init_mask(m);
/* const bool accendiforzatura=_smask->stato_attivita()!=1;
m.enable(F_FORZATURA_Q_F, accendiforzatura); //abilita i checks della forzatura quando il bollato NON é stampato
m.enable(F_FORZATURA_P_F, accendiforzatura);
m.enable(F_FORZATURA_Q_C, accendiforzatura);
m.enable(F_FORZATURA_P_C, accendiforzatura);
if (accendiforzatura) //se lo stato attivitá lascia liberi di forzare, controlla se il tipocespite fa altrettanto...
{
TCespite ces(m.get(F_IDCESPITE));
const TRectype& cac = ces.categoria();
switch (ces.tipo())
{
case tc_immateriale:
if (cac.get_int("I1")!=0)
{
m.disable(F_FORZATURA_P_F);
m.disable(F_FORZATURA_P_C);
}
break;
case tc_pluriennale:
if (cac.get_int("I2")==3)
{
m.disable(F_FORZATURA_P_F);
m.disable(F_FORZATURA_P_C);
}
break;
default:
break;
}
}
// aggiornamento della colonna dei valori risultanti
m.set(F_RIS_AMMNOR_F, m.get_real(F_AMMNOR_F));
m.set(F_RIS_AMMACC_F, m.get_real(F_AMMACC_F));
m.set(F_RIS_AMMANT_F, m.get_real(F_AMMANT_F));
m.set(F_RIS_QUOTE_PERSE, m.get_real(F_QUOTE_PERSE));
m.set(F_RIS_PRIVATO, m.get_real(F_PRIVATO));
m.set(F_RIS_QUOTE_PRIV, m.get_real(F_QUOTE_PRIV));
m.set(F_RIS_AMMNOR_C, m.get_real(F_AMMNOR_C));
m.set(F_RIS_AMMACC_C, m.get_real(F_AMMACC_C));
m.set(F_RIS_AMMANT_C, m.get_real(F_AMMANT_C)); */
}
// funzione per il ricalcolo degli ammortamenti dopo la forzatura
void TSelect_ammoces::update_amm(const TMask& m)
{
TCespite ces(m.get(F_IDCESPITE));
TDate fine_es = m.get_date(F_FINE_ES);
ces.calc_amm(1, FALSE, fine_es);
ces.calc_amm(2, FALSE, fine_es);
}
//funzione per il ricalcolo automatico dei valori degli ammortamenti dopo la forzatura (in caso di prima forzatura)
int TSelect_ammoces::write(const TMask& m)
{
int err = TRelation_application::write(m);
if (err==NOERR)
update_amm(m);
return err;
}
//funzione per il ricalcolo automatico dei valori degli ammortamenti dopo la forzatura
int TSelect_ammoces::rewrite(const TMask& m)
{
int err = TRelation_application::rewrite(m);
if (err==NOERR)
update_amm(m);
return err;
}
bool TSelect_ammoces::user_create()
{
open_files(LF_TABCOM, LF_TAB, LF_CESPI, LF_SALCE, LF_AMMCE, 0);
_ammce = new TRelation (LF_AMMCE); // relazione principale su AMMCE
TString expr;
expr << "IDCESPITE==IDCESPITE|CODES==CODES|TPSALDO==TPSALDO|TPAMM==2"; //seconda relazione su AMMCE
_ammce->add(LF_AMMCE, expr, 1, 0, 69); //69 é l'alias di AMMCE
_ammce->write_enable(-69); //abilita la scrittura su secondo AMMCE
_ammce->add(LF_CESPI, "IDCESPITE==IDCESPITE"); //estende la relazione con CESPI
_qmask = new TSelect_ammoces_qmask;
// _smask = new TForce_mask;
return TRUE;
}
bool TSelect_ammoces::user_destroy()
{
// delete _smask;
delete _qmask;
delete _ammce;
return TRUE;
}
int ce1300(int argc, char* argv[])
{
TSelect_ammoces a;
a.run(argc, argv, "Scelta ammortamento per cespite");
return 0;
}

23
ce/ce1301a.h Executable file
View File

@ -0,0 +1,23 @@
//campi maschera ce1301a.uml
#define F_DITTA 101
#define F_RAGSOC 102
#define F_ESERCIZIO 103
#define F_INIZIO_ES 104
#define F_FINE_ES 105
#define F_SELECT 106
#define F_GRUPPO 107
#define F_SPECIE 108
#define F_DESC_GRSP 109
#define F_IMPIANTO 112
#define F_DESC_IMP 113
#define F_SEARCH1 117
#define F_SEARCH2 118
#define F_SEARCH3 119
#define F_IDCESPITE 120
#define F_DESC 121
#define F_IDCESPITE_I 122
#define F_DESC_I 123

250
ce/ce1301a.uml Executable file
View File

@ -0,0 +1,250 @@
#include "ce1301a.h"
TOOLBAR "Toolbar" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Selezione cespiti" -1 -1 78 18
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 0 1 "@bParametri ditta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "DF"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 2 ""
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
FLAGS "D"
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "AZ"
USE CCE
JOIN ESC ALIAS 104 INTO CODTAB==CODTAB
INPUT CODTAB F_ESERCIZIO
DISPLAY "Codice esercizio" CODTAB
DISPLAY "Inizio esercizio" 104@->D0
DISPLAY "Fine esercizio" 104@->D1
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_INIZIO_ES 104@->D0
OUTPUT F_FINE_ES 104@->D1
CHECKTYPE REQUIRED
KEY 1
FIELD CODES
END
DATE F_INIZIO_ES
BEGIN
PROMPT 26 3 "Inizio "
FLAGS "D"
END
DATE F_FINE_ES
BEGIN
PROMPT 50 3 "Fine "
FLAGS "D"
END
RADIOBUTTON F_SELECT 1 75
BEGIN
PROMPT 1 3 ""
FLAGS "Z"
ITEM "A|Attività"
MESSAGE SHOW,1@|HIDE,2@
ITEM "I|Impianto"
MESSAGE SHOW,2@|HIDE,1@
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 5 "Gruppo "
FLAGS "Z"
GROUP 1
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 5 "Specie "
FLAGS "_"
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
DISPLAY "Gruppo" CODTAB[5,6]
DISPLAY "Specie" CODTAB[7,10]
DISPLAY "Descrizione@50" 400@->S0
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE NORMAL
GROUP 1
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 5 ""
FLAGS "D"
GROUP 1
END
NUMBER F_IMPIANTO 10
BEGIN
PROMPT 1 5 "Impianto "
FLAGS "Z"
USE CIM
INPUT CODTAB F_IMPIANTO
DISPLAY "Codice@10" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_IMPIANTO CODTAB
OUTPUT F_DESC_IMP S0
CHECKTYPE FORCED
GROUP 2
END
STRING F_DESC_IMP 50 45
BEGIN
PROMPT 26 5 ""
FLAGS "Z"
USE CIM KEY 2
INPUT S0 F_DESC_IMP
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@10" CODTAB
COPY OUTPUT F_IMPIANTO
CHECKTYPE REQUIRED
GROUP 2
END
NUMBER F_IDCESPITE 10
BEGIN
PROMPT 1 8 "Cespite "
FLAGS "Z"
USE LF_CESPI SELECT (CODCGRA=#F_GRUPPO)&&(CODSPA=#F_SPECIE)
INPUT IDCESPITE F_IDCESPITE
DISPLAY "Codice@10" IDCESPITE
DISPLAY "Desc@50" DESC
DISPLAY "Cat." CODCAT
DISPLAY "Impianto@10" CODIMP
DISPLAY "Stabilimento@30" STABILIM
DISPLAY "Reparto@30" REPARTO
DISPLAY "Data Acq.@10" DTCOMP
DISPLAY "Data Ali.@10" DTALIEN
OUTPUT F_IDCESPITE IDCESPITE
OUTPUT F_DESC DESC
CHECKTYPE REQUIRED
FIELD IDCESPITE
KEY 1
GROUP 1
END
STRING F_DESC 50
BEGIN
PROMPT 24 8 ""
USE LF_CESPI KEY 2 SELECT (CODCGRA=#F_GRUPPO)&&(CODSPA=#F_SPECIE)
INPUT DESC F_DESC
DISPLAY "Desc@50" DESC
DISPLAY "Codice@10" IDCESPITE
DISPLAY "Cat." CODCAT
DISPLAY "Impianto@10" CODIMP
DISPLAY "Stabilimento@30" STABILIM
DISPLAY "Reparto@30" REPARTO
DISPLAY "Data Acq.@10" DTCOMP
DISPLAY "Data Ali.@10" DTALIEN
COPY OUTPUT F_IDCESPITE
CHECKTYPE REQUIRED
FIELD DESC
GROUP 1
END
NUMBER F_IDCESPITE_I 10
BEGIN
PROMPT 1 8 "Cespite "
FLAGS "Z"
USE LF_CESPI SELECT CODIMP=#F_IMPIANTO
INPUT IDCESPITE F_IDCESPITE_I
COPY DISPLAY F_IDCESPITE
OUTPUT F_IDCESPITE_I IDCESPITE
OUTPUT F_DESC_I DESC
CHECKTYPE REQUIRED
MESSAGE COPY,F_IDCESPITE
FIELD IDCESPITE
KEY 1
GROUP 2
END
STRING F_DESC_I 50
BEGIN
PROMPT 24 8 ""
USE LF_CESPI KEY 2 SELECT CODIMP=#F_IMPIANTO
INPUT DESC F_DESC_I
COPY DISPLAY F_DESC
COPY OUTPUT F_IDCESPITE_I
CHECKTYPE REQUIRED
MESSAGE COPY,F_DESC
FIELD DESC
GROUP 2
END
LIST DLG_NULL 1
BEGIN
PROMPT 1 90 ""
FLAGS "D"
ITEM "2|2"
FIELD TPSALDO
KEY 1
END
LIST DLG_NULL 1
BEGIN
PROMPT 1 91 ""
FLAGS "D"
ITEM "1|1"
FIELD TPAMM
KEY 1
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 15 "@bRicerce alternative"
END
BUTTON F_SEARCH1 22 2
BEGIN
PROMPT 2 16 "Per categoria"
END
BUTTON F_SEARCH2 22 2
BEGIN
PROMPT 28 16 "Per impianto"
END
BUTTON F_SEARCH3 22 2
BEGIN
PROMPT 54 16 "Per stabilimento"
END
ENDPAGE
ENDMASK

903
ce/ce1500.cpp Executable file
View File

@ -0,0 +1,903 @@
#include <automask.h>
#include <defmask.h>
#include <recarray.h>
#include <relapp.h>
#include <sheet.h>
#include <utility.h>
#include "ce1.h"
#include "ce1500a.h"
#include "ce2101.h"
#include "celib.h"
#include "../cg/cglib01.h"
#include <causali.h>
#include <mov.h>
#include <pconti.h>
#include <rmov.h>
#include "ammce.h"
#include "ammmv.h"
#include "cespi.h"
#include "movce.h"
#include "salce.h"
///////////////////////////////////////////////////////////
// Maschera di selezione
///////////////////////////////////////////////////////////
class TMov_qmask;
class TMov_emask;
class TMovicespi : public TRelation_application
{
TRelation* _rel;
TMov_qmask* _qmask;
TMov_emask* _emask;
TFilename _prima_nota;
int _cg_line;
private:
void kill_mov(const TString& idcespite, const TString& idmov, int lfile);
void kill_rett(const TString& id, const TString& idmov);
protected:
virtual bool changing_mask(int mode) { return TRUE; }
virtual TMask* get_mask(int mode);
virtual TRelation* get_relation() const { return _rel; }
virtual const char* get_next_key();
virtual bool protected_record(TRelation &r);
virtual bool user_create();
virtual bool user_destroy();
virtual void init_query_mode(TMask& m);
virtual void init_insert_mode(TMask& m);
virtual void init_modify_mode(TMask& m);
virtual bool remove();
public:
int tipo_cr(int gruppo, int conto, long sottoconto) const;
void cg_mode();
bool select_mov(long numreg, TString& idmov) const;
int init_mask(TMask& m);
void save_if_dirty() { save(TRUE); }
};
TMovicespi& app() { return (TMovicespi&)main_app(); }
///////////////////////////////////////////////////////////
// Maschera di selezione
///////////////////////////////////////////////////////////
class TMov_qmask : public TAutomask
{
int _staat;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
int calcola_stato_attivita();
public:
int stato_attivita() const { return _staat; }
TMov_qmask();
};
int TMov_qmask::calcola_stato_attivita()
{
const int ese = get_int(F_ESERCIZIO);
const int gru = get_int(F_GRUPPO);
const char* spe = get(F_SPECIE);
TString16 str;
str.format("%04d%02d%-4s", ese, gru, spe);
const TRectype& curr_ccb = cache().get("CCB", str);
if (curr_ccb.get_bool("B1")) // Bollato stampato
_staat = 3;
else
{
TEsercizi_contabili esc;
str.format("%04d%02d%-4s", esc.pred(ese), gru, spe);
const TRectype& prev_ccb = cache().get("CCB", str);
_staat = prev_ccb.get_bool("B1") ? 2 : 1;
}
ditta_cespiti().set_attivita(ese, gru, spe);
return _staat;
}
bool TMov_qmask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_ESERCIZIO:
case F_GRUPPO:
case F_SPECIE:
calcola_stato_attivita();
enable(DLG_NEWREC, _staat != 3);
break;
case F_IMPIANTO:
case F_IDCESPITE:
if (e == fe_modify)
{
const TString& ces = get(F_IDCESPITE);
const TString& imp = get(F_IMPIANTO);
const bool cesok = !real::is_null(ces);
const bool impok = !real::is_null(imp);
TString80 filter;
if (cesok)
filter << MOVCE_IDCESPITE << "==\"" << ces << '"';
if (impok)
{
if (cesok)
filter << ")&&(";
filter << LF_CESPI << "->" << CESPI_CODIMP << "==\"" << imp << '"';
if (cesok)
{
filter << ')';
filter.insert("(", 0);
}
}
TEdit_field& m = efield(F_IDMOV);
m.browse()->set_filter(filter);
}
break;
default:
break;
}
return TRUE;
}
TMov_qmask::TMov_qmask() : TAutomask("ce1500a")
{
first_focus(F_IDMOV);
}
///////////////////////////////////////////////////////////
// Applicazione principale
///////////////////////////////////////////////////////////
class TMov_emask : public TAutomask
{
int _staat;
TCespite _cespite;
TString _s5;
private:
void set_inputability(short id, char flag);
void set_inputability(const short* id, char flag);
bool test_inputability(const short* id, char flag);
void set_fondi_inputability();
real calc_riv(const TRectype& salpro, int tipo) const;
void calc_amm(int tipo);
bool cespite_nuovo() const;
TCurrency sum_fields(const short* f) const;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual bool on_key(KEY k);
public:
void set_stato_attivita(int s) { _staat = s; }
TMov_emask();
};
// Determina se siamo in presenza di un cespite nuovo
bool TMov_emask::cespite_nuovo() const
{
const TDate dtacq = _cespite.get(CESPI_DTCOMP);
const TDate dtmov = get(F_DTMOV);
return !dtacq.ok() || dtacq >= dtmov;
}
TCurrency TMov_emask::sum_fields(const short* f) const
{
TCurrency sum, val;
for (int i = 0; f[i] != 0; i++)
{
get_currency(abs(f[i]), val);
if (f[i] > 0)
sum += val;
else
sum -= val;
}
return sum;
}
void TMov_emask::set_inputability(short id, char flag)
{
TMask_field& f = field(id);
if (flag=='S' || flag=='O')
f.enable();
else
{
f.reset();
f.disable();
}
f.check_type(flag=='O' ? CHECK_REQUIRED : CHECK_NORMAL);
}
void TMov_emask::set_inputability(const short* id, char flag)
{
if (flag == 'O')
flag = 'S';
for (; *id > 0; id++)
set_inputability(*id, flag);
}
bool TMov_emask::test_inputability(const short* id, char flag)
{
bool ok = flag != 'O';
if (!ok)
{
for (int i = 0; id[i] > 0; i++)
{
if (!field(id[i]).empty())
{
ok = TRUE;
break;
}
}
}
if (!ok)
error_box("E' necessario specificare almeno uno dei valori previsti dal tipo movimento");
return ok;
}
HIDDEN const short doc_ids[] = { F_TPDOC, F_NDOC, F_DTDOC, 0 };
HIDDEN const short riv_ids[] = { F_RIV75, F_RIV83, F_RIV90, F_RIV91, 0 };
HIDDEN const short fis_ids[] = { F_NORMALE, F_ACCELERATO, F_ANTICIPATO, 0 };
HIDDEN const short civ_ids[] = { F_NORMALE2, F_ACCELERATO2, F_ANTICIPATO2, 0 };
HIDDEN const short prv_ids[] = { F_FPRIVATO, F_QPERSEPRIV, 0 };
bool TMov_emask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_CODMOV:
if ((e == fe_modify || e == fe_init))
{
const TRectype& tpmov = cache().get("%TMC", o.get());
const bool insert_rett = tpmov.get_int("I0") == 2 && insert_mode();
enable(F_IDRET, insert_rett);
if (insert_rett)
{
TString filter; // Filtro su movimenti rettificabili
filter << '(' << MOVCE_CODMOV << "=\"" << tpmov.get("S8") << "\")";
filter << "&&(ANSI(" << MOVCE_DTMOV << ")>=" << get_date(F_INIZIO_ES).string(ANSI) << ')';
filter << "&&(ANSI(" << MOVCE_DTMOV << ")<=" << get_date(F_FINE_ES).string(ANSI) << ')';
efield(F_IDRET).browse()->set_filter(filter);
}
_s5 = tpmov.get("S5");
if (_s5.empty())
_s5.spaces(16);
set_inputability(doc_ids, _s5[0]);
set_inputability(F_IMPVEN, _s5[2]);
set_inputability(F_ELEMENTI, _s5[3]);
set_inputability(F_COSTO, _s5[4]);
set_inputability(F_VNONAMM, _s5[5]);
set_inputability(F_PLUSREIN, _s5[6]);
set_inputability(riv_ids, _s5[7]);
set_inputability(F_RIVGF, _s5[8]);
set_inputability(F_RIVGC, _s5[9]);
// Determina segni possibili
switch (tpmov.get_char("S7"))
{
case '+': disable(F_SEGNO); set(F_SEGNO, "+"); break;
case '-': disable(F_SEGNO); set(F_SEGNO, "-"); break;
default : enable(F_SEGNO); break;
}
}
break;
case F_IDRET:
if (e == fe_modify)
{
TString16 ces;
if (!o.empty())
{
TEdit_field& e = (TEdit_field&)o;
ces = e.browse()->cursor()->curr().get(MOVCE_IDCESPITE);
TEdit_field& c = efield(F_IDCESPITE);
c.set(ces);
c.check();
}
enable(F_IDCESPITE, ces.empty()); // Dis/abilita codice cespite
enable(F_DESC_CES, ces.empty()); // Dis/abilita descrizione cespite
}
break;
case F_IDCESPITE:
if (e == fe_init || e == fe_modify || e == fe_close)
{
const TString& id = o.get();
if (_cespite.get(CESPI_IDCESPITE) != id)
_cespite.read(id);
enable_page(3, id.not_empty());
if (id.not_empty())
{
const TRectype& cat = _cespite.categoria();
set(F_CATEGORIA, _cespite.get(CESPI_CODCAT), TRUE);
set(F_DESC_CAT, cat.get("S0"), TRUE);
if (o.enabled())
{
const TRectype& tpmov = cache().get("%TMC", get(F_CODMOV));
switch (_cespite.tipo())
{
case tc_immateriale:
if (!tpmov.get_bool("B1"))
return error_box("Movimento non applicabile a beni immateriali");
break;
case tc_pluriennale:
if (!tpmov.get_bool("B2"))
return error_box("Movimento non applicabile a costi pluriennali");
break;
default:
if (!tpmov.get_bool("B0"))
return error_box("Movimento non applicabile a beni materiali");
break;
}
}
}
else
{
reset(F_CATEGORIA);
reset(F_DESC_CAT);
}
const TDate dtcomp = _cespite.get(CESPI_DTCOMP);
if (dtcomp.ok())
{
const TDate dtmov = get(F_DTMOV);
if (dtcomp > dtmov)
return error_box("La data di acquisizione del cespite non può precedere quella del movimento");
}
}
break;
case F_DTMOV:
if (e == fe_init || e == fe_modify || e == fe_close)
{
TEdit_field& dd = efield(F_DTDOC);
if (dd.required() && dd.empty())
dd.set(o.get());
const TDate dtret = get(F_DTMOV_RET);
if (dtret.ok())
{
const TDate dtmov = o.get();
if (dtmov < dtret)
return error_box("La data del movimento di rettifica deve seguire la data del movimento rettificato");
}
}
break;
case F_TPDOC:
if (e == fe_button)
{
TArray_sheet sci(3, 3, -3, -3, o.prompt(), "Tipo|Descrizione@20");
sci.add("FA|Fattura d'acquisto");
sci.add("FV|Fattura di vendita");
sci.add("NC|Nota di credito");
sci.add("ND|Nota di debito");
if (sci.run() == K_ENTER)
{
TToken_string& str = sci.row(-1);
o.set(str.get(0));
}
}
if (e == fe_close)
return test_inputability(doc_ids, _s5[0]);
break;
case F_RIV75:
if (e == fe_close)
return test_inputability(riv_ids, _s5[7]);
break;
case F_ELEMENTI:
if (e == fe_modify || e == fe_close)
{
if (o.empty() && cespite_nuovo())
return error_box("È necessario inserire il numero di elementi del nuovo cespite");
}
break;
case F_VNONAMM:
if (e == fe_modify || e == fe_close)
{
TCurrency csto, vnon;
get_currency(F_COSTO, csto);
get_currency(F_VNONAMM, vnon);
if (vnon > csto)
return error_box("Il valore non ammortizzabile non puo' superare %s", csto.string(TRUE));
}
break;
case F_PLUSREIN:
if (e == fe_modify || e == fe_close)
{
TCurrency csto, vnon, plus;
get_currency(F_COSTO, csto);
get_currency(F_VNONAMM, vnon);
get_currency(F_PLUSREIN, plus);
const TCurrency val = csto-vnon;
if (plus > val)
return error_box("La plusvalenza reinvestita non puo' superare %s", val.string(TRUE));
}
break;
case F_NORMALE:
if (e == fe_close)
{
if (!test_inputability(fis_ids, _s5[10]))
return FALSE;
const short fv[] = { F_COSTO, -F_VNONAMM, F_RIV75, F_RIV83, F_RIV90, F_RIV91, F_RIVGF, 0 };
const short fa[] = { F_NORMALE, F_ACCELERATO, F_ANTICIPATO, F_QPERSE, F_FPRIVATO, F_QPERSEPRIV, 0 };
const TCurrency val_amm = sum_fields(fv);
const TCurrency fon_amm = sum_fields(fa);
if (fon_amm > val_amm)
{
TString msg;
msg << "Il fondo ammortamento fiscale (" << fon_amm.string(TRUE) << ')';
msg << "non puo' superare il valore da ammortizzare (" << val_amm.string(TRUE) << ')';
return error_box(msg);
}
}
break;
case F_NORMALE2:
if (e == fe_close)
{
if (!test_inputability(civ_ids, _s5[11]))
return FALSE;
const short fv[] = { F_COSTO, F_RIV75, F_RIV83, F_RIV90, F_RIV91, F_RIVGC, 0 };
const short fa[] = { F_NORMALE2, F_ACCELERATO2, F_ANTICIPATO2, 0 };
const TCurrency val_amm = sum_fields(fv);
const TCurrency fon_amm = sum_fields(fa);
if (fon_amm > val_amm)
{
TString msg;
msg << "Il fondo ammortamento civilistico (" << fon_amm.string(TRUE) << ')';
msg << "non puo' superare il valore da ammortizzare (" << val_amm.string(TRUE) << ')';
return error_box(msg);
}
}
break;
case S_TIPO:
if (e == fe_modify)
calc_amm(atoi(o.get()));
break;
default:
break;
}
return TRUE;
}
real TMov_emask::calc_riv(const TRectype& salpro, int tipo) const
{
const char* riv_ids[] = { SALCE_RIV75, SALCE_RIV83, SALCE_RIV90, SALCE_RIV91, NULL };
real riv;
for (int i = 0; riv_ids[i]; i++)
riv += salpro.get_real(riv_ids[i]);
if (tipo == 2)
riv += salpro.get_real(SALCE_RIVGC);
else
riv += salpro.get_real(SALCE_RIVGF);
return riv;
}
void TMov_emask::calc_amm(int tipo)
{
const TDate dtlim = get(F_DTMOV);
_cespite.calc_amm(tipo, FALSE, dtlim);
set(S_DATAMOV, dtlim);
const TRectype& s = _cespite.sal_pro();
set(S_ELEMENTI, s.get(SALCE_NUMELE));
set(S_COSTO, s.get_real(SALCE_CSTO));
set(S_VNONAMM, s.get(SALCE_VNONAMM));
set(S_PLUSREIN, s.get(SALCE_PLUSREIN));
set(S_TOTRIV, calc_riv(s, tipo));
real tot_val;
tot_val += get_real(S_COSTO); tot_val -= get_real(S_VNONAMM);
tot_val -= get_real(S_PLUSREIN); tot_val += get_real(S_TOTRIV);
set(S_TOTVAL, tot_val);
const TRectype& a = _cespite.amm_pro();
set(S_NORMALE, a.get(AMMCE_QNOR));
set(S_ACCELERATO, a.get(AMMCE_QACC));
set(S_ANTICIPATO, a.get(AMMCE_QANT));
set(S_QPERSE, a.get(AMMCE_QPERSE));
set(S_FPRIVATO, a.get(AMMCE_FPRIVATO));
set(S_QPERSEP, a.get(AMMCE_QPERSEP));
real tot_fon;
tot_fon += get_real(S_NORMALE); tot_fon += get_real(S_ACCELERATO);
tot_fon += get_real(S_ANTICIPATO); tot_fon += get_real(S_QPERSE);
tot_fon += get_real(S_FPRIVATO); tot_fon += get_real(S_QPERSEP);
set(S_TOTFON, tot_fon);
const real tot_res = tot_val-tot_fon;
set(S_RESIDUO, tot_res);
TString key;
key << get(F_IDCESPITE) << '|' << get(F_IDMOV) << '|' << tipo;
const TRectype& ammmv = cache().get(LF_AMMMV, key);
set(S_PLUS, ammmv.get(AMMMV_PLUS));
set(S_MINUS, ammmv.get(AMMMV_MINUS));
}
void TMov_emask::set_fondi_inputability()
{
if (cespite_nuovo())
{
// Disabilito tutti i campi della pagina per i nuovi cespiti
set_inputability(fis_ids, ' ');
set_inputability(civ_ids, ' ');
set_inputability(F_QPERSE, ' ');
set_inputability(prv_ids, ' ');
}
else
{
set_inputability(fis_ids, _s5[10]);
set_inputability(civ_ids, _s5[11]);
set_inputability(F_QPERSE, _s5[12]);
bool should_be_on = _s5[10] == 'S' || _s5[10] == 'O'; // Test preliminare basato su %TMC
if (should_be_on)
should_be_on = _cespite.get_int(CESPI_USOPROM) > 1; // Test aggiuntivo su uso promiscuo
set_inputability(prv_ids, should_be_on ? _s5[10] : ' '); // Dis/abilita fondo privato e quote perse private
}
}
bool TMov_emask::on_key(KEY k)
{
// Try to predict next page!
const int old_page = curr_page()+1;
int new_page = old_page;
switch (k)
{
case K_CTRL+K_F1: new_page = 1; break;
case K_CTRL+K_F2: new_page = 2; break;
case K_CTRL+K_F3: new_page = 3; break;
case K_CTRL+K_F4: new_page = 4; break;
case K_PREV : new_page--; break;
case K_NEXT : new_page++; break;
default: break;
}
// If page will change ...
if (old_page != new_page) switch(new_page)
{
case 3:
set_fondi_inputability();
break;
case 4:
if (dirty() < S_TIPO)
{
app().save_if_dirty();
for (int f = fields()-1; f >= 0; f--)
{
TMask_field& c = fld(f);
c.set_dirty(FALSE);
}
}
set(S_TIPO, 1, TRUE);
break;
default: break;
}
return TAutomask::on_key(k);
}
TMov_emask::TMov_emask() : TAutomask("ce1500b")
{
}
///////////////////////////////////////////////////////////
// Applicazione principale
///////////////////////////////////////////////////////////
TMask* TMovicespi::get_mask(int mode)
{
return mode == MODE_QUERY ? (TMask*)_qmask : (TMask*)_emask;
}
bool TMovicespi::user_create()
{
open_files(LF_TAB, LF_TABCOM, LF_CESPI, LF_AMMCE, LF_SALCE, LF_MOVCE, LF_MOVAM, LF_AMMMV, 0);
_rel = new TRelation(LF_MOVCE);
_rel->add(LF_MOVAM, "IDCESPITE==IDCESPITE|IDMOV==IDMOV|TPAMM==1");
_rel->add(LF_MOVAM, "IDCESPITE==IDCESPITE|IDMOV==IDMOV|TPAMM==2", 1, 0, 2);
_rel->add(LF_MOVAM, "IDCESPITE==IDCESPITE|IDMOV==IDMOV|TPAMM==3", 1, 0, 3);
_rel->write_enable();
_qmask = new TMov_qmask;
_emask = new TMov_emask;
// Collegamento da prima nota
if (argc() > 2 && strncmp(argv(2), "/c", 2) == 0)
{
_prima_nota = argv(2);
_prima_nota.ltrim(2);
_cg_line = 1;
}
else
{
_prima_nota.cut(0);
_cg_line = 0;
}
return TRUE;
}
bool TMovicespi::user_destroy()
{
delete _emask;
delete _qmask;
delete _rel;
return TRUE;
}
const char* TMovicespi::get_next_key()
{
real num = 1;
TLocalisamfile& cespi = _rel->lfile(LF_MOVCE);
if (cespi.last() == NOERR)
num = cespi.get_real(MOVCE_IDMOV) + 1;
return format("%d|%s", F_IDMOV, num.string());
}
bool TMovicespi::protected_record(TRelation &r)
{
bool stampato = r.curr().get_bool(MOVCE_STAMPATO);
return stampato;
}
int TMovicespi::tipo_cr(int gruppo, int conto, long sottoconto) const
{
TString16 str;
str.format("%d|%d|%ld", gruppo, conto, sottoconto);
const TRectype& pcon = cache().get(LF_PCON, str);
const int t = pcon.get_int(PCN_TIPOSPRIC);
return t;
}
bool TMovicespi::select_mov(long numreg, TString& idmov) const
{
TRelation rel(LF_MOVCE);
TString filter; filter << MOV_NUMREG << "==" << numreg;
TCursor cur(&rel, filter, 3);
long items = cur.items();
if (items == 0L)
{
cur.setkey(1);
cur.setfilter("");
items = cur.items();
}
bool ok = items > 0;
if (ok)
{
long selected = 0;
if (items > 1)
{
TCursor_sheet sheet(&cur, "NUMREG|IDMOV|DTMOV|DESC", "Movimenti cespiti",
"Registazione|Movimento@11|Data@10|Descrizione Movimento@50", 0, 1);
ok = sheet.run() == K_ENTER;
if (ok)
selected = sheet.selected();
}
if (ok)
{
cur = selected;
idmov = cur.curr().get(MOVCE_IDMOV);
}
}
return ok;
}
void TMovicespi::cg_mode()
{
TConfig ini(_prima_nota, "Transaction");
char action = ini.get("Action")[0];
TString8 para;
para.format("%d", LF_MOV);
ini.set_paragraph(para);
// Al primo inserimento devo impostare anche l'anno e l'attività
if (_cg_line == 1 && action == 'I')
{
_qmask->set(F_ESERCIZIO, ini.get(MOV_ANNOES), TRUE);
if (!_qmask->efield(F_SPECIE).on_key(K_F9))
action = ' ';
}
if (action == 'I')
{
for (int i = _cg_line; ; i++)
{
para.format("%d,%d", LF_RMOV, i);
if (ini.set_paragraph(para))
{
const int gruppo = ini.get_int(RMV_GRUPPO);
const int conto = ini.get_int(RMV_CONTO);
const int sottoconto = ini.get_int(RMV_SOTTOCONTO);
const int tipo = tipo_cr(gruppo, conto, sottoconto);
if (tipo == 2 || tipo == 3 || tipo == 4 || tipo == 8)
{
_cg_line = i;
_qmask->send_key(K_SPACE, DLG_NEWREC);
break;
}
}
else
{
action = ' ';
break;
}
}
} else
if (action == 'M' || action == 'D')
{
const long numreg = ini.get_long(MOV_NUMREG);
TString16 idmov;
if (select_mov(numreg, idmov))
{
_qmask->set(F_IDMOV, idmov, TRUE);
_qmask->send_key(K_AUTO_ENTER, 0);
}
else
action = ' ';
}
// Caso artificiale per terminare la transazione
if (action == ' ')
stop_run();
}
void TMovicespi::init_query_mode(TMask& m)
{
TDitta_cespiti& dc = ditta_cespiti();
dc.init_mask(m);
// Collegamento da prima nota
if (_cg_line > 0)
cg_mode();
}
int TMovicespi::init_mask(TMask& m)
{
TDitta_cespiti& dc = ditta_cespiti();
dc.init_mask(m);
const int staat = _qmask->stato_attivita();
_emask->set_stato_attivita(staat);
m.enable(DLG_NEWREC, staat != 3);
return staat;
}
void TMovicespi::init_insert_mode(TMask& m)
{
const int staat = init_mask(m);
m.enable(F_IDCESPITE);
m.enable(F_DESC_CES);
m.enable(DLG_SAVEREC, staat != 3);
if (_cg_line > 0)
{
TString16 para;
para.format("%d", LF_MOV);
TConfig ini(_prima_nota, para);
const TRectype& cau = cache().get(LF_CAUSALI, ini.get(MOV_CODCAUS));
m.set(F_CODMOV, cau.get(CAU_COLLCESP), TRUE);
if (m.field(F_TPDOC).active())
m.set(F_TPDOC, ini.get(MOV_TIPODOC), TRUE);
if (m.field(F_NDOC).active())
m.set(F_NDOC, ini.get(MOV_NUMDOC), TRUE);
if (m.field(F_DTDOC).active())
m.set(F_DTDOC, ini.get(MOV_DATADOC), TRUE);
TString desc = ini.get(MOV_DESCR);
if (desc.empty())
desc = cau.get(CAU_DESCR);
m.set(F_DESC_MOV, desc, TRUE);
if (m.field(F_COSTO).enabled())
{
para.format("%d,%d", LF_RMOV, _cg_line);
m.set(F_COSTO, ini.get(RMV_IMPORTO, para));
}
_cg_line++;
}
}
void TMovicespi::init_modify_mode(TMask& m)
{
const int staat = init_mask(m);
TEsercizi_contabili esc;
m.disable(F_IDCESPITE);
m.disable(F_DESC_CES);
const TRectype& rec = get_relation()->curr();
const TDate dtmov = rec.get(MOVCE_DTMOV);
bool bollato = rec.get_bool(MOVCE_STAMPATO);
if (!bollato) // Se proprio non ci fidiamo del flag
{
const TEsercizio& e = esc[m.get_int(F_ESERCIZIO)];
const TDate dtini = e.inizio();
const TDate dtfin = e.fine();
bollato = (staat == 3 && dtmov <= dtfin) || (staat == 2 && dtmov < dtini);
}
if (bollato)
{
m.disable(DLG_SAVEREC);
m.disable(DLG_DELREC);
TString msg = "Movimento già stampato sul Bollato dell'esercizio ";
msg << esc.date2esc(dtmov);
xvt_statbar_set(msg);
}
}
void TMovicespi::kill_mov(const TString& idcespite, const TString& idmov, int lfile)
{
CHECKD(lfile == LF_MOVAM || lfile == LF_AMMMV, "Invalid file ", lfile);
TRelation rel(lfile);
TRectype& filter = rel.curr();
filter.put("IDCESPITE", idcespite);
filter.put("IDMOV", idmov);
TCursor cur(&rel, "", 1, &filter, &filter);
const long items = cur.items();
cur.freeze();
for (cur = 0L; cur.pos() < items; ++cur)
rel.remove();
}
void TMovicespi::kill_rett(const TString& id, const TString& idmov)
{
TRelation rel(LF_MOVCE);
// Il cursore delle rettifiche usa la chiave 2: IDCESPITE+IDMOV
// Per cui parto a selezionare le possibili rettifiche dal movimento da rettificare ...
TRectype fromret(LF_MOVCE);
fromret.put(MOVCE_IDCESPITE, id);
fromret.put(MOVCE_IDMOV, idmov);
// ... in poi
TRectype toret(LF_MOVCE);
toret.put(MOVCE_IDCESPITE, id);
TString filtro;
filtro << MOVCE_IDRET << "==" << idmov; // Confronto numerico!
TCursor movcur(&rel, filtro, 2, &fromret, &toret);
const long items = movcur.items();
if (items > 0) // Se ci sono rettifiche
{
const TRectype& curr = movcur.curr();
movcur.freeze();
for (movcur = 0L; movcur.pos() < items; ++movcur)
{
const TString16 idmov = curr.get(MOVCE_IDMOV);
if (rel.remove() == NOERR)
{
kill_mov(id, idmov, LF_MOVAM);
kill_mov(id, idmov, LF_AMMMV);
}
}
}
}
bool TMovicespi::remove()
{
const TRectype& curr = get_relation()->curr();
const TString16 idcespite = curr.get(MOVCE_IDCESPITE);
const TString16 idmov = curr.get(MOVCE_IDMOV);
TRelation_application::remove();
kill_mov(idcespite, idmov, LF_MOVAM);
kill_mov(idcespite, idmov, LF_AMMMV);
kill_rett(idcespite, idmov);
return TRUE;
}
int ce1500(int argc, char* argv[])
{
TMovicespi mc;
mc.run(argc, argv, "Movimenti cespiti");
return 0;
}

90
ce/ce1500a.h Executable file
View File

@ -0,0 +1,90 @@
#define F_DITTA 101
#define F_RAGSOC 102
#define F_ESERCIZIO 103
#define F_INIZIO_ES 104
#define F_FINE_ES 105
#define F_SELECT 106
#define F_GRUPPO 107
#define F_SPECIE 108
#define F_DESC_GRSP 109
#define F_DESC_IMP 111
#define F_IDMOV 122
#define F_DESC_MOV 123
#define F_CODMOV 126
#define F_CODMOV_DES 127
#define F_TPDOC 128
#define F_TPDOC_DES 129
#define F_DTMOV 130
#define F_DTDOC 131
#define F_NDOC 132
#define F_NUMREG 133
#define F_IDRET 140
#define F_DESC_RET 141
#define F_CODMOV_RET 142
#define F_CODMOV_DES_RET 143
#define F_DTMOV_RET 144
#define F_TPDOC_RET 145
#define F_DTDOC_RET 146
#define F_NDOC_RET 147
#define F_IDCESPITE 150
#define F_DESC_CES 151
#define F_CATEGORIA 152
#define F_DESC_CAT 153
#define F_IMPIANTO 154
#define F_SEGNO 201
#define F_ELEMENTI 202
#define F_COSTO 203
#define F_VNONAMM 204
#define F_PLUSREIN 205
#define F_RIV75 206
#define F_RIV83 207
#define F_RIV90 208
#define F_RIV91 209
#define F_RIVGF 210
#define F_RIVGC 211
#define F_IMPVEN 212
#define F_IDMOVAM 251
#define F_IDCESAM 252
#define F_IDMOVAM2 253
#define F_IDCESAM2 254
#define F_IDMOVAM3 255
#define F_IDCESAM3 256
#define F_NORMALE 301
#define F_ACCELERATO 302
#define F_ANTICIPATO 303
#define F_QPERSE 304
#define F_FPRIVATO 305
#define F_QPERSEPRIV 306
#define F_NORMALE2 307
#define F_ACCELERATO2 308
#define F_ANTICIPATO2 309
#define F_NORMALE3 310
#define F_ACCELERATO3 311
#define F_ANTICIPATO3 312
#define S_TIPO 400
#define S_DATAMOV 401
#define S_ELEMENTI 402
#define S_COSTO 403
#define S_VNONAMM 404
#define S_PLUSREIN 405
#define S_TOTRIV 406
#define S_NORMALE 410
#define S_ACCELERATO 411
#define S_ANTICIPATO 412
#define S_QPERSE 413
#define S_FPRIVATO 414
#define S_QPERSEP 415
#define S_TOTVAL 420
#define S_TOTFON 421
#define S_RESIDUO 422
#define S_PLUS 423
#define S_MINUS 424

216
ce/ce1500a.uml Executable file
View File

@ -0,0 +1,216 @@
#include "ce1500a.h"
TOOLBAR "Toolbar" 0 -3 0 3
#include <toolbar.h>
ENDPAGE
PAGE "Movimenti cespiti" -1 -1 78 18
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 0 1 "@bParametri ditta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "DF"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 2 ""
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
FLAGS "D"
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "AZ"
USE CCE
JOIN ESC ALIAS 104 INTO CODTAB==CODTAB
INPUT CODTAB F_ESERCIZIO
DISPLAY "Codice esercizio" CODTAB
DISPLAY "Inizio esercizio" 104@->D0
DISPLAY "Fine esercizio" 104@->D1
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_INIZIO_ES 104@->D0
OUTPUT F_FINE_ES 104@->D1
CHECKTYPE REQUIRED
END
DATE F_INIZIO_ES
BEGIN
PROMPT 26 3 "Inizio "
FLAGS "D"
END
DATE F_FINE_ES
BEGIN
PROMPT 50 3 "Fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 4 "Gruppo "
FLAGS "Z"
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 4 "Specie "
FLAGS "_"
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
DISPLAY "Gruppo" CODTAB[5,6]
DISPLAY "Specie" CODTAB[7,10]
DISPLAY "Descrizione@60" 400@->S0
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE REQUIRED
WARNING "È necessario specificare l'attività corrente"
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 4 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 0 6 "@bSelezione per..."
END
NUMBER F_IMPIANTO 10
BEGIN
PROMPT 1 7 "Impianto "
FLAGS "Z"
USE CIM
INPUT CODTAB F_IMPIANTO
DISPLAY "Impianto@10" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_IMPIANTO CODTAB
OUTPUT F_DESC_IMP S0
CHECKTYPE NORMAL
END
STRING F_DESC_IMP 50
BEGIN
PROMPT 24 7 ""
FLAGS "Z"
USE CIM KEY 2
INPUT S0 F_DESC_IMP
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@10" CODTAB
COPY OUTPUT F_IMPIANTO
CHECKTYPE NORMAL
END
NUMBER F_IDCESPITE 10
BEGIN
PROMPT 1 8 "Cespite "
FLAGS "Z"
USE LF_CESPI
INPUT IDCESPITE F_IDCESPITE
DISPLAY "Cespite@10" IDCESPITE
DISPLAY "Desc@50" DESC
DISPLAY "Cat." CODCAT
DISPLAY "Impianto@10" CODIMP
DISPLAY "Stabilimento@30" STABILIM
DISPLAY "Reparto@30" REPARTO
DISPLAY "Data Acq.@10" DTCOMP
DISPLAY "Data Ali.@10" DTALIEN
OUTPUT F_IDCESPITE IDCESPITE
OUTPUT F_DESC_CES DESC
CHECKTYPE NORMAL
END
STRING F_DESC_CES 50
BEGIN
PROMPT 24 8 ""
USE LF_CESPI KEY 2
INPUT DESC F_DESC_CES
DISPLAY "Desc@50" DESC
DISPLAY "Codice@10" IDCESPITE
DISPLAY "Cat." CODCAT
DISPLAY "Impianto@10" CODIMP
DISPLAY "Stabilimento@30" STABILIM
DISPLAY "Reparto@30" REPARTO
DISPLAY "Data Acq.@10" DTCOMP
DISPLAY "Data Ali.@10" DTALIEN
COPY OUTPUT F_IDCESPITE
CHECKTYPE REQUIRED
END
NUMBER F_IDMOV 11
BEGIN
PROMPT 1 10 "Movimento "
FLAGS "Z"
USE LF_MOVCE
JOIN LF_CESPI INTO IDCESPITE==IDCESPITE
INPUT IDMOV F_IDMOV
DISPLAY "Movimento@11" IDMOV
DISPLAY "Rettifica@11" IDRET
DISPLAY "Data mov.@10" DTMOV
DISPLAY "Codice" CODMOV
DISPLAY "Data doc.@10" DTDOC
DISPLAY "Tipo doc." TPDOC
DISPLAY "Num. doc." NDOC
DISPLAY "Descrizione Movimento@50" DESC
DISPLAY "Cespite@10" IDCESPITE
DISPLAY "Descrizione Cespite@50" LF_CESPI->DESC
DISPLAY "Impianto@10" LF_CESPI->CODIMP
OUTPUT F_IDMOV IDMOV
OUTPUT F_IDRET IDRET
OUTPUT F_DESC_MOV DESC
CHECKTYPE REQUIRED
FIELD IDMOV
KEY 1
END
STRING F_DESC_MOV 50
BEGIN
PROMPT 27 10 ""
FLAGS "D"
END
NUMBER F_NUMREG 7
BEGIN
PROMPT 1 12 "Selezione per numero di registrazione di prima nota "
USE LF_MOVCE KEY 3
JOIN LF_CESPI INTO IDCESPITE==IDCESPITE
INPUT NUMREG F_NUMREG
DISPLAY "Registrazione" NUMREG
DISPLAY "Movimento@11" IDMOV
DISPLAY "Data@10" DTMOV
DISPLAY "Descrizione Movimento@50" DESC
DISPLAY "Cespite@10" IDCESPITE
DISPLAY "Descrizione Cespite@50" LF_CESPI->DESC
OUTPUT F_NUMREG NUMREG
OUTPUT F_IDMOV IDMOV
CHECKTYPE NORMAL
END
NUMBER F_IDRET 11
BEGIN
PROMPT 1 11 "Rettifica "
FIELD IDRET
FLAGS "DZ"
KEY 1
END
ENDPAGE
ENDMASK

1017
ce/ce1500b.uml Executable file

File diff suppressed because it is too large Load Diff

View File

@ -8,10 +8,8 @@ int main(int argc,char** argv)
switch(n)
{
case 1:
break;
default:
ce2100(argc, argv); break;
case 1: ce2200(argc, argv); break;
default: ce2100(argc, argv); break;
}
exit(0);
return 0;

View File

@ -1,2 +1,3 @@
int ce2100(int argc, char* argv[]);
int ce2200(int argc, char* argv[]);

View File

@ -148,8 +148,7 @@ void TCalcamm::main_loop()
bool ok = TRUE;
if (dc.bollato_stampato())
ok = error_box("Non è possibile effettuare il calcolo degli ammortamenti:\n"
"il bollato della attività corrente è già stato stampato");
"il bollato dell'attività corrente è già stato stampato");
if (ok)
calcola_ammortamenti();
}

View File

@ -37,34 +37,6 @@ HIDDEN void log(const char* fmt, ...)
*/
}
// Controlla se i campi sono tutti vuoti
// Cerified 99%
HIDDEN bool null_fields(const TRectype& rec, const char* fld0, const char* fld1, const char* fld2 = NULL,
const char* fld3 = NULL, const char* fld4 = NULL, const char* fld5 = NULL,
const char* fld6 = NULL, const char* fld7 = NULL, const char* fld8 = NULL)
{
if (!rec.get_real(fld0).is_zero())
return FALSE;
if (!rec.get_real(fld1).is_zero())
return FALSE;
if (fld2 && *fld2 && !rec.get_real(fld2).is_zero())
return FALSE;
if (fld3 && *fld3 && !rec.get_real(fld3).is_zero())
return FALSE;
if (fld4 && *fld4 && !rec.get_real(fld4).is_zero())
return FALSE;
if (fld5 && *fld5 && !rec.get_real(fld5).is_zero())
return FALSE;
if (fld6 && *fld6 && !rec.get_real(fld6).is_zero())
return FALSE;
if (fld7 && *fld7 && !rec.get_real(fld7).is_zero())
return FALSE;
if (fld8 && *fld8 && !rec.get_real(fld8).is_zero())
return FALSE;
return TRUE;
}
// Azzera i campi fld del record rec
// Cerified 99%
@ -324,7 +296,7 @@ real TCespite::val_amm(int tipo_sit) const
val -= _salpro.get_real(SALCE_VNONAMM);
val += _salpro.get_real(SALCE_RIVGF);
}
else
if (tipo_sit == 2 && !get_bool(CESPI_LEASING))
{
val += _salpro.get_real(SALCE_RIVGC);
}
@ -494,7 +466,7 @@ void TCespite::incr_field(TRectype& dst, const char* fdst, const TRectype& src,
}
// Applica tutte le rettifice al movimento tmv
// Certified 10%
// Certified 50%
void TCespite::applica_rettifiche(TRectype& tmv, TRectype& tmvam, int tipo_sit)
{
TRelation rel(LF_MOVCE);
@ -886,7 +858,7 @@ void TCespite::calc_perc(TRelation& rel, const TRectype& tmv, const TRectype& tm
real per_eff;
const real qnor = calc_quota(mov_val_amm(tmv), penor, resamm, per_eff, &rel);
ammmv.put(AMMMV_QNOR, qnor);
ammmv.put(AMMMV_PNOR, per_eff);
ammmv.put(AMMMV_PENOR, per_eff);
resamm -= qnor + ammmv.get_real(AMMMV_FPRIVATO);
const real peacc = ammmv.get(AMMMV_PEACC);
@ -894,7 +866,7 @@ void TCespite::calc_perc(TRelation& rel, const TRectype& tmv, const TRectype& tm
{
const real qacc = calc_quota(mov_val_amm(tmv), peacc, resamm, per_eff, &rel);
ammmv.put(AMMMV_QACC, qacc);
ammmv.put(AMMMV_PACC, per_eff);
ammmv.put(AMMMV_PEACC, per_eff);
resamm -= qacc;
}
@ -1061,11 +1033,15 @@ void TCespite::amm_mov_ven(TRelation& rel, const TRectype& tmv, const TRectype&
void TCespite::elabora_mov_neg(TRelation& rel, TRectype& tmv, TRectype& tmvam, int tipo_sit, bool is_valid)
{
log("= Elaborazione movimento con segno -");
bool ok = null_fields(tmvam, MOVAM_QNOR, MOVAM_QANT, MOVAM_QACC,
MOVAM_QPERSE, MOVAM_QPPRIVATE, MOVAM_FPRIVATO);
if (ok)
if (_salpro.get_long(SALCE_NUMELE) > 0 && _salpro.get_real(SALCE_CSTO) > ZERO)
{
if (_salpro.get_long(SALCE_NUMELE) > 0 && _salpro.get_real(SALCE_CSTO) > ZERO)
/*
bool null_movce = null_fields(tmv, MOVCE_VNONAMM, MOVCE_PLUSREIN, MOVCE_RIV75,
MOVCE_RIV83, MOVCE_RIV90, MOVCE_RIV91, MOVCE_RIVGF);
*/
bool null_movam = null_fields(tmvam, MOVAM_QNOR, MOVAM_QANT, MOVAM_QACC,
MOVAM_QPERSE, MOVAM_QPPRIVATE, MOVAM_FPRIVATO);
if (null_movam)
{
if (tmv.get_real(MOVCE_CSTO).is_zero())
rip_elem(rel, tmv, tmvam);
@ -1120,7 +1096,7 @@ void TCespite::scansione_movimenti(int tipo_sit, const TDate& data_limite, bool
{
cur.freeze();
// Creo rcord campione per totale movimento + relative rettifiche
// Creo record campione per totale movimento + relative rettifiche
TVariable_rectype tmv(LF_MOVCE);
tmv.add_field(new TVariable_field("VSPMANU"));
@ -1260,9 +1236,9 @@ void TCespite::calc_amm_residui(int tipo_sit, bool is_valid)
if (resamm > ZERO)
{
const real valamm = val_amm(tipo_sit);
const real penor = _ammpro.get_real(AMMMV_PENOR);
const real pnor = _ammpro.get_real(AMMCE_PNOR);
real per_eff;
const real qnor = calc_quota(valamm, penor, resamm, per_eff);
const real qnor = calc_quota(valamm, pnor, resamm, per_eff);
_ammpro.put(AMMCE_QNOR, qnor);
_ammpro.put(AMMCE_PNOR, per_eff);
resamm -= qnor + _ammpro.get_real(AMMCE_FPRIVATO);
@ -1508,7 +1484,7 @@ bool TCespite::calc_amm(int tipo_sit, bool recalc_spe_man, const TDate& data_lim
log("* Inizio calcolo situazione %d cespite %s", tipo_sit, (const char*)idcespite);
#ifdef DBG
if (tipo_sit == 1 && atol(idcespite) == 28L)
if (tipo_sit == 1 && atol(idcespite) == 63L)
tipo_sit = 1; // Put your breakpoint here
#endif

View File

@ -61,6 +61,8 @@ public:
const TRectype& categoria() const;
TTipo_cespite tipo() const;
const TRectype& sal_pro() const { return _salpro; }
const TRectype& amm_pro() const { return _ammpro; }
int read(const char* id);
TCespite();

399
ce/ce2200.cpp Executable file
View File

@ -0,0 +1,399 @@
#include <applicat.h>
#include <automask.h>
#include <modaut.h>
#include <progind.h>
#include <recarray.h>
#include <relation.h>
#include <tabutil.h>
#include "celib.h"
#include "ce2200a.h"
#include "../cg/cglib01.h"
#include "ammce.h"
#include "catdi.h"
#include "cespi.h"
#include "salce.h"
class TOpenesc_mask : public TAutomask
{
TDitta_cespiti& _dc;
bool _has_cg;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
bool check_oldes();
public:
TOpenesc_mask();
};
TOpenesc_mask::TOpenesc_mask()
: TAutomask("ce2200a"), _dc(ditta_cespiti())
{
_has_cg = main_app().has_module(CGAUT);
field(F_NEWES).check_type(_has_cg ? CHECK_REQUIRED : CHECK_SEARCH);
}
// Controlla che siano stati stampati i bollati e chiuse le attivita
bool TOpenesc_mask::check_oldes()
{
TRelation rel("CCB");
TRectype& ccb = rel.curr();
ccb.put("CODTAB", get(F_OLDES));
TCursor cur(&rel, "", 1, &ccb, &ccb);
const long items = cur.items();
cur.freeze();
for (cur = 0L; cur.pos() < items; ++cur)
{
const bool b1 = ccb.get_bool("B1");
const bool b2 = ccb.get_bool("B2");
if (!b1 || b2)
{
TString msg;
msg << "Non è possibile aprire il nuovo esercizio in quanto ";
if (!b1)
msg << "non è stato stampato il bollato";
else
msg << "è già stata effettuata la chiusura";
const TString8 codatt = ccb.get("CODTAB").mid(4);
msg << "\ndell'attività " << cache().get("%CAT", codatt, "S0");
return error_box(msg);
}
}
return TRUE;
}
bool TOpenesc_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_OLDES:
if (e == fe_init)
{
TDate ies, fes;
const int oes = _dc.esercizio_corrente(ies, fes);
o.set(oes); set(F_OLDINIZIO, ies); set(F_OLDFINE, fes);
}
if (e == fe_init || e == fe_modify)
{
TEsercizi_contabili esc;
const int nes = get_int(F_OLDES)+1;
set(F_NEWES, nes, TRUE);
if (esc.exist(nes))
{
set(F_NEWINIZIO, esc[nes].inizio());
set(F_NEWFINE, esc[nes].fine());
disable(-2);
}
else
{
TDate inizio = get_date(F_OLDFINE); ++inizio;
TDate fine = get_date(F_OLDFINE); fine.addyear(1);
set(F_NEWINIZIO, inizio);
set(F_NEWFINE, fine);
enable(-2);
}
}
if (e == fe_modify || e == fe_close)
return check_oldes();
break;
case F_NEWES:
if (e == fe_close)
{
if (o.empty())
return error_box("È necessario specificare il codice del nuovo esercizio");
}
break;
default:
break;
}
return TRUE;
}
class TOpenesc : public TSkeleton_application
{
protected:
virtual bool create();
virtual void main_loop();
void incr_riv(TRectype& rec, const char* riv, const char* anni) const;
bool is_leap(int year) const;
real calc_coeff(const TDate& ies, const TDate& fes) const;
void incr_zero(TRectype& rec, const char* val, const char* valp) const;
public:
void crea_esercizio(int oldes, int newes, const TDate& ies, const TDate& fes) const;
void crea_attivita(int oldes, int newes) const;
void crea_registro(int oldes, int newes) const;
void crea_categorie(int oldes, int newes) const;
void crea_saldi(int oldes, int newes) const;
void crea_ammortamenti(int oldes, int newes) const;
void test_alien(const TRectype& salce, const TDate& fines) const;
};
bool TOpenesc::create()
{
open_files(LF_TABCOM, LF_TAB, LF_CESPI, LF_AMMCE, LF_SALCE, 0);
return TSkeleton_application::create();
}
bool TOpenesc::is_leap(int year) const
{
TDate d(28,2,year);
++d;
return d.day() == 29;
}
real TOpenesc::calc_coeff(const TDate& ies, const TDate& fes) const
{
const real tot_es = fes - ies + 1;
real max_es = 365;
const int im = ies.month();
const int iy = ies.year();
const int fm = fes.month();
const int fy = fes.year();
if ((im < 3 && (fm >= 3 || fy > iy) && is_leap(iy)) ||
(fm >= 3 && (im < 3 || iy < fy) && is_leap(fy)))
max_es += 1.0;
real coeff = tot_es / max_es;
coeff.round(9);
return coeff;
}
void TOpenesc::crea_esercizio(int oldes, int newes, const TDate& ies, const TDate& fes) const
{
// Crea l'esercizio contabile se necessario
if (!has_module(CGAUT))
{
TTable esc("ESC");
esc.put("CODTAB", newes);
if (esc.read() != NOERR)
{
esc.zero();
esc.put("CODTAB", newes);
esc.put("D0", ies);
esc.put("D1", fes);
esc.write();
}
}
// Crea l'esercizio cespiti se necessario
TTable cce("CCE");
TString8 key; key.format("%04d", oldes);
const TRectype& oldrec = cache().get("CCE", key);
cce.put("CODTAB", newes);
if (cce.read() != NOERR)
{
cce.zero();
cce.put("CODTAB", newes);
cce.put("S5", calc_coeff(ies, fes)); // Calcola coefficiente durata esercizio
cce.put("S6", oldrec.get("S6")); // Copia tipo arrotondamento
cce.put("I0", oldrec.get("I0")); // Copia tipo contabilità
cce.put("I1", oldrec.get("I1")); // Copia tipo riproporzionamento
cce.put("I2", oldrec.get("I2")); // Copia assoggettamento art.14 C.2 legge 449/97
cce.put("I3", fes - ies + 1); // Calcola durata esercizio
cce.put("B0", oldrec.get("B0")); // Copia ditta relativa a professionista
cce.put("B3", oldrec.get("B3")); // Copia ammortamento parti vendute
if (cce.write() != NOERR)
error_box("Errore di creazione dell'esercizio cespiti %d", newes);
}
}
void TOpenesc::crea_attivita(int oldes, int newes) const
{
TRelation rel("CCB");
TRectype& ccb = rel.curr();
ccb.put("CODTAB", oldes);
TCursor cur(&rel, "", 1, &ccb, &ccb);
const long items = cur.items();
cur.freeze();
for (cur = 0L; cur.pos() < items; ++cur)
{
ccb.put("B2", TRUE); // Setta flag di chiusa
rel.rewrite();
// Crea nuova attività
TString16 codtab = ccb.get("CODTAB");
TString8 str; str.format("%04d", newes);
codtab.overwrite(str);
const bool leasing = ccb.get_bool("B0");
ccb.zero();
ccb.put("CODTAB", codtab);
ccb.put("B0", leasing);
rel.write();
}
}
void TOpenesc::crea_registro(int oldes, int newes) const
{
TRelation rel("REG");
TRectype& reg = rel.curr();
reg.put("CODTAB", oldes);
TCursor cur(&rel, "I0=6", 1, &reg, &reg);
const long items = cur.items(); // Puo' succedere di averne più d'uno
cur.freeze();
for (cur = 0; cur.pos() < items; ++cur)
{
TString16 codtab;
codtab.format("%04d", newes);
codtab << reg.get("CODTAB").mid(4);
reg.put("CODTAB", codtab);
reg.zero("I1"); // Pagine stampate
rel.write();
}
}
void TOpenesc::crea_categorie(int oldes, int newes) const
{
TRelation rel(LF_CATDI);
TRectype& cat = rel.curr();
cat.put(CATDI_CODES, oldes);
TCursor cur(&rel, "", 1, &cat, &cat);
const long items = cur.items();
cur.freeze();
for (cur = 0L; cur.pos() < items; ++cur)
{
cat.put(CATDI_CODES, newes);
cat.zero(CATDI_DATE);
cat.zero(CATDI_TPOP);
rel.write();
}
}
void TOpenesc::incr_riv(TRectype& rec, const char* riv, const char* anni) const
{
if (rec.get_real(riv) != ZERO)
{
const int new_anni = rec.get_int(anni) + 1;
rec.put(anni, new_anni);
}
}
void TOpenesc::test_alien(const TRectype& salce, const TDate& fines) const
{
if (null_fields(salce, SALCE_NUMELE, SALCE_CSTO, SALCE_RIV75, SALCE_RIV83, SALCE_RIV90, SALCE_RIV91, SALCE_RIVGF))
{
const TString16 idcespite = salce.get(SALCE_IDCESPITE);
TLocalisamfile cespiti(LF_CESPI);
cespiti.put(CESPI_IDCESPITE, idcespite);
if (cespiti.read() == NOERR)
{
const TDate dtcomp = cespiti.get(CESPI_DTCOMP);
if (dtcomp <= fines)
{
cespiti.put(CESPI_DTALIEN, fines);
cespiti.rewrite();
}
}
}
}
void TOpenesc::crea_saldi(int oldes, int newes) const
{
TRelation rel(LF_SALCE);
rel.add(LF_AMMCE, "CODES==CODES|IDCESPITE==IDCESPITE|TPSALDO==2|TPAMM==1");
TRectype& rec = rel.curr();
TString str;
str << '(' << SALCE_CODES << "==" << oldes << ")&&(" << SALCE_TPSALDO << "==2)";
TCursor cur(&rel, str);
const long items = cur.items();
cur.freeze();
// Calcola data fine esercizio per eventuali alienazioni
TEsercizi_contabili esc;
const TDate fines = esc[oldes].fine();
TProgind pi(items, "Apertura saldi", FALSE, TRUE);
for (cur = 0; cur.pos() < items; ++cur)
{
pi.addstatus(1);
rec.put(SALCE_CODES, newes); // Aggiorna anno di esercizio
rec.put(SALCE_TPSALDO, 1); // Aggiorna tipo saldo ad "iniziale"
incr_riv(rec, SALCE_RIV90, SALCE_ANNIPOST90); // Incrementa anni post 90
incr_riv(rec, SALCE_RIV91, SALCE_ANNIPOST91); // Incrementa anni post 91
rec.zero(SALCE_VSPMANU); // Azzera spese manutenzione
rec.zero(SALCE_DTSTBOLL); // Azzera data stampa bollato
// Incrementa gli anni di ammortamento
const TRectype& ammce = rel.curr(LF_AMMCE);
if (!null_fields(ammce, AMMCE_QNOR, AMMCE_QACC, AMMCE_QANT))
{
const int anniamm = rec.get_int(SALCE_ANNIAMM);
rec.put(SALCE_ANNIAMM, anniamm+1);
}
// Controlla se cespite alienato
test_alien(rec, fines);
const int err = rel.write();
if (err != NOERR) // Should never happen!
rel.rewrite();
}
}
void TOpenesc::incr_zero(TRectype& rec, const char* val, const char* valp) const
{
real num = rec.get(val);
num += rec.get_real(valp);
rec.put(val, num);
rec.zero(valp);
}
void TOpenesc::crea_ammortamenti(int oldes, int newes) const
{
TRelation rel(LF_AMMCE);
TRectype& rec = rel.curr();
TString str;
str << '(' << SALCE_CODES << "==" << oldes << ")&&(" << SALCE_TPSALDO << "==2)";
TCursor cur(&rel, str);
const long items = cur.items();
cur.freeze();
TProgind pi(items, "Creazione ammortamenti", FALSE, TRUE);
for (cur = 0; cur.pos() < items; ++cur)
{
pi.addstatus(1);
rec.put(AMMCE_CODES, newes); // Aggiorna anno di esercizio
rec.put(AMMCE_TPSALDO, 1); // Aggiorna tipo saldo ad "iniziale"
rec.zero(AMMCE_CSCEN);
rec.zero(AMMCE_PNOR);
incr_zero(rec, AMMCE_QNOR, AMMCE_QNORP);
incr_zero(rec, AMMCE_QACC, AMMCE_QACCP);
incr_zero(rec, AMMCE_QANT, AMMCE_QANTP);
incr_zero(rec, AMMCE_QPERSE, AMMCE_QPERSEP);
incr_zero(rec, AMMCE_FPRIVATO, AMMCE_FPRIVATOP);
incr_zero(rec, AMMCE_QPPRIVATE, AMMCE_QPPRIVATEP);
const int err = rel.write();
if (err != NOERR) // Should never happen!
rel.rewrite();
}
}
void TOpenesc::main_loop()
{
TOpenesc_mask m;
if (m.run() == K_ENTER)
{
const int oldes = m.get_int(F_OLDES);
const int newes = m.get_int(F_NEWES);
const TDate ies = m.get(F_NEWINIZIO);
const TDate fes = m.get(F_NEWFINE);
crea_esercizio(oldes, newes, ies, fes);
crea_attivita(oldes, newes);
crea_registro(oldes, newes);
crea_categorie(oldes, newes);
crea_saldi(oldes, newes);
crea_ammortamenti(oldes, newes);
ditta_cespiti().set_attivita(newes, 0, NULL);
}
}
int ce2200(int argc, char* argv[])
{
TOpenesc a;
a.run(argc, argv, "Cambio esercizio");
return 0;
}

8
ce/ce2200a.h Executable file
View File

@ -0,0 +1,8 @@
#define F_DITTA 101
#define F_RAGSOC 102
#define F_OLDES 103
#define F_OLDINIZIO 104
#define F_OLDFINE 105
#define F_NEWES 106
#define F_NEWINIZIO 107
#define F_NEWFINE 108

99
ce/ce2200a.uml Executable file
View File

@ -0,0 +1,99 @@
#include "ce2200a.h"
PAGE "Apertura esercizio" -1 -1 62 7
GROUPBOX DLG_NULL 60 3
BEGIN
PROMPT 1 0 "@bDitta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 2 1 ""
FLAGS "DFG"
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50
BEGIN
PROMPT 9 1 ""
FLAGS "D"
END
NUMBER F_OLDES 4
BEGIN
PROMPT 2 3 "Esercizio corrente "
USE CCE
JOIN ESC ALIAS 2 INTO CODTAB==CODTAB
INPUT CODTAB F_OLDES
DISPLAY "Codice" CODTAB
DISPLAY "Data inizio esercizio" 2@->D0
DISPLAY "Data fine esercizio" 2@->D1
OUTPUT F_OLDES CODTAB
OUTPUT F_OLDINIZIO 2@->D0
OUTPUT F_OLDFINE 2@->D1
CHECKTYPE REQUIRED
WARNING "Inserire un esercizio valido"
END
DATE F_OLDINIZIO
BEGIN
PROMPT 35 3 ""
FLAGS "D"
END
DATE F_OLDFINE
BEGIN
PROMPT 49 3 ""
FLAGS "D"
END
NUMBER F_NEWES 4
BEGIN
PROMPT 2 4 "Nuovo esercizio "
USE ESC
INPUT CODTAB F_OLDES
DISPLAY "Codice" CODTAB
DISPLAY "Data inizio esercizio" D0
DISPLAY "Data fine esercizio" D1
OUTPUT F_NEWES CODTAB
OUTPUT F_NEWINIZIO D0
OUTPUT F_NEWFINE D1
CHECKTYPE REQUIRED
GROUP 2
END
DATE F_NEWINIZIO
BEGIN
PROMPT 35 4 ""
CHECKTYPE REQUIRED
GROUP 2
VALIDATE DATE_CMP_FUNC > F_OLDFINE
WARNING "La data di inizio esercizio deve essere successiva alla fine dell'esercizio precedente"
END
DATE F_NEWFINE
BEGIN
PROMPT 49 4 ""
CHECKTYPE REQUIRED
GROUP 2
VALIDATE DATE_CMP_FUNC > F_NEWINIZIO
WARNING "La data di fine esercizio deve essere successiva a quella di inizio"
END
BUTTON DLG_OK 12 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 12 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -60,14 +60,17 @@ void TDitta_cespiti::set_attivita(int esercizio, int gruppo, const char* specie)
}
else
_esercizio = esercizio;
_gruppo.format("%02d", gruppo);
_specie.format("%-4s", (const char*)specie);
TConfig dit(CONFIG_DITTA, "ce");
dit.set("CODESCORR", _esercizio);
dit.set("GRUPPOCORR", _gruppo);
TString16 str; str << '"' << _specie << '"';
dit.set("SPECIECORR", str);
if (gruppo > 0)
_gruppo.format("%02d", gruppo);
if (specie && *specie)
_specie.format("%-4s", (const char*)specie);
TConfig dit(CONFIG_DITTA, "ce");
dit.set("CODESCORR", _esercizio);
dit.set("GRUPPOCORR", _gruppo);
TString16 str; str << '"' << _specie << '"';
dit.set("SPECIECORR", str);
_data_primi_ricavi = dit.get("CADTR");
_anno_tuir = dit.get_int("CATSU");
@ -232,7 +235,7 @@ static bool cac_filter_func(const TRelation* rel)
bool TDitta_cespiti::on_category_event(TOperable_field& o, TField_event e, long jolly)
{
if (e != fe_init && e != fe_button && e != fe_close)
if (e != fe_init && e != fe_modify && e != fe_button && e != fe_close)
return TRUE;
TEdit_field& fld = (TEdit_field&)o;
@ -290,17 +293,21 @@ bool TDitta_cespiti::on_category_event(TOperable_field& o, TField_event e, long
fout.set(row.get(1));
}
} else
if (e == fe_init && by_code && !o.empty())
if ((e == fe_init || e == fe_modify) && by_code)
{
const int cat = atoi(fld.get());
const TRectype& cac = categoria(gruppo, specie, cat);
if (!cac.empty())
TString desc;
if (cat > 0)
{
TMask& m = fld.mask();
const int pos = m.id2pos(fld.dlg());
TMask_field& fout = m.fld(pos + (by_code ? +1 : -1));
fout.set(cac.get("S0"));
const TRectype& cac = categoria(gruppo, specie, cat);
if (!cac.empty())
desc = cac.get("S0");
}
TMask& m = fld.mask();
const int pos = m.id2pos(fld.dlg());
TMask_field& fout = m.fld(pos + (by_code ? +1 : -1));
fout.set(desc);
fout.on_hit();
} else
if (e == fe_close && by_code && !o.empty())
{
@ -356,4 +363,35 @@ TForm_cespiti::TForm_cespiti(const char* name) : TForm(name)
{
}
///////////////////////////////////////////////////////////
// Utility varie
///////////////////////////////////////////////////////////
// Controlla se i campi sono tutti vuoti
// Cerified 99%
bool null_fields(const TRectype& rec, const char* fld0, const char* fld1, const char* fld2,
const char* fld3, const char* fld4, const char* fld5,
const char* fld6, const char* fld7, const char* fld8)
{
if (!rec.get_real(fld0).is_zero())
return FALSE;
if (!rec.get_real(fld1).is_zero())
return FALSE;
if (fld2 && *fld2 && !rec.get_real(fld2).is_zero())
return FALSE;
if (fld3 && *fld3 && !rec.get_real(fld3).is_zero())
return FALSE;
if (fld4 && *fld4 && !rec.get_real(fld4).is_zero())
return FALSE;
if (fld5 && *fld5 && !rec.get_real(fld5).is_zero())
return FALSE;
if (fld6 && *fld6 && !rec.get_real(fld6).is_zero())
return FALSE;
if (fld7 && *fld7 && !rec.get_real(fld7).is_zero())
return FALSE;
if (fld8 && *fld8 && !rec.get_real(fld8).is_zero())
return FALSE;
return TRUE;
}

View File

@ -42,8 +42,8 @@ public:
bool professionista() const;
bool esercizio_costituzione() const;
real coefficiente_durata_esercizio() const;
bool bollato_stampato() const;
int anno_tuir() const { return _anno_tuir; }
bool bollato_stampato() const;
void init_mask(TMask& m);
void arrotonda(real &n) const;
@ -64,4 +64,9 @@ public:
TDitta_cespiti& ditta_cespiti();
// Utility
bool null_fields(const TRectype& rec, const char* fld0, const char* fld1, const char* fld2 = NULL,
const char* fld3 = NULL, const char* fld4 = NULL, const char* fld5 = NULL,
const char* fld6 = NULL, const char* fld7 = NULL, const char* fld8 = NULL);
#endif

View File

@ -80,7 +80,7 @@ Picture = <ce00.bmp>
Module = 11
Flags = ""
Item_01 = "Parametri collegamento contabilità", "ce0 -3 c", ""
Item_02 = "Colleg. contabilitá cat/ces", "", ""
Item_02 = "Colleg. contabilità cat/ces", "", ""
Item_03 = "St. contr. param. colleg. contab.", "", ""
Item_04 = "St. contr. colleg. contab. cat/ces", "", ""
Item_05 = "Trasferimento movimenti provvisori", "", ""
@ -91,12 +91,12 @@ Caption = "Operazioni giornaliere e fine esercizio"
Picture = <ce00.bmp>
Module = 11
Flags = ""
Item_01 = "Anagrafica cespiti", "", ""
Item_02 = "Movimenti", "", ""
Item_01 = "Anagrafica cespiti", "ce0 -4", "F"
Item_02 = "Movimenti", "ce1 -4", "F"
Item_03 = "Scelte ammortamento per categoria", "", ""
Item_04 = "Scelta ammortamento per cespite", "", ""
Item_05 = "Forzatura ammortamento su cespiti", "", ""
Item_06 = "Forzatura ammortamento su movimenti", "", ""
Item_05 = "Forzatura ammortamento su cespiti", "ce1 -0", "F"
Item_06 = "Forzatura ammortamento su movimenti", "ce1 -1", "F"
Item_07 = "Esecuzione calcolo ammortamenti", "ce2 -0", "F"
[PRASSICE_010]
@ -124,7 +124,7 @@ Caption = "Servizi"
Picture = <ce00.bmp>
Module = 11
Flags = ""
Item_01 = "Cambio esercizio", "", ""
Item_01 = "Cambio esercizio", "ce2 -1", ""
Item_02 = "Riattribuzione percentuali", "", ""

View File

@ -56,6 +56,6 @@ BEGIN
FIELD S1
USE LOC //tabella localizzazioni ditte
INPUT CODTAB F_COD_LOC_IMP
DISPLAY " Codice localizzazione @50" CODTAB
DISPLAY "Codice localizzazione@50" CODTAB
OUTPUT F_COD_LOC_IMP CODTAB
END

View File

@ -28,7 +28,7 @@ BEGIN
USE LOC //é la tabella localizzazioni ditte
FIELD CODTAB
INPUT CODTAB F_LOCALIZE
DISPLAY " Localizzazione@41" CODTAB
DISPLAY "Localizzazione@41" CODTAB
OUTPUT F_LOCALIZE CODTAB
CHECKTYPE REQUIRED
END

View File

@ -1,3 +1,3 @@
142
0
$movce|0|0|284|0|Movimenti cespiti|||
$movce|0|0|291|0|Movimenti cespiti|||

View File

@ -1,5 +1,5 @@
142
22
23
IDCESPITE|1|10|0|Codice cespite (ZZZZZZZZZZ)
IDMOV|1|11|0|Numero movimento (ZZZZZZZZZZZ)
DTMOV|5|8|0|Data movimento cespite
@ -22,6 +22,8 @@ RIV91|4|18|3|Rivalutazione Legge 413/91
RIVGF|4|18|3|Rivalutazione generica fiscale
RIVGC|4|18|3|Rivalutazione generica civilistica
STAMPATO|8|1|0|Stampato su almeno un bollato in esercizi passati (STBOLLATO)
2
NUMREG|3|7|0|Numero di registrazione corrispondente di prima nota
3
IDMOV+IDRET|
IDCESPITE+IDMOV|
NUMREG+IDMOV|

View File

@ -116,25 +116,19 @@ BEGIN
HELP "Chiave di ricerca alternativa"
END
LIST F_STATOPAIV 2 21
STRING F_STATOPAIV 2
BEGIN
PROMPT 42 4 "Stato CEE "
FIELD STATOPAIV
KEY 5
// KEY 5
HELP "Codice ISO dello stato"
ITEM " |Italia o extra CEE"
ITEM "BE|Belgio"
ITEM "DE|Germania"
ITEM "DK|Danimarca"
ITEM "EL|Grecia"
ITEM "ES|Spagna"
ITEM "FR|Francia"
ITEM "GB|Gran Bretagna"
ITEM "IE|Irlanda"
ITEM "IT|Italia"
ITEM "LU|Lussemburgo"
ITEM "NL|Olanda"
ITEM "PT|Portogallo"
FLAGS "U"
USE %SCE
INPUT CODTAB F_STATOPAIV
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_STATOPAIV CODTAB
CHECKTYPE NORMAL
END
STRING F_COFI 16

View File

@ -362,22 +362,16 @@ BEGIN
ADD RUN cg0 -1 F
END
LIST F_STATOPAIV 2 18
STRING F_STATOPAIV 2
BEGIN
PROMPT 57 11 ""
ITEM " |Italia o extra CEE"
ITEM "BE|Belgio"
ITEM "DE|Germania"
ITEM "DK|Danimarca"
ITEM "EL|Grecia"
ITEM "ES|Spagna"
ITEM "FR|Francia"
ITEM "GB|Gran Bretagna"
ITEM "IE|Irlanda"
ITEM "IT|Italia"
ITEM "LU|Lussemburgo"
ITEM "NL|Olanda"
ITEM "PT|Portogallo"
FLAGS "U"
USE %SCE
INPUT CODTAB F_STATOPAIV
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_STATOPAIV CODTAB
CHECKTYPE NORMAL
GROUP 1
END

View File

@ -1593,7 +1593,7 @@ bool TMastrini_application::preprocess_page(int file, int counter)
int anno = date2esc(_datareg_stampa);
if (anno != _annoes)
if (_numcarat == 1)
set_row (_rw, "@131g*");
set_row (_rw, "@132g*");
else
set_row (_rw, "@197g*");
@ -2052,7 +2052,14 @@ bool TMastrini_application::preprocess_page(int file, int counter)
}
rmov.readat(rec);
}
}
else
{
ricerca_regiva();
_protiva = atol(_mov->curr().get(MOV_PROTIVA));
if (_protiva != 0)
set_row (_rw,"@127g%5d", _protiva);
}
_rw = 1;
return TRUE;
@ -2701,7 +2708,7 @@ void TMastrini_application::ricerca_dati_ditta()
void TMastrini_application::crea_intestazione()
{
TString sep(132),sep1(198);
TString sep(133),sep1(198);
sep = "";
reset_header();
@ -2783,16 +2790,16 @@ void TMastrini_application::crea_intestazione()
{
sep.fill('-'); //Stampa 132 - (sep(132))
set_header (6, (const char *) sep);
set_header (7,"%s@19g%s@117g%s@131g%s",
set_header (7,"%s@19g%s@117g%s@132g%s",
trans("Operazione"), trans("Documento"), trans("Contro"), trans("A"));
if (_stampa_mov_prov)
set_header(7,"@130gM");
set_header (8, trans("Data"));
if (_stampanum < 3)
set_header (8,"@11g%s", trans("Numero"));
set_header (8,"@19g%s@30g%s@38g%s@61g%s@95g%s@111g%s@117g%s@131g%s",
set_header (8,"@19g%s@30g%s@38g%s@61g%s@95g%s@111g%s@117g%s@127g%s@132g%s",
trans("Data"), trans("Numero"), trans("Cod.Causale"), trans("Descrizione"),
trans("Dare"), trans("Avere"), trans("Partita"), trans("C"));
trans("Dare"), trans("Avere"), trans("Partita"), trans("Prot."), trans("C"));
if (_stampa_mov_prov)
set_header(8,"@130g%s", trans("P"));
sep.fill('-');

View File

@ -1233,7 +1233,7 @@ void TContabilizzazione_effetti_app::contabilize_bill(const char tipo, const lon
if (_caus != NULL)
delete _caus;
const char* cc = distinta.tipocf() == 'C' ? _cod_caus : _cod_caus_pag;
const char* cc = distinta.tipocf() == 'F' ? _cod_caus_pag : _cod_caus;
_caus = new TCausale(cc, _data_op.year());
if (!_caus->ok())
{
@ -1273,10 +1273,10 @@ void TContabilizzazione_effetti_app::contabilize_bill(const char tipo, const lon
}
bool dettaglio_rate = FALSE;
if (_cliente.tipo() == 'C')
dettaglio_rate = _dett_rate_att;
else
if (distinta.tipocf() == 'F')
dettaglio_rate = _dett_rate_pas;
else
dettaglio_rate = _dett_rate_att;
const int items = distinta.items(); // Perche' sul file effetti il numero riga distinta e' un long ??

2
gv/batbsce.h Executable file
View File

@ -0,0 +1,2 @@
#define F_CODICE 101
#define F_DESCR 102

42
in/basticc.uml Executable file
View File

@ -0,0 +1,42 @@
#include "../ba/ba3200.h"
PAGE "Stampa Condizioni di consegna" -1 -1 50 8
STRING F_INIZIO1 3
BEGIN
PROMPT 4 1 "Da codice "
USE %ICC
INPUT CODTAB F_INIZIO1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_INIZIO1 CODTAB
FIELD CODTAB
GROUP 1
END
STRING F_FINE1 3
BEGIN
PROMPT 4 3 "A codice "
COPY USE F_INIZIO1
INPUT CODTAB F_FINE1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_FINE1 CODTAB
FIELD CODTAB
GROUP 2
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

42
in/bastimt.uml Executable file
View File

@ -0,0 +1,42 @@
#include "../ba/ba3200.h"
PAGE "Stampa Modalita' di trasporto" -1 -1 50 8
NUMBER F_INIZIO1 1
BEGIN
PROMPT 4 1 "Da codice "
USE %IMT
INPUT CODTAB F_INIZIO1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_INIZIO1 CODTAB
FIELD CODTAB
FLAGS "U"
GROUP 1
END
NUMBER F_FINE1 1
BEGIN
PROMPT 4 3 "A codice "
COPY USE F_INIZIO1
INPUT CODTAB F_FINE1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_FINE1 CODTAB
FIELD CODTAB
GROUP 2
FLAGS "U"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

40
in/bastint.uml Executable file
View File

@ -0,0 +1,40 @@
#include "../ba/ba3200.h"
PAGE "Stampa Natura Transazione" -1 -1 50 8
NUMBER F_INIZIO1 1
BEGIN
PROMPT 4 1 "Da codice "
USE %INT
INPUT CODTAB F_INIZIO1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_INIZIO1 CODTAB
FIELD CODTAB
GROUP 1
END
NUMBER F_FINE1 1
BEGIN
PROMPT 4 3 "A codice "
COPY USE F_INIZIO1
INPUT CODTAB F_FINE1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_FINE1 CODTAB
FIELD CODTAB
GROUP 2
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

2
in/batbicc.h Executable file
View File

@ -0,0 +1,2 @@
#define F_CODICE 101
#define F_DESCR 102

9
in/batbicc.rpt Executable file
View File

@ -0,0 +1,9 @@
[Headers]
80
Tabella Condizioni di Consegna
1|@3g%s|Codice
1|@10g%s|Denominazione
[Rows]
1|CODTAB|@3g@3,ls
1|S0|@10g@50,ls

45
in/batbicc.uml Executable file
View File

@ -0,0 +1,45 @@
#include "batbicc.h"
TOOLBAR "Toolbar" 0 19 0 3
#include <toolbar.h>
ENDPAGE
PAGE "Condizioni di consegna" -1 -1 78 18
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 1 1 "@bCondizioni di consegna"
END
STRING F_CODICE 3
BEGIN
PROMPT 2 3 "Codice "
FLAGS "U"
USE %ICC
INPUT CODTAB F_CODICE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODICE CODTAB
CHECKTYPE REQUIRED
FIELD CODTAB
KEY 1
END
STRING F_DESCR 50
BEGIN
PROMPT 2 5 "Descrizione "
USE %ICC KEY 2
INPUT S0 F_DESCR
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@8" CODTAB
COPY OUTPUT F_CODICE
CHECKTYPE REQUIRED
FIELD S0
KEY 2
END
ENDPAGE
ENDMASK

2
in/batbimt.h Executable file
View File

@ -0,0 +1,2 @@
#define F_CODICE 101
#define F_DESCR 102

9
in/batbimt.rpt Executable file
View File

@ -0,0 +1,9 @@
[Headers]
80
Tabella Modalita' di Trasporto
1|@3g%s|Codice
1|@10g%s|Denominazione
[Rows]
1|CODTAB|@3g@1,ls
1|S0|@10g@50,ls

44
in/batbimt.uml Executable file
View File

@ -0,0 +1,44 @@
#include "batbimt.h"
TOOLBAR "Toolbar" 0 19 0 3
#include <toolbar.h>
ENDPAGE
PAGE "Modalita' di trasporto" -1 -1 78 18
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 1 1 "@bModalita' di trasporto"
END
NUMBER F_CODICE 1
BEGIN
PROMPT 2 3 "Codice "
USE %IMT
INPUT CODTAB F_CODICE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODICE CODTAB
CHECKTYPE REQUIRED
FIELD CODTAB
KEY 1
END
STRING F_DESCR 50
BEGIN
PROMPT 2 5 "Descrizione "
USE %IMT KEY 2
INPUT S0 F_DESCR
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@8" CODTAB
COPY OUTPUT F_CODICE
CHECKTYPE REQUIRED
FIELD S0
KEY 2
END
ENDPAGE
ENDMASK

11
in/batbint.frm Executable file
View File

@ -0,0 +1,11 @@
[Headers]
80
Tabella Natura Transazione
1|@3g%s|Codice
1|@10g%s|Denominazione
1|@62g%s|Op.Triangolari
[Rows]
1|CODTAB|@3g@4,ls
1|S0|@10g@50,ls
1|S7|@62g@1,ls

3
in/batbint.h Executable file
View File

@ -0,0 +1,3 @@
#define F_CODICE 101
#define F_DESCR 102
#define F_TRIANG 103

11
in/batbint.rpt Executable file
View File

@ -0,0 +1,11 @@
[Headers]
80
Tabella Natura Transazione
1|@3g%s|Codice
1|@10g%s|Denominazione
1|@62g%s|Op.Triangolari
[Rows]
1|CODTAB|@3g@4,ls
1|S0|@10g@50,ls
1|S7|@62g@1,ls

51
in/batbint.uml Executable file
View File

@ -0,0 +1,51 @@
#include "batbint.h"
TOOLBAR "Toolbar" 0 19 0 3
#include <toolbar.h>
ENDPAGE
PAGE "Natura Transazione" -1 -1 78 18
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 1 1 "@bNatura Transazione"
END
NUMBER F_CODICE 1
BEGIN
PROMPT 2 3 "Codice "
USE %INT
INPUT CODTAB F_CODICE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@70" S0
OUTPUT F_CODICE CODTAB
CHECKTYPE REQUIRED
FIELD CODTAB
KEY 1
END
STRING F_DESCR 70 50
BEGIN
PROMPT 2 5 "Descrizione "
USE %INT KEY 2
INPUT S0 F_DESCR
DISPLAY "Descrizione@70" S0
DISPLAY "Codice@8" CODTAB
COPY OUTPUT F_CODICE
CHECKTYPE REQUIRED
FIELD S0
KEY 2
END
STRING F_TRIANG 1
BEGIN
PROMPT 2 8 "Operazioni triangolari "
FLAGS "U"
FILED S7
END
ENDPAGE
ENDMASK

View File

@ -32,6 +32,7 @@ class TStampaIntra_form : public TForm
protected:
void print_page(const pagetype p);
const bool good() const;
virtual bool validate(TForm_item& fld, TToken_string& val);
public:
void print();
@ -39,6 +40,23 @@ public:
virtual ~TStampaIntra_form ();
};
bool TStampaIntra_form::validate(TForm_item& fld, TToken_string& val)
{
const TString code(val.get(0)); // prende il primo parametro, il codice del messaggio
if (code== "_IMP")
{
real num(fld.get());
const int ndec = TCurrency::get_firm_dec() > 0 ? 0 : -3;
num.round(ndec);
fld.set(val);
return TRUE;
}
return TForm::validate(fld, val);
}
TStampaIntra_form::TStampaIntra_form(const char* name, char t, char f, int p, int a) : TForm(name)
{
_tipo << t;
@ -285,7 +303,7 @@ TStampaIntra_mask::TStampaIntra_mask()
{ }
void TStampaIntra_mask::print()
{
{
TStampaIntra_form form(tipo() == 'A' ? "in0100a" : "in0100b", tipo(), frequenza(), periodo(), get_int(R_ANNO));
form.print();
}

View File

@ -40,7 +40,9 @@ TIntra_context::TIntra_context()
}
class TRecord_intra : public TString
{
{
int _ndec;
protected:
virtual void print_on(ostream& o) const;
@ -124,7 +126,7 @@ void TRecord_intra::put(char chr, int pos)
void TRecord_intra::reset(const TIntra_context& ic)
{
spaces();
put("INTRA", 1, 5);
put("EUROA", 1, 5);
const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm());
TString16 cod;
cod << ditta.get_char(NDT_TIPOA) << '|';
@ -173,9 +175,9 @@ void TRecord_intra::genera_testata(const TIntra_context& ic)
put("", 48, 11, "Z");
put(ic._righe_riep, 59, 5);
put(ic._totale_riep, 64, 13, -3);
put(ic._totale_riep, 64, 13, _ndec);
put(ic._righe_rett, 77, 5);
put(ic._totale_rett, 82, 13, -3);
put(ic._totale_rett, 82, 13, _ndec);
}
// Scrive un intero record del file riepiloghi/rettifiche
@ -191,7 +193,7 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
put('1', 23);
put(rec.get("STATO"), 29, 2);
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, -3);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 56, 13);
put(rec.get_char("NATURA"), 69);
put(rec.get("NOMENCL"), 70, 8, "RZ");
@ -199,7 +201,7 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
{
put(rec.get_real("MASSAKG"), 78, 10, 0);
put(rec.get_real("MASSAUMS"), 88, 10, 0);
put(rec.get_real("VALSTAT"), 98, 13, -3);
put(rec.get_real("VALSTAT"), 98, 13, _ndec);
put(rec.get_char("CONSEGNA"), 111);
put(rec.get_char("TRASPORTO"), 112);
put(rec.get("PAESE"), 113, 2);
@ -224,12 +226,12 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
put(rec.get("STATO"), 34, 2);
put(rec.get("PIVA"), 36, 12);
put(rec.get("SEGNORETT"), 48, 1);
put(rec.get_real("AMMLIRE"), 49, 13, -3);
put(rec.get_real("AMMLIRE"), 49, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 62, 13);
put(rec.get_char("NATURA"), 75);
put(rec.get("NOMENCL"), 76, 8, "RZ");
if (ic._freq == 'M')
put(rec.get_real("VALSTAT"), 84, 13, -3);
put(rec.get_real("VALSTAT"), 84, 13, _ndec);
else
put("", 84, 13);
}
@ -238,14 +240,14 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
put('1', 23);
put(rec.get("STATO"), 29, 2);
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, -3);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
put(rec.get_char("NATURA"), 56);
put(rec.get("NOMENCL"), 57, 8, "RZ");
if (ic._freq == 'M')
{
put(rec.get_real("MASSAKG"), 65, 10);
put(rec.get_real("MASSAUMS"), 75, 10);
put(rec.get_real("VALSTAT"), 85, 13, -3);
put(rec.get_real("VALSTAT"), 85, 13, _ndec);
put(rec.get_char("CONSEGNA"), 98);
put(rec.get_char("TRASPORTO"), 99);
put(rec.get("PAESE"), 100, 2);
@ -269,11 +271,11 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
put(rec.get("STATO"), 34, 2);
put(rec.get("PIVA"), 36, 12);
put(rec.get("SEGNORETT"), 48, 1);
put(rec.get_real("AMMLIRE"), 49, 13, -3);
put(rec.get_real("AMMLIRE"), 49, 13, _ndec);
put(rec.get("NATURA"), 62, 1);
put(rec.get("NOMENCL"), 63, 8, "RZ");
if (ic._freq == 'M')
put(rec.get_real("VALSTAT"), 71, 13, -3);
put(rec.get_real("VALSTAT"), 71, 13, _ndec);
else
put("", 71, 13);
}
@ -294,7 +296,9 @@ void TRecord_intra::print_on(ostream& o) const
}
TRecord_intra::TRecord_intra() : TString(132)
{ }
{
_ndec = TCurrency::get_firm_dec() > 0 ? 0 : -3;
}
///////////////////////////////////////////////////////////
@ -466,6 +470,8 @@ protected:
void TDischetto_app::main_loop()
{
open_files(LF_TABCOM, LF_TAB, LF_CLIFO,
LF_INTRA, LF_RINTRA, LF_RIEPRETT, 0);
TDischetto_mask m;
while (m.run() == K_ENTER)
m.genera_dischetto();

View File

@ -53,19 +53,29 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
const bool acq = tipo() == 'A';
m.show(-GR_ACQUISTI, acq); // Mostra i gruppi di campi
m.show(-GR_CESSIONI, !acq); // consoni al tipo movimento
/*
const bool req = frequenza() == 'M';
for (int i = m.fields()-1; i >= 0; i--)
{
TMask_field& f = m.fld(i);
if (f.dlg() <= F_NOMENCLATURA)
break;
if (f.is_edit())
f.check_type(req ? CHECK_REQUIRED : CHECK_NORMAL);
}
*/
TString key ; key << main_app().get_firm();
const bool req = frequenza() == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
m.field(F_VALORE_STAT).check_type(chk);
m.field(F_CONSEGNA).check_type(chk);
m.field(F_TRASPORTO).check_type(chk);
}
break;
case F_CLIFO:
if (e == fe_modify)
{
const TRectype& curr = efield(F_CLIFO).browse()->cursor()->curr();
TString16 codval = curr.get("VALINTRA");
if (codval.empty())
codval = curr.get("CODVAL");
set(F_VALUTA, codval);
}
break;
case F_VALUTA:
if (e == fe_modify)
{
@ -84,15 +94,29 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
}
}
break;
case F_TOT_DOC:
if (e == fe_close)
{
const real totdoc = get_real(F_TOT_DOC);
const real totdocimm = get_real(F_TOT_IMM);
if (totdoc != totdocimm)
{
const TString str_totdoc(totdoc.string());
return error_box("Totale documento (%s) diverso dal totale documento immesso(%s)", (const char *)str_totdoc, (const char *)totdocimm.string());
}
}
break;
case F_AMM_LIRE:
if (e == fe_modify)
{
TMask& m = o.mask();
TMask& m = o.mask();
if (m.get_real(F_AMM_VALUTA).is_zero())
{
TCurrency curr(real(o.get()), "_FIRM");
TCurrency curr(real(o.get()));
curr.change_value(get(F_VALUTA), get_real(F_CAMBIO));
m.set(F_AMM_VALUTA, curr.string(), TRUE);
m.set(F_AMM_VALUTA, curr, TRUE);
}
}
break;
@ -103,8 +127,8 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
if (m.get_real(F_AMM_LIRE).is_zero())
{
TCurrency curr(real(o.get()), get(F_VALUTA), get_real(F_CAMBIO));
curr.change_value("_FIRM");
m.set(F_AMM_LIRE, curr.string(), TRUE);
curr.change_to_firm_val();
m.set(F_AMM_LIRE, curr, TRUE);
}
}
break;
@ -123,7 +147,21 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
}
bool TImmissione_mask::on_sheet_event(TSheet_field& s, TField_event e, int row)
{
{
if (e == se_notify_modify)
{
real amm_lire;
int rows = s.items();
for (int i = 0; i < rows; i++)
{
TToken_string & r = s.row(i);
const real val = r.get(s.cid2index(F_AMM_LIRE));
amm_lire += val;
}
s.mask().set(F_TOT_IMM, amm_lire);
}
return TRUE;
}
@ -131,7 +169,7 @@ bool TImmissione_mask::on_sheet_field_event(TOperable_field& o, TField_event e,
{
switch (o.dlg())
{
case F_NOMENCLATURA:
case F_NOMENCLATURA3:
if (e == fe_modify)
{
TMask& m = o.mask();

View File

@ -24,20 +24,22 @@
#define F_RIGHE 350
#define F_AMM_LIRE 101
#define F_AMM_VALUTA 102
#define F_NATURA_TRANS 103
#define F_NOMENCLATURA 104
#define F_MASSA_KG 105
#define F_MASSA_UMS 106
#define F_UMS 107
#define F_VALORE_STAT 108
#define F_CONSEGNA 109
#define F_TRASPORTO 110
#define F_PAESE 111
#define F_PAESE_ORIG 112
#define F_PAESE_DUMMY 212
#define F_PROV 113
#define F_AMM_LIRE 101
#define F_AMM_VALUTA 102
#define F_NATURA_TRANS 103
#define F_NOMENCLATURA1 104
#define F_NOMENCLATURA2 105
#define F_NOMENCLATURA3 106
#define F_MASSA_KG 107
#define F_MASSA_UMS 108
#define F_UMS 109
#define F_VALORE_STAT 110
#define F_CONSEGNA 111
#define F_TRASPORTO 112
#define F_PAESE_ORIG 113
#define F_PAESE_DUMMY 213
#define F_PROV 114
#define GR_CESSIONI 1
#define GR_ACQUISTI 2

View File

@ -122,24 +122,9 @@ BEGIN
CHECKTYPE REQUIRED
END
LIST F_STATO 2 14
STRING F_STATO 2
BEGIN
PROMPT 1 6 "Stato CEE "
ITEM " |"
ITEM "AT|Austria"
ITEM "BE|Belgio"
ITEM "DE|Germania"
ITEM "DK|Danimarca"
ITEM "EL|Grecia"
ITEM "ES|Spagna"
ITEM "FR|Francia"
ITEM "GB|Gran Bretagna"
ITEM "IE|Irlanda"
ITEM "IT|Italia"
ITEM "LU|Lussemburgo"
ITEM "NL|Olanda"
ITEM "PT|Portogallo"
ITEM "SE|Svezia"
FLAGS "D"
END
@ -155,9 +140,9 @@ BEGIN
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC
COPY OUTPUT F_CLIFO
VALIDATE PI_FUNC F_STATO
// VALIDATE PI_FUNC F_STATO
CHECKTYPE REQUIRED
WARNING "Lunghezza partita IVA errata"
// WARNING "Lunghezza partita IVA errata"
END
CURRENCY F_TOT_DOC 18
@ -169,7 +154,8 @@ END
CURRENCY F_TOT_IMM 18
BEGIN
PROMPT 1 8 "Totale documento immesso "
FIELD TOTDOCIMM
FIELD TOTDOCIMM
FLAGS "D"
END
STRING F_VALUTA 3
@ -185,7 +171,7 @@ BEGIN
FIELD CODVAL
END
NUMBER F_CAMBIO 18 5
NUMBER F_CAMBIO 18 6
BEGIN
PROMPT 53 8 "Cambio "
CHECKTYPE REQUIRED
@ -195,19 +181,20 @@ END
SPREADSHEET F_RIGHE
BEGIN
PROMPT 0 9 ""
ITEM "Ammontare\nLire@18"
ITEM "Ammontare\nOperaz.@18"
ITEM "Ammontare\nValuta@18"
ITEM "Natura\nTransaz.@7"
ITEM "Nomenclat.\ncombinata@10"
ITEM "@5"
ITEM "@5"
ITEM "Massa Kg@13"
ITEM "Massa Ums@13"
ITEM "U.M."
ITEM "Valore\nStatistico@15"
ITEM "Modo\nTrasp.@5"
ITEM "Condiz.\nCons.@6"
ITEM "Paese@6"
ITEM "Paese\nOrig.@6"
ITEM "Provincia"
ITEM "Modo\nTrasp.@5"
ITEM "Paese\nDest.@6"
ITEM "Provincia\nOrig."
FLAGS "A"
USE LF_RINTRA KEY NUMRIG
INPUT NUMREG F_NUM_REG
@ -217,11 +204,11 @@ ENDPAGE
ENDMASK
PAGE "Righe" -1 -1 70 11
PAGE "Righe" -1 -1 78 11
CURRENCY F_AMM_LIRE 18
BEGIN
PROMPT 1 1 "Ammontare in lire "
PROMPT 1 1 "Ammontare operaz. "
FIELD AMMLIRE
CHECKTYPE REQUIRED
END
@ -236,34 +223,50 @@ END
NUMBER F_NATURA_TRANS 1
BEGIN
PROMPT 1 3 "Natura transazione "
SHEET "Cod.|Descrizione@66"
INPUT F_NATURA_TRANS
ITEM "1|Acquisto o vendita (compreso il baratto)"
ITEM "2|Restituzione o sostituzione di merci"
ITEM "3|Aiuti gernativi, privati o finanziati dalla comunita' europea"
ITEM "4|Operazione in vista di una lavorazione per conto terzi o di una riparazione"
ITEM "5|Operazione successiva ad una lavorazione per conto terzi o di una riparazione"
ITEM "6|Movimento di merci senza trasferimento di proprieta' (per noleggio, leasing operativo, ecc.)"
ITEM "7|Operazione a titolo di un programma comune di difesa o di un altro programma intergovernativo di fabbricazione coordinata"
ITEM "8|Fornitura di materiali e macchinari nel quadro di un contratto generale di costruzione o di genio civile"
ITEM "9|Altre transazioni"
OUTPUT F_NATURA_TRANS
PROMPT 1 3 "Natura transazione "
USE %INT
INPUT CODTAB F_NATURA_TRANS
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@70" S0
OUTPUT F_NATURA_TRANS CODTAB
FIELD NATURA
END
NUMBER F_NOMENCLATURA 8
STRING F_NOMENCLATURA1 4
BEGIN
PROMPT 36 3 "Nomenclatura combinata "
FLAGS "Z"
FLAGS "U"
USE %NOC
INPUT CODTAB F_NOMENCLATURA
DISPLAY "Codice@8" CODTAB
INPUT CODTAB[1,4] F_NOMENCLATURA1
INPUT CODTAB[5,6] F_NOMENCLATURA2
INPUT CODTAB[7,8] F_NOMENCLATURA3
DISPLAY "Codice" CODTAB[1,4]
DISPLAY "" CODTAB[5,6]
DISPLAY "" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT F_NOMENCLATURA CODTAB
CHECKTYPE REQUIRED
FIELD NOMENCL
OUTPUT F_NOMENCLATURA1 CODTAB[1,4]
OUTPUT F_NOMENCLATURA2 CODTAB[5,6]
OUTPUT F_NOMENCLATURA3 CODTAB[7,8]
CHECKTYPE REQUIRED
FIELD NOMENCL[1,4]
END
STRING F_NOMENCLATURA2 2
BEGIN
PROMPT 67 3 ""
FLAGS "U"
COPY ALL F_NOMENCLATURA1
CHECKTYPE NORMAL
FIELD NOMENCL[5,6]
END
STRING F_NOMENCLATURA3 2
BEGIN
PROMPT 72 3 ""
FLAGS "U"
COPY ALL F_NOMENCLATURA1
CHECKTYPE NORMAL
FIELD NOMENCL[7,8]
END
NUMBER F_MASSA_KG 13 5
@ -293,99 +296,64 @@ BEGIN
FIELD UMS
END
NUBER F_VALORE_STAT 15
CURRENCY F_VALORE_STAT 15
BEGIN
PROMPT 1 5 "Valore statistico "
PICTURE "."
FIELD VALSTAT
END
STRING F_CONSEGNA 3
BEGIN
PROMPT 43 5 "Condizioni consegna "
SHEET "Codice|Descrizione@45"
INPUT F_CONSEGNA
ITEM "EXW|Franco fabbrica"
ITEM "FCA|Franco vettore"
ITEM "FAS|Franco sotto bordo"
ITEM "FOB|Franco a bordo"
ITEM "CFR|Costo e nolo"
ITEM "CIF|Costo, assicurazione, nolo"
ITEM "CPT|Nolo/porto pagato fino a ..."
ITEM "CIP|Nolo/porto e assicurazione pagati fino a ..."
ITEM "DAF|Reso frontiera"
ITEM "DES|Reso franco bordo nave a destino"
ITEM "DEQ|Reso franco banchina"
ITEM "DDU|Reso non sdoganato"
ITEM "DDP|Reso sdoganato"
OUTPUT F_CONSEGNA
USE %ICC
INPUT CODTAB F_CONSEGNA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CONSEGNA CODTAB
FIELD CONSEGNA
END
LIST F_TRASPORTO 1 20
NUMBER F_TRASPORTO 1
BEGIN
PROMPT 1 6 "Modo di trasporto "
ITEM "1|Marittimo"
ITEM "2|Ferroviario"
ITEM "3|Stradale"
ITEM "4|Aereo"
ITEM "5|Spedizione postale"
ITEM "7|Installazioni fisse"
ITEM "8|Via acqua"
ITEM "9|Propulsione propria"
USE %IMT
INPUT CODTAB F_TRASPORTO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_TRASPORTO CODTAB
FIELD TRASPORTO
END
TEXT DLG_NULL
BEGIN
PROMPT 1 7 "Pase destinazione"
GROUP GR_CESSIONI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 7 "Pase provenienza"
PROMPT 1 7 "Paese provenienza"
GROUP GR_ACQUISTI
END
LIST F_PAESE 2 20
BEGIN
PROMPT 19 7 ""
ITEM " |"
ITEM "AT|Austria"
ITEM "BE|Belgio"
ITEM "DE|Germania"
ITEM "DK|Danimarca"
ITEM "EL|Grecia"
ITEM "ES|Spagna"
ITEM "FR|Francia"
ITEM "GB|Gran Bretagna"
ITEM "IE|Irlanda"
ITEM "IT|Italia"
ITEM "LU|Lussemburgo"
ITEM "NL|Olanda"
ITEM "PT|Portogallo"
ITEM "SE|Svezia"
FIELD PAESE
END
STRING F_PAESE_ORIG 2
BEGIN
PROMPT 1 8 "Pase di origine "
PROMPT 20 7 ""
FLAGS "U"
USE %SCE
INPUT CODTAB F_PAESE_ORIG
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_PAESE_ORIG CODTAB
CHECKTYPE NORMAL
FIELD PAESEORIG
GROUP GR_ACQUISTI
END
STRING F_PAESE_DUMMY 2
BEGIN
PROMPT 81 8 "Pase anti NFCHECK "
PROMPT 81 8 "Paese anti NFCHECK "
FLAGS "D"
GROUP GR_CESSIONI
END
TEXT DLG_NULL
BEGIN
PROMPT 43 7 "Provincia d'origine"
PROMPT 43 7 "Provincia d'origine"
GROUP GR_CESSIONI
END
@ -399,6 +367,8 @@ STRING F_PROV 2
BEGIN
PROMPT 64 7 ""
FLAGS "U"
CHECKTYPE REQUIRED
WARNING "Provincia assente"
FIELD PROV
END

View File

@ -29,6 +29,31 @@ bool TRiepiloghi_mask::on_field_event(TOperable_field& o, TField_event e, long j
{
switch (o.dlg())
{
case F_VALORE_STAT:
if (e == fe_init)
{
TMask& m = o.mask();
TString key ; key << main_app().get_firm();
const bool req = frequenza() == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
m.field(F_VALORE_STAT).check_type(chk);
m.field(F_CONSEGNA).check_type(chk);
m.field(F_TRASPORTO).check_type(chk);
}
break;
case F_PARTITA_IVA:
if (e == fe_modify)
{
const TRectype& curr = efield(F_PARTITA_IVA).browse()->cursor()->curr();
TString16 codval = curr.get("VALINTRA");
if (codval.empty())
codval = curr.get("CODVAL");
set(F_VALUTA, codval);
}
break;
case F_NATURA_TRANS:
if (e == fe_modify || e == fe_init)
o.check();
@ -46,7 +71,7 @@ bool TRiepiloghi_mask::on_field_event(TOperable_field& o, TField_event e, long j
TRiepiloghi_mask::TRiepiloghi_mask()
: TIntra_mask("in0600a")
{
first_focus(F_NUM_RIG);
// first_focus(F_NUM_RIG);
}
///////////////////////////////////////////////////////////
@ -66,13 +91,15 @@ protected:
virtual bool user_destroy();
virtual bool get_next_key(TToken_string& k);
virtual void init_query_mode(TMask& m);
virtual void init_insert_mode(TMask& m);
virtual bool save_and_new() const { return TRUE; };
public:
};
bool TRiepiloghi_intra::user_create()
{
open_files(LF_TABCOM, LF_TAB, LF_CLIFO,
LF_RIEPRETT, 0);
LF_INTRA, LF_RINTRA, LF_RIEPRETT, 0);
_rel = new TRelation(LF_RIEPRETT);
_msk = new TRiepiloghi_mask;
@ -108,6 +135,11 @@ bool TRiepiloghi_intra::get_next_key(TToken_string& k)
return TRUE;
}
void TRiepiloghi_intra::init_insert_mode(TMask& m)
{
m.enable(F_VALUTA);
}
void TRiepiloghi_intra::init_query_mode(TMask& m)
{
TEdit_field& numrig = m.efield(F_NUM_RIG);
@ -118,7 +150,8 @@ void TRiepiloghi_intra::init_query_mode(TMask& m)
m.set(F_ANNO, curr.get("ANNO"));
m.set(F_TIPO, curr.get("TIPO"), TRUE);
m.set(F_PERIODO_M, curr.get("PERIODO"));
m.set(F_PERIODO_T, curr.get("PERIODO"));
m.set(F_PERIODO_T, curr.get("PERIODO"));
m.disable(F_VALUTA);
}
int in0600(int argc, char* argv[])

View File

@ -15,7 +15,7 @@
#define F_NATURA_TRANS 321
#define F_NATURA_DESCR 322
#define F_NOMENCLATURA 323
#define F_NOMENCLATURA1 323
#define F_NOMENCL_DESC 324
#define F_CONSEGNA 325
#define F_CONSEGNA_DESC 326
@ -29,6 +29,9 @@
#define F_VALORE_STAT 353
#define F_MASSA_KG 354
#define F_MASSA_UMS 355
#define F_NOMENCLATURA2 356
#define F_NOMENCLATURA3 357
#define F_TRASPORTO_DESC 358
#define GR_CESSIONI 1
#define GR_ACQUISTI 2

View File

@ -4,11 +4,6 @@ TOOLBAR "Toolbar" 0 -3 0 3
#include <toolbar.h>
BUTTON F_RIEPILOGHI 28 1
BEGIN
PROMPT -11 0 "~Generazione Riepiloghi"
END
ENDPAGE
PAGE "Riepiloghi INTRA" -1 -1 78 18
@ -34,28 +29,9 @@ BEGIN
FLAGS "D"
END
LIST F_TIPO 1 10
BEGIN
PROMPT 1 3 "Tipo riepilogo "
ITEM "C|Cessioni"
MESSAGE "C",F_TIPO_CF|SHOW,GR_CESSIONI@|HIDE,GR_ACQUISTI@
ITEM "A|Acquisti"
MESSAGE "F",F_TIPO_CF|SHOW,GR_ACQUISTI@|HIDE,GR_CESSIONI@
KEY 1
FIELD TIPO
END
NUMBER F_ANNO 4
BEGIN
PROMPT 33 3 "Anno "
FLAGS "AU"
KEY 1
FIELD ANNO
END
LIST F_PERIODO_M 2 16
BEGIN
PROMPT 50 3 "Periodo "
PROMPT 1 3 "Periodo "
FLAGS "AM"
FIELD PERIODO
KEY 1
@ -63,7 +39,7 @@ END
LIST F_PERIODO_T 2 16
BEGIN
PROMPT 50 3 "Periodo "
PROMPT 1 3 "Periodo "
ITEM "01|Gennaio-Marzo"
MESSAGE COPY,F_PERIODO_M
ITEM "02|Aprile-Giugno"
@ -78,26 +54,45 @@ END
LIST F_PERIODO_A 2 16
BEGIN
PROMPT 50 3 "Periodo "
PROMPT 1 3 "Periodo "
ITEM "01|Annuale"
MESSAGE COPY,F_PERIODO_M
FIELD PERIODO
KEY 1
END
NUMBER F_ANNO 4
BEGIN
PROMPT 33 3 "Anno "
FLAGS "AU"
KEY 1
FIELD ANNO
END
LIST F_TIPO 1 10
BEGIN
PROMPT 49 3 "Tipo riepilogo "
ITEM "C|Cessioni"
MESSAGE "C",F_TIPO_CF|SHOW,GR_CESSIONI@|HIDE,GR_ACQUISTI@
ITEM "A|Acquisti"
MESSAGE "F",F_TIPO_CF|SHOW,GR_ACQUISTI@|HIDE,GR_CESSIONI@
KEY 1
FIELD TIPO
END
NUBER F_NUM_RIG 7
BEGIN
PROMPT 1 4 "Riga di riepilogo "
USE LF_RIEPRETT
INPUT TIPO F_TIPO SELECT
INPUT ANNO F_ANNO SELECT
INPUT PERIODO F_PERIODO_M
INPUT PERIODO F_PERIODO_M SELECT
INPUT NUMRIG F_NUM_RIG
DISPLAY "Tipo" TIPO
DISPLAY "Anno" ANNO
DISPLAY "Periodo" PERIODO
// DISPLAY "Tipo" TIPO
// DISPLAY "Anno" ANNO
// DISPLAY "Periodo" PERIODO
DISPLAY "Numero" NUMRIG
DISPLAY "Stato" STATO
// DISPLAY "Stato" STATO
DISPLAY "Partita IVA" PIVA
DISPLAY "Natura" NATURA
DISPLAY "Nomenclatura" NOMENCL
@ -112,23 +107,16 @@ BEGIN
KEY 1
END
LIST F_STATO 2 16
STRING F_STATO 2
BEGIN
PROMPT 1 5 "Stato CEE "
ITEM "AT|Austria"
ITEM "BE|Belgio"
ITEM "DE|Germania"
ITEM "DK|Danimarca"
ITEM "EL|Grecia"
ITEM "ES|Spagna"
ITEM "FR|Francia"
ITEM "GB|Gran Bretagna"
ITEM "IE|Irlanda"
ITEM "IT|Italia"
ITEM "LU|Lussemburgo"
ITEM "NL|Olanda"
ITEM "PT|Portogallo"
ITEM "SE|Svezia"
PROMPT 1 5 "Stato CEE "
FLAGS "U"
USE %SCE
INPUT CODTAB F_STATO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_STATO CODTAB
CHECKTYPE NORMAL
FIELD STATO
END
@ -154,10 +142,11 @@ BEGIN
OUTPUT F_STATO STATOPAIV
OUTPUT F_PARTITA_IVA PAIV
OUTPUT F_PARTITA_DESC RAGSOC
VALIDATE PI_FUNC F_STATO
// VALIDATE PI_FUNC F_STATO
CHECKTYPE REQUIRED
WARNING "Lunghezza partita IVA errata"
// WARNING "Lunghezza partita IVA errata"
FIELD PIVA
ADD RUN CG0 -1 /uPRASSI
END
STRING F_PARTITA_DESC 50
@ -170,19 +159,13 @@ END
NUMBER F_NATURA_TRANS 1
BEGIN
PROMPT 1 8 "Natura transazione "
SHEET "Cod.|Descrizione@66"
INPUT F_NATURA_TRANS
ITEM "1|Acquisto o vendita (compreso il baratto)"
ITEM "2|Restituzione o sostituzione di merci"
ITEM "3|Aiuti gernativi, privati o finanziati dalla comunita' europea"
ITEM "4|Operazione in vista di una lavorazione per conto terzi o di una riparazione"
ITEM "5|Operazione successiva ad una lavorazione per conto terzi o di una riparazione"
ITEM "6|Movimento di merci senza trasferimento di proprieta' (per noleggio, leasing operativo, ecc.)"
ITEM "7|Operazione a titolo di un programma comune di difesa o di un altro programma intergovernativo di fabbricazione coordinata"
ITEM "8|Fornitura di materiali e macchinari nel quadro di un contratto generale di costruzione o di genio civile"
ITEM "9|Altre transazioni"
OUTPUT F_NATURA_TRANS
OUTPUT F_NATURA_DESCR
USE %INT
INPUT CODTAB F_NATURA_TRANS
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@70" S0
OUTPUT F_NATURA_TRANS CODTAB
OUTPUT F_NATURA_DESCR S0
CHECKTYPE REQUIRED
FIELD NATURA
END
@ -197,46 +180,63 @@ BEGIN
PROMPT 1 9 "Nomenclatura"
END
NUMBER F_NOMENCLATURA 8
STRING F_NOMENCLATURA1 4
BEGIN
PROMPT 1 10 "combinata "
FLAGS "Z"
FLAGS "U"
USE %NOC
INPUT CODTAB F_NOMENCLATURA
DISPLAY "Codice@8" CODTAB
INPUT CODTAB[1,4] F_NOMENCLATURA1
INPUT CODTAB[5,6] F_NOMENCLATURA2
INPUT CODTAB[7,8] F_NOMENCLATURA3
DISPLAY "Codice" CODTAB[1,4]
DISPLAY "" CODTAB[5,6]
DISPLAY "" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT F_NOMENCLATURA CODTAB
OUTPUT F_NOMENCLATURA1 CODTAB[1,4]
OUTPUT F_NOMENCLATURA2 CODTAB[5,6]
OUTPUT F_NOMENCLATURA3 CODTAB[7,8]
OUTPUT F_NOMENCL_DESC S0
CHECKTYPE REQUIRED
FIELD NOMENCL
FIELD NOMENCL[1,4]
WARNING "Nomenclatura combinata assente"
END
STRING F_NOMENCL_DESC 50
STRING F_NOMENCLATURA2 2
BEGIN
PROMPT 26 10 ""
PROMPT 22 10 ""
FLAGS "U"
COPY ALL F_NOMENCLATURA1
FIELD NOMENCL[5,6]
CHECKTYPE NORMAL
WARNING "Nomenclatura combinata assente"
END
STRING F_NOMENCLATURA3 2
BEGIN
PROMPT 28 10 ""
FLAGS "U"
COPY ALL F_NOMENCLATURA1
CHECKTYPE NORMAL
FIELD NOMENCL[7,8]
WARNING "Nomenclatura combinata assente"
END
STRING F_NOMENCL_DESC 40
BEGIN
PROMPT 36 10 ""
FLAGS "D"
END
STRING F_CONSEGNA 3
BEGIN
PROMPT 1 11 "Condiz. consegna "
SHEET "Codice|Descrizione@45"
INPUT F_CONSEGNA
ITEM "EXW|Franco fabbrica"
ITEM "FCA|Franco vettore"
ITEM "FAS|Franco sotto bordo"
ITEM "FOB|Franco a bordo"
ITEM "CFR|Costo e nolo"
ITEM "CIF|Costo, assicurazione, nolo"
ITEM "CPT|Nolo/porto pagato fino a ..."
ITEM "CIP|Nolo/porto e assicurazione pagati fino a ..."
ITEM "DAF|Reso frontiera"
ITEM "DES|Reso franco bordo nave a destino"
ITEM "DEQ|Reso franco banchina"
ITEM "DDU|Reso non sdoganato"
ITEM "DDP|Reso sdoganato"
OUTPUT F_CONSEGNA
OUTPUT F_CONSEGNA_DESC
USE %ICC
INPUT CODTAB F_CONSEGNA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CONSEGNA CODTAB
OUTPUT F_CONSEGNA_DESC S0
CHECKTYPE REQUIRED
FIELD CONSEGNA
END
@ -246,58 +246,58 @@ BEGIN
FLAGS "D"
END
LIST F_TRASPORTO 1 20
NUMBER F_TRASPORTO 1
BEGIN
PROMPT 1 12 "Modo di trasporto "
ITEM "1|Marittimo"
ITEM "2|Ferroviario"
ITEM "3|Stradale"
ITEM "4|Aereo"
ITEM "5|Spedizione postale"
ITEM "7|Installazioni fisse"
ITEM "8|Via acqua"
ITEM "9|Propulsione propria"
USE %IMT
INPUT CODTAB F_TRASPORTO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_TRASPORTO CODTAB
OUTPUT F_TRASPORTO_DESC S0
CHECKTYPE REQUIRED
FIELD TRASPORTO
END
STRING F_TRASPORTO_DESC 50
BEGIN
PROMPT 26 12 ""
FLAGS "D"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 13 "Pase di destinazione"
PROMPT 1 13 "Paese di destinazione"
GROUP GR_CESSIONI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 13 "Pase di provenienza"
PROMPT 1 13 "Paese di provenienza"
GROUP GR_ACQUISTI
END
LIST F_PAESE 2 20
STRING F_PAESE 2
BEGIN
PROMPT 22 13 ""
ITEM " |"
ITEM "AT|Austria"
ITEM "BE|Belgio"
ITEM "DE|Germania"
ITEM "DK|Danimarca"
ITEM "EL|Grecia"
ITEM "ES|Spagna"
ITEM "FR|Francia"
ITEM "GB|Gran Bretagna"
ITEM "IE|Irlanda"
ITEM "IT|Italia"
ITEM "LU|Lussemburgo"
ITEM "NL|Olanda"
ITEM "PT|Portogallo"
ITEM "SE|Svezia"
FLAGS "U"
USE %SCE
INPUT CODTAB F_PAESE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_PAESE CODTAB
CHECKTYPE REQUIRED
CHECKTYPE NORMAL
FIELD PAESE
END
STRING F_PAESE_ORIG 2
BEGIN
PROMPT 1 14 "Pase di origine "
PROMPT 1 14 "Paese di origine "
GROUP GR_ACQUISTI
CHECKTYPE REQUIRED
FLAGS "U"
FIELD PAESEORIG
END
@ -329,8 +329,13 @@ END
STRING F_VALUTA 3
BEGIN
PROMPT 41 15 "in valuta "
USE %VAL
INPUT CODTAB F_VALUTA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_VALUTA CODTAB
FIELD CODVAL
FLAGS "D"
FLAGS "UZ"
END
CURRENCY F_AMM_VALUTA 18
@ -340,10 +345,9 @@ BEGIN
FIELD AMMVALUTA
END
NUMBER F_VALORE_STAT 18
CURRENCY F_VALORE_STAT 18
BEGIN
PROMPT 1 16 "Valore statistico "
PICTURE "."
FIELD VALSTAT
END

View File

@ -1,4 +1,5 @@
#include <relapp.h>
#include <relapp.h>
#include <recarray.h>
#include "in0.h"
#include "in0700a.h"
@ -35,6 +36,17 @@ bool TRettifiche_mask::on_field_event(TOperable_field& o, TField_event e, long j
show(O_PERIODO_A, field(F_PERIODO_A).shown());
}
break;
case F_VALORE_STAT:
if (e == fe_init)
{
TMask& m = o.mask();
TString key ; key << main_app().get_firm();
const bool req = frequenza() == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
m.field(F_VALORE_STAT).check_type(chk);
}
break;
case O_NUM_RIG:
if ((e == fe_init || e == fe_modify) && !o.empty())
{
@ -45,7 +57,7 @@ bool TRettifiche_mask::on_field_event(TOperable_field& o, TField_event e, long j
enable(-GR_ORIGINAL, !ok);
if (e == fe_modify && insert_mode())
{
for (short dlg = O_STATO; dlg <= O_NOMENCLATURA; dlg++)
for (short dlg = O_STATO; dlg <= O_NOMENCLATURA3; dlg++)
{
const int pos = id2pos(dlg);
if (pos >= 0)

View File

@ -12,12 +12,14 @@
#define O_PARTITA_DESC 111
#define O_NUM_RIG 112
#define O_NATURA_TRANS 121
#define O_NOMENCLATURA 122
#define O_AMM_LIRE 123
#define O_AMM_VALUTA 124
#define O_VALUTA 125
#define O_VALORE_STAT 126
#define O_NATURA_TRANS 121
#define O_NOMENCLATURA1 122
#define O_AMM_LIRE 123
#define O_AMM_VALUTA 124
#define O_VALUTA 125
#define O_VALORE_STAT 126
#define O_NOMENCLATURA2 127
#define O_NOMENCLATURA3 128
#define F_TIPO 203
#define F_ANNO 204
@ -31,10 +33,12 @@
#define F_NUM_RIG 212
#define F_SEGNO 220
#define F_NATURA_TRANS 221
#define F_NOMENCLATURA 222
#define F_NOMENCLATURA1 222
#define F_AMM_LIRE 223
#define F_AMM_VALUTA 224
#define F_VALUTA 225
#define F_VALORE_STAT 226
#define F_NOMENCLATURA2 227
#define F_NOMENCLATURA3 228
#define GR_ORIGINAL 3

View File

@ -51,7 +51,7 @@ BEGIN
FIELD ANNORETT
CHECKTYPE REQUIRED
NUM_EXPR #O_ANNO<=#O_ANNO
WARNING "Si possono rettificare solo gli anni precedenti"
WARNING "Si possono rettificare solo gli anni precedenti o uguali"
END
LIST O_PERIODO_M 2 16
@ -59,7 +59,7 @@ BEGIN
PROMPT 33 4 "Periodo "
FLAGS "AM"
FIELD PERETT
NUM_EXPR (#O_ANNO=#F_ANNO)||(#O_PERIODO_M<#F_PERIODO_M)
NUM_EXPR (#O_ANNO<#F_ANNO)||((#O_ANNO=#F_ANNO)&&(#O_PERIODO_M<#F_PERIODO_M))
WARINIG "Si possono rettificare solo i periodi precedenti"
END
@ -75,7 +75,7 @@ BEGIN
ITEM "04|Ottobre-Dicembre"
MESSAGE COPY,O_PERIODO_M
FIELD PERETT
NUM_EXPR (#O_ANNO=#F_ANNO)||(#O_PERIODO_T<#F_PERIODO_T)
NUM_EXPR (#O_ANNO<#F_ANNO)||((#O_ANNO=#F_ANNO)&&(#O_PERIODO_T<#F_PERIODO_T))
WARINIG "Si possono rettificare solo i periodi precedenti"
END
@ -111,7 +111,9 @@ BEGIN
OUTPUT O_STATO STATO
OUTPUT O_PARTITA_IVA PIVA
OUTPUT O_NATURA_TRANS NATURA
OUTPUT O_NOMENCLATURA NOMENCL
OUTPUT O_NOMENCLATURA1 NOMENCL[1,4]
OUTPUT O_NOMENCLATURA2 NOMENCL[5,6]
OUTPUT O_NOMENCLATURA3 NOMENCL[7,8]
OUTPUT O_AMM_LIRE AMMLIRE
OUTPUT O_VALUTA CODVAL
OUTPUT F_VALUTA CODVAL
@ -121,23 +123,16 @@ BEGIN
FIELD NUMRETT
END
LIST O_STATO 2 16
STRING O_STATO 2
BEGIN
PROMPT 2 5 "Stato CEE "
ITEM "AT|Austria"
ITEM "BE|Belgio"
ITEM "DE|Germania"
ITEM "DK|Danimarca"
ITEM "EL|Grecia"
ITEM "ES|Spagna"
ITEM "FR|Francia"
ITEM "GB|Gran Bretagna"
ITEM "IE|Irlanda"
ITEM "IT|Italia"
ITEM "LU|Lussemburgo"
ITEM "NL|Olanda"
ITEM "PT|Portogallo"
ITEM "SE|Svezia"
FLAGS "U"
USE %SCE
INPUT CODTAB O_STATO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT O_STATO CODTAB
CHECKTYPE NORMAL
GROUP GR_ORIGINAL
END
@ -163,7 +158,7 @@ BEGIN
OUTPUT O_STATO STATOPAIV
OUTPUT O_PARTITA_IVA PAIV
OUTPUT O_PARTITA_DESC RAGSOC
VALIDATE PI_FUNC O_STATO
// VALIDATE PI_FUNC O_STATO
CHECKTYPE REQUIRED
WARNING "Lunghezza partita IVA errata"
GROUP GR_ORIGINAL
@ -178,34 +173,51 @@ END
NUMBER O_NATURA_TRANS 1
BEGIN
PROMPT 2 7 "Natura transazione "
SHEET "Cod.|Descrizione@66"
INPUT O_NATURA_TRANS
ITEM "1|Acquisto o vendita (compreso il baratto)"
ITEM "2|Restituzione o sostituzione di merci"
ITEM "3|Aiuti gernativi, privati o finanziati dalla comunita' europea"
ITEM "4|Operazione in vista di una lavorazione per conto terzi o di una riparazione"
ITEM "5|Operazione successiva ad una lavorazione per conto terzi o di una riparazione"
ITEM "6|Movimento di merci senza trasferimento di proprieta' (per noleggio, leasing operativo, ecc.)"
ITEM "7|Operazione a titolo di un programma comune di difesa o di un altro programma intergovernativo di fabbricazione coordinata"
ITEM "8|Fornitura di materiali e macchinari nel quadro di un contratto generale di costruzione o di genio civile"
ITEM "9|Altre transazioni"
OUTPUT O_NATURA_TRANS
USE %INT
INPUT CODTAB O_NATURA_TRANS
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@70" S0
OUTPUT O_NATURA_TRANS CODTAB
GROUP GR_ORIGINAL
END
NUMBER O_NOMENCLATURA 8
STRING O_NOMENCLATURA1 4
BEGIN
PROMPT 30 7 "Nomenclatura combinata "
FLAGS "Z"
PROMPT 28 7 "Nomenclatura combinata "
FLAGS "U"
USE %NOC
INPUT CODTAB O_NOMENCLATURA
DISPLAY "Codice@8" CODTAB
INPUT CODTAB[1,4] O_NOMENCLATURA1
INPUT CODTAB[5,6] O_NOMENCLATURA2
INPUT CODTAB[7,8] O_NOMENCLATURA3
DISPLAY "Codice" CODTAB[1,4]
DISPLAY "" CODTAB[5,6]
DISPLAY "" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT O_NOMENCLATURA CODTAB
OUTPUT O_NOMENCLATURA1 CODTAB[1,4]
OUTPUT O_NOMENCLATURA2 CODTAB[5,6]
OUTPUT O_NOMENCLATURA3 CODTAB[7,8]
CHECKTYPE REQUIRED
GROUP GR_ORIGINAL
END
STRING O_NOMENCLATURA2 2
BEGIN
PROMPT 58 7 ""
FLAGS "U"
COPY ALL O_NOMENCLATURA1
CHECKTYPE NORMAL
GROUP GR_ORIGINAL
END
STRING O_NOMENCLATURA3 2
BEGIN
PROMPT 63 7 ""
FLAGS "U"
COPY ALL O_NOMENCLATURA1
CHECKTYPE NORMAL
GROUP GR_ORIGINAL
END
CURRENCY O_AMM_LIRE 18
BEGIN
PROMPT 2 8 "Ammontare in lire "
@ -311,23 +323,16 @@ BEGIN
KEY 1
END
LIST F_STATO 2 16
STRING F_STATO 2
BEGIN
PROMPT 2 13 "Stato CEE "
ITEM "AT|Austria"
ITEM "BE|Belgio"
ITEM "DE|Germania"
ITEM "DK|Danimarca"
ITEM "EL|Grecia"
ITEM "ES|Spagna"
ITEM "FR|Francia"
ITEM "GB|Gran Bretagna"
ITEM "IE|Irlanda"
ITEM "IT|Italia"
ITEM "LU|Lussemburgo"
ITEM "NL|Olanda"
ITEM "PT|Portogallo"
ITEM "SE|Svezia"
FLAGS "U"
USE %SCE
INPUT CODTAB F_STATO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_STATO CODTAB
CHECKTYPE NORMAL
FIELD STATO
END
@ -350,12 +355,12 @@ BEGIN
DISPLAY "Partita IVA@12" PAIV
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT O_STATO STATOPAIV
OUTPUT O_PARTITA_IVA PAIV
OUTPUT O_PARTITA_DESC RAGSOC
VALIDATE PI_FUNC O_STATO
OUTPUT F_STATO STATOPAIV
OUTPUT F_PARTITA_IVA PAIV
OUTPUT F_PARTITA_DESC RAGSOC
// VALIDATE PI_FUNC F_STATO
CHECKTYPE REQUIRED
WARNING "Lunghezza partita IVA errata"
// WARNING "Lunghezza partita IVA errata"
FIELD PIVA
END
@ -368,34 +373,49 @@ END
NUMBER F_NATURA_TRANS 1
BEGIN
PROMPT 2 15 "Natura transazione "
SHEET "Cod.|Descrizione@66"
INPUT O_NATURA_TRANS
ITEM "1|Acquisto o vendita (compreso il baratto)"
ITEM "2|Restituzione o sostituzione di merci"
ITEM "3|Aiuti gernativi, privati o finanziati dalla comunita' europea"
ITEM "4|Operazione in vista di una lavorazione per conto terzi o di una riparazione"
ITEM "5|Operazione successiva ad una lavorazione per conto terzi o di una riparazione"
ITEM "6|Movimento di merci senza trasferimento di proprieta' (per noleggio, leasing operativo, ecc.)"
ITEM "7|Operazione a titolo di un programma comune di difesa o di un altro programma intergovernativo di fabbricazione coordinata"
ITEM "8|Fornitura di materiali e macchinari nel quadro di un contratto generale di costruzione o di genio civile"
ITEM "9|Altre transazioni"
OUTPUT O_NATURA_TRANS
USE %INT
INPUT CODTAB F_NATURA_TRANS
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@70" S0
OUTPUT F_NATURA_TRANS CODTAB
FIELD NATURA
END
NUMBER F_NOMENCLATURA 8
STRING F_NOMENCLATURA1 4
BEGIN
PROMPT 30 15 "Nomenclatura combinata "
FLAGS "Z"
PROMPT 28 15 "Nomenclatura combinata "
FLAGS "U"
USE %NOC
INPUT CODTAB O_NOMENCLATURA
DISPLAY "Codice@8" CODTAB
INPUT CODTAB[1,4] F_NOMENCLATURA1
INPUT CODTAB[5,6] F_NOMENCLATURA2
INPUT CODTAB[7,8] F_NOMENCLATURA3
DISPLAY "Codice" CODTAB[1,4]
DISPLAY "" CODTAB[5,6]
DISPLAY "" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT O_NOMENCLATURA CODTAB
OUTPUT F_NOMENCLATURA1 CODTAB[1,4]
OUTPUT F_NOMENCLATURA2 CODTAB[5,6]
OUTPUT F_NOMENCLATURA3 CODTAB[7,8]
CHECKTYPE REQUIRED
FIELD NOMENCL
END
STRING F_NOMENCLATURA2 2
BEGIN
PROMPT 58 15 ""
FLAGS "U"
COPY ALL F_NOMENCLATURA1
CHECKTYPE NORMAL
END
STRING F_NOMENCLATURA3 2
BEGIN
PROMPT 63 15 ""
FLAGS "U"
COPY ALL F_NOMENCLATURA1
CHECKTYPE NORMAL
END
LIST F_SEGNO 1
BEGIN
PROMPT 68 15 "Segno "
@ -424,10 +444,9 @@ BEGIN
FIELD AMMVALUTA
END
NUMBER F_VALORE_STAT 18
CURRENCY F_VALORE_STAT 18
BEGIN
PROMPT 2 17 "Valore statistico "
PICTURE "."
FIELD VALSTAT
END

View File

@ -365,8 +365,9 @@ void genera_riepiloghi(char tipo, int anno, int periodo)
int num_fields = 0;
if (tipo > ' ' )
{
m.set(R_TIPO, tipo);
{
TString16 t; t << tipo;
m.set(R_TIPO, t);
num_fields++;
}
if (anno > 0)

View File

@ -1,11 +1,35 @@
[PRASSIEF_001]
Caption = "Elenchi INTRA comunitari"
Picture = <ba00.bmp>
Module = 34
Flags = ""
Module = 18
Flags = "F"
Item_01 = "Stampa riepiloghi", "in0 -0", "F"
Item_02 = "Generazione dischetti", "in0 -1", "F"
Item_03 = "Gestione movimenti", "in0 -4", "F"
Item_04 = "Gestione riepiloghi", "in0 -5", "F"
Item_05 = "Gestione rettifiche", "in0 -6", "F"
Item_06 = "Tabelle", [PRASSIIN_002]
Item_07 = "Stampa Tabelle", [PRASSIIN_003]
[PRASSIIN_002]
Caption = "Tabelle"
Picture = <ba01.bmp>
Module = 0
Flags = ""
Item_01 = "Nomenclatura combinata", "ba3 -0 %noc", ""
Item_02 = "Stati CEE", "ba3 -0 %sce", ""
Item_03 = "Natura Transazione", "ba3 -0 %int", ""
Item_04 = "Condizioni di consegna", "ba3 -0 %icc", ""
Item_05 = "Modalita' di trasporto", "ba3 -0 %imt", ""
[PRASSIIN_003]
Caption = "Stampa Tabelle"
Picture = <ba01.bmp>
Module = 0
Flags = ""
Item_01 = "Nomenclatura combinata", "ba3 -1 %noc", ""
Item_02 = "Stati CEE", "ba3 -1 %sce", ""
Item_03 = "Natura Transazione", "ba3 -1 %int", ""
Item_04 = "Condizioni di consegna", "ba3 -1 %icc", ""
Item_05 = "Modalita' di trasporto", "ba3 -1 %imt", ""

42
in/intabcom.txt Executable file
View File

@ -0,0 +1,42 @@
[Header]
Version=199518
Fields=COD,3|CODTAB,25|S0,70|S1,70|S2,70|S3,70|S4,20|S5,20|S6,5|S7,5
Fields=S8,5|S9,5|S10,5|S11,5|I0,7|I1,7|I2,7|I3,7|I4,7|I5,7
Fields=I6,7|I7,7|I8,7|I9,7|I10,7|I11,7|I12,7|I13,7|I14,7|R0,18
Fields=R1,18|R2,18|R3,18|R4,18|R5,18|R6,18|R7,18|R8,18|R9,18|R10,18
Fields=R11,18|R12,18|R13,18|R14,18|R15,18|R16,18|R17,18|R18,18|R19,18|D0,10
Fields=D1,10|D2,10|D3,10|D4,10|B0,1|B1,1|B2,1|B3,1|B4,1|B5,1
Fields=B6,1|B7,1|B8,1|B9,1|FPC,1
[Data]
IMT|1|Trasporto marittimo||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IMT|2|Trasporto per ferrovia||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IMT|3|Trasporto su strada||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IMT|4|Trasporto aereo||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IMT|5|Spedizioni postali||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IMT|7|Installazioni di trasporto fisse||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IMT|8|Trasporto per via navigabile interna||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IMT|9|Propulsione propria||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|CFR|Costo e nolo (C&F)||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|CIF|Costo, assicurazione e nolo (CAF)||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|CIP|Porto pagato, assicurazione inclusa, fino a||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|CPT|Porto pagato fino a||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|DAF|Reso frontiera||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|DDP|Reso sdoganato||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|DDU|Reso non sdoganato||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|DEQ|Franco banchina||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|DES|Ex ship||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|EXW|Franco fabbrica||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|FAS|Franco sottobordo||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|FCA|Franco vettore||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|FOB|Franco a bordo||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ICC|XXX|Altre condizioni di consegna||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
INT|1|Acquisto e vendita di beni (compreso il baratto)|||||||A|||||||||||||||||||||||||||||||||||||||||||||||||||||||
INT|2|Restituzione o sostituzione di merci|||||||B|||||||||||||||||||||||||||||||||||||||||||||||||||||||
INT|3|Aiuti governativi, privati o finanziati dalla C.E.E.|||||||C|||||||||||||||||||||||||||||||||||||||||||||||||||||||
INT|4|Operaz.in vista di una lav.conto terzi o di una riparazione.|||||||D||||||||||||||||||||0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00000|0.00000|0.00000|0.00000|0.00000|0.00000|0.00000|0.00000|0.00000|0.00000|||||| | | | | | | | | | |
INT|5|Oper. successiva ad una lav.per conto terzi o ad una riparazione|||||||E|||||||||||||||||||||||||||||||||||||||||||||||||||||||
INT|6|Movimento di merci senza trasferimento di proprietà|||||||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||
INT|7|Operaz.a titolo di progr. comune di difesa o intergov.di fabbr.coord.|||||||G|||||||||||||||||||||||||||||||||||||||||||||||||||||||
INT|8|Forn.di materiali nel quadro di un contr.gen.di costr. o genio civile|||||||H|||||||||||||||||||||||||||||||||||||||||||||||||||||||
INT|9|Altre transazioni|||||||I|||||||||||||||||||||||||||||||||||||||||||||||||||||||

53
include/bagn007.uml Executable file
View File

@ -0,0 +1,53 @@
PAGE "Colori delle righe di prima nota" -1 -1 42 10
SPREADSHEET 101 -1 -3
BEGIN
PROMPT 1 1 "Colori"
ITEM "Colore@32"
FLAGS "D"
END
BUTTON 102 10 2
BEGIN
PROMPT -13 -1 "A~zzera"
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -33 -1 ""
END
ENDPAGE
ENDMASK
PAGE "Colore" -1 -1 40 10
STRING 101 32
BEGIN
PROMPT 1 1 "Tipo "
END
BUTTON 100 14 2
BEGIN
PROMPT 2 5 "~Sfondo"
END
BUTTON 99 14 2
BEGIN
PROMPT 22 5 "~Testo"
END
BUTTON DLG_OK 14 2
BEGIN
PROMPT -11 -1 ""
END
ENDPAGE
ENDMASK

45
include/colmask.h Executable file
View File

@ -0,0 +1,45 @@
#ifndef __COLMASK_H
#define __COLMASK_H
#ifndef __COLORS_H
#include <colors.h>
#endif
#ifndef __VARMASK_H
#include <varmask.h>
#endif
class TColor_row_mask;
class TColor_object_props;
class TSelect_color_mask : public TVariable_mask
{
TColor_row_mask * _sheet_mask;
TArray _color_defs;
TFilename _mask_name;
TString _paragraph;
HIDDEN TMask * get_mask(int, TMask&);
TColor_object_props * row(int r) const { return (TColor_object_props *) _color_defs.objptr(r);}
int items() { return _color_defs.items();}
protected:
void init(const char * mask_name, const char * para = NULL);
static bool color_handler(TMask_field& f, KEY k);
static bool reset_handler(TMask_field& f, KEY k);
void save() const ;
public:
int add_color_def(const char * key, const char * prompt, COLOR back = NORMAL_BACK_COLOR, COLOR fore = NORMAL_COLOR);
void get_color_def(const char * key, COLOR & back, COLOR & fore) const ;
void get_cur_colors(COLOR & back, COLOR & fore) const ;
int key2pos(const char * key) const;
COLOR get_back_color(int pos) const;
COLOR get_fore_color(int pos) const;
TSelect_color_mask(const char * mask_name, const char * para = NULL);
TSelect_color_mask(const TSheet_field & field);
virtual ~TSelect_color_mask();
};
#endif

View File

@ -1,5 +1,7 @@
#include <os_dep.h>
#include <colmask.h>
#include <colors.h>
#include <config.h>
COLOR RGB2COLOR(unsigned char red, unsigned char green, unsigned char blue)
{
@ -31,3 +33,282 @@ COLOR choose_color(COLOR col, WINDOW win)
{
return os_choose_color(col, win);
}
class TColor_row_mask : public TMask
{
public:
virtual void update();
TColor_row_mask();
virtual ~TColor_row_mask() { }
};
///////////////////////////////////////////////////////////
// TColor_row_mask
///////////////////////////////////////////////////////////
TColor_row_mask::TColor_row_mask()
: TMask("bagn007", 1)
{
}
void TColor_row_mask::update()
{
TSheet_field* s = get_sheet();
TSelect_color_mask& m = (TSelect_color_mask&)s->mask();
COLOR back, fore;
m.get_cur_colors(back, fore);
_pixmap = TRUE;
set_pen(COLOR_BLACK);
RCT rct; field(100).get_rect(rct);
set_brush(back);
frame(rct.left, 2*rct.top - rct.bottom - CHARY/2, rct.right, rct.top - CHARY/2, 0);
field(99).get_rect(rct);
set_brush(fore);
frame(rct.left, 2*rct.top - rct.bottom - CHARY/2, rct.right, rct.top - CHARY/2, 0);
_pixmap = FALSE;
}
///////////////////////////////////////////////////////////
// TColor_object_props
///////////////////////////////////////////////////////////
class TColor_object_props : public TObject
{
TString _key;
TString _prompt;
COLOR _back;
COLOR _fore;
COLOR _back_def;
COLOR _fore_def;
protected:
public:
void set_key(const char * key) { _key = key; }
void set_prompt(const char * prompt) { _prompt = prompt; }
void set_back(COLOR back) { _back = back; }
void set_fore(COLOR fore) { _fore = fore; }
void set_back_def(COLOR back) { _back_def = back; }
void set_fore_def(COLOR fore) { _fore_def = fore; }
const TString & get_key() const { return _key; }
const TString & get_prompt() const { return _prompt; }
COLOR get_back() const { return _back; }
COLOR get_fore() const { return _fore; }
COLOR get_back_def() const { return _back_def; }
COLOR get_fore_def() const { return _fore_def; }
TColor_object_props(const char * key, const char * prompt, COLOR back, COLOR fore);
virtual ~TColor_object_props() {}
};
TColor_object_props::TColor_object_props(const char * key, const char * prompt, COLOR back, COLOR fore)
: _key(key), _prompt(prompt), _back(back), _fore(fore), _back_def(back), _fore_def(fore)
{
}
///////////////////////////////////////////////////////////
// TSelect_color_mask
///////////////////////////////////////////////////////////
bool TSelect_color_mask::color_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TMask& m = f.mask();
TSelect_color_mask& cm = (TSelect_color_mask&)m.get_sheet()->mask();
TSheet_field& s = cm.sfield(101);
const int cur = s.selected();
TColor_object_props & p = *cm.row(cur);
const bool use_back = f.dlg() == 100;
COLOR col = use_back ? p.get_back() : p.get_fore();
col = choose_color(col, m.win());
if (col != COLOR_INVALID)
{
if (use_back)
p.set_back(col);
else
p.set_fore(col);
cm._sheet_mask->update();
m.set_focus();
s.set_back_and_fore_color(p.get_back(), p.get_fore(), cur);
s.force_update();
}
}
return TRUE;
}
bool TSelect_color_mask::reset_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE && f.yesno_box("Si desidera azzerare tutti i colori?"))
{
TSelect_color_mask& cm = (TSelect_color_mask&)f.mask();
TSheet_field& s = cm.sfield(101);
const int items = cm.items();
for (int i = 0; i < items; i++)
{
TColor_object_props & p = *cm.row(i);
const COLOR back = p.get_back_def();
const COLOR fore = p.get_fore_def();
p.set_back(back);
p.set_fore(fore);
s.set_back_and_fore_color(back, fore, i);
}
s.force_update();
}
if (k == K_ENTER)
{
TSelect_color_mask& cm = (TSelect_color_mask&)f.mask();
cm.save();
}
return TRUE;
}
int TSelect_color_mask::add_color_def(const char * key, const char * prompt, COLOR back, COLOR fore)
{
TColor_object_props * p = new TColor_object_props(key, prompt, back, fore);
TSheet_field& s = sfield(101);
const int row = _color_defs.add(p);
TToken_string& riga = s.row(-1);
riga << p->get_prompt();
TString tmp(_mask_name) ; tmp << "_" << _paragraph;
TConfig conf(CONFIG_USER, tmp);
tmp = p->get_key();
if (conf.exist(tmp))
p->set_fore(conf.get_color(tmp));
tmp << "_Bg";
if (conf.exist(tmp))
p->set_back(conf.get_color(tmp));
s.set_back_and_fore_color(p->get_back(), p->get_fore(), row);
return row;
}
void TSelect_color_mask::get_color_def(const char * key, COLOR & back, COLOR & fore) const
{
const int pos = key2pos(key);
if (pos >= 0)
{
back = get_back_color(pos);
fore = get_fore_color(pos);
}
else
{
back = NORMAL_BACK_COLOR;
fore = NORMAL_COLOR;
}
}
int TSelect_color_mask::key2pos(const char * key) const
{
const int items = _color_defs.items();
for (int i = 0; i < items; i++)
if (((TColor_object_props &) _color_defs[i]).get_key() == key)
return i;
return -1;
}
COLOR TSelect_color_mask::get_back_color(int pos) const
{
return ((TColor_object_props &) _color_defs[pos]).get_back();
}
COLOR TSelect_color_mask::get_fore_color(int pos) const
{
return ((TColor_object_props &) _color_defs[pos]).get_fore();
}
TMask * TSelect_color_mask::get_mask(int, TMask& m)
{
return ((TSelect_color_mask &) m.get_sheet()->mask())._sheet_mask;
}
void TSelect_color_mask::get_cur_colors(COLOR & back, COLOR & fore) const
{
TSheet_field& s = sfield(101);
int cur = s.selected();
TColor_object_props & p = *row(cur);
back = p.get_back();
fore = p.get_fore();
}
void TSelect_color_mask::init(const char * mask_name, const char * para)
{
set_handler(102, reset_handler);
_sheet_mask = new TColor_row_mask;
_sheet_mask->set_handler(99, color_handler);
_sheet_mask->set_handler(100, color_handler);
TVariable_sheet_field& s = (TVariable_sheet_field&) sfield(101);
s.set_getmask(get_mask);
_mask_name = mask_name;
_mask_name.ext("");
_paragraph = para;
}
TSelect_color_mask::TSelect_color_mask(const TSheet_field & field)
: TVariable_mask("bagn007")
{
TMask & m = field.mask();
TString para("Colors");
const int num = field.sheet_mask().number() - 1;
if (num > 0)
para << num;
init(m.source_file(), para);
}
void TSelect_color_mask::save() const
{
TString tmp(_mask_name) ; tmp << "_" << _paragraph;
TConfig conf(CONFIG_USER, tmp);
const int items = _color_defs.items();
for (int i = 0; i < items; i++)
{
TColor_object_props & p = *row(i);
tmp = p.get_key();
if (p.get_fore() == NORMAL_COLOR)
conf.remove(tmp);
else
conf.set_color(tmp, p.get_fore());
tmp << "_Bg";
if (p.get_back() == NORMAL_BACK_COLOR)
conf.remove(tmp);
else
conf.set_color(tmp, p.get_back());
}
}
TSelect_color_mask::TSelect_color_mask(const char * mask_name, const char * para)
: TVariable_mask("bagn007")
{
init(mask_name, para);
}
TSelect_color_mask::~TSelect_color_mask()
{
delete _sheet_mask;
}

View File

@ -36,4 +36,3 @@ const COLOR COLOR_DKRED = MAKE_COLOR(128,0, 0);
const COLOR COLOR_DKMAGENTA = MAKE_COLOR(128,0,128);
#endif

View File

@ -761,7 +761,7 @@ void TControl::update_tab_cid()
if (is_cont)
{
XI_OBJ* fi = find_operable(_obj->itf, TRUE, TRUE);
XI_OBJ* la = find_operable(_obj->itf, FALSE, TRUE);
XI_OBJ* la = find_operable(_obj->itf, FALSE, TRUE);
int num;
XI_OBJ** child = xi_get_member_list(_obj, &num);
set_tab_cid(child[num-1], fi->cid);

View File

@ -244,7 +244,8 @@ TObject* TExpression::dup() const
const real & TExpression::as_real()
{
if (user_func_dirty() || _dirty) eval();
if (user_func_dirty() || _dirty)
eval();
_dirty = FALSE;
return _val.number();
}
@ -256,7 +257,6 @@ const TString & TExpression::as_string()
return _val.string();
}
bool TExpression::as_bool()
{
return !as_real().is_zero();

Some files were not shown because too many files have changed in this diff Show More