From d2816f518ebe7de3a815da5295b196d1296cb16e Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 23 Oct 2002 14:14:55 +0000 Subject: [PATCH] Patch level : Aga 2.0.349 Files correlati : Quelli delle patch AGA Ricompilazione Demo : [ ] Commento : Riportata la versione AGA 1.7 patch 349. git-svn-id: svn://10.65.10.50/trunk@10557 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ce/ce0400.cpp | 31 +- ce/ce0400a.h | 77 ++-- ce/ce0400a.uml | 849 +++++++++++++++++++++++++++---------------- ce/ce0500.cpp | 10 +- ce/ce2101.cpp | 6 +- ce/celib.cpp | 1 + ce/celib.h | 4 +- cg/cg2100.cpp | 7 +- cg/cg3100b.uml | 54 +-- cg/cg3200.cpp | 50 ++- cg/cglib01.cpp | 38 +- cg/cgprassi.men | 30 +- cg/cgsaldac.cpp | 33 +- cg/cgsaldac.h | 2 +- cm/cm0100.cpp | 312 +++++++++------- cm/cm0100.h | 17 +- cm/cm0100a.frm | 210 +++++------ cm/cm0100a.uml | 3 +- cm/cm0200.cpp | 415 ++++++++++++++------- cm/cm0200.h | 56 +-- cm/cm0200a.frm | 332 +++++++++++------ cm/cm0200a.uml | 3 +- cm/cmprassi.men | 7 + ef/ef0301.cpp | 11 + ef/ef0301.h | 2 + ef/ef0500.cpp | 18 +- ef/rb.frm | 2 +- include/currency.cpp | 24 +- include/currency.h | 7 + include/strings.cpp | 6 +- m770/771230.cpp | 177 ++++++--- m770/776100b.uml | 45 +++ m770/batbca7.uml | 56 ++- mg/mg3300.cpp | 30 +- or/or1100ap.uml | 2 + or/or1100p.cpp | 9 +- or/or1p.url | 20 +- ve/condv.h | 26 ++ ve/f47.trr | 4 +- ve/rcondv.h | 27 ++ ve/ve0100.cpp | 27 +- ve/ve0200g.uml | 7 +- ve/velib.h | 1 + ve/velib02.cpp | 5 + ve/velib03.cpp | 99 ++--- ve/velib06a.cpp | 19 +- 46 files changed, 2042 insertions(+), 1129 deletions(-) create mode 100755 cm/cmprassi.men create mode 100755 ve/condv.h create mode 100755 ve/rcondv.h diff --git a/ce/ce0400.cpp b/ce/ce0400.cpp index a31dbc77f..3080670a5 100755 --- a/ce/ce0400.cpp +++ b/ce/ce0400.cpp @@ -1,38 +1,27 @@ #include -#include -#include "ce0400a.h" -class CE0_App : public TConfig_application +class TCespi_config_app : public TConfig_application { - char _current; protected: virtual bool user_create(); - //virtual bool preprocess_config (TMask& mask, TConfig& config); -public: - CE0_App() : TConfig_application(CONFIG_DITTA) {} - virtual ~CE0_App() {} + +public: + TCespi_config_app(); }; -bool CE0_App::user_create( ) +bool TCespi_config_app::user_create( ) { - const char* param = argv(2); - _current = param ? toupper(*param) : 'P'; //prendi terzo argomento, primo carattere, fallo maiuscolo; (se vuoto mettilo = P) TConfig conf(CONFIG_DITTA, "ce"); // si posiziona sul paragrafo "ce" dei parametri ditta - switch( _current ) - { - case 'C': - conf.set( "EdMask", "ce0400b"); - break; - default: - conf.set( "EdMask", "ce0400a"); - break; - } + conf.set("EdMask", "ce0400a"); // setta la maschera standard di configurazione return TRUE; } +TCespi_config_app::TCespi_config_app() : TConfig_application(CONFIG_DITTA) +{ } + int ce0400 (int argc, char* argv[]) { - CE0_App appc; + TCespi_config_app appc; appc.run(argc, argv, "Parametri Ditta"); return 0; } \ No newline at end of file diff --git a/ce/ce0400a.h b/ce/ce0400a.h index c8458c737..1544af561 100755 --- a/ce/ce0400a.h +++ b/ce/ce0400a.h @@ -12,46 +12,43 @@ #define F_DATACONS 110 #define F_ANNOTUIR 111 +#define F_AMMPROP 112 -#define F_PLUSMINUS 201 +#define F_PLUSMINUS 201 +#define F_TIPOSCRIT 202 -#define F_GR1 211 -#define F_CO1 212 -#define F_SO1 213 -#define F_DE1 214 +#define F_ELIMCESP 204 +#define F_D_ELIMCESP 205 +#define F_RIL_DIFF 206 +#define F_D_RIL_DIFF 207 +#define F_RIL_QUOT 208 +#define F_D_RIL_QUOT 209 +#define F_RIL_PLUS 210 +#define F_D_RIL_PLUS 211 +#define F_RIL_MIN 212 +#define F_D_RIL_MIN 213 -#define F_GR2 221 -#define F_CO2 222 -#define F_SO2 223 -#define F_DE2 224 - -#define F_GR3 231 -#define F_CO3 232 -#define F_SO3 233 -#define F_DE3 234 - -#define F_GR4 241 -#define F_CO4 242 -#define F_SO4 243 -#define F_DE4 244 - -#define F_GR5 251 -#define F_CO5 252 -#define F_SO5 253 -#define F_DE5 254 - -#define F_GR6 261 -#define F_CO6 262 -#define F_SO6 263 -#define F_DE6 264 - -#define F_CA1 280 -#define F_DC1 281 -#define F_CA2 282 -#define F_DC2 283 -#define F_CA3 284 -#define F_DC3 285 -#define F_CA4 286 -#define F_DC4 287 -#define F_CA5 288 -#define F_DC5 289 +#define F_SOPR_PAS_GR 220 +#define F_SOPR_PAS_CO 221 +#define F_SOPR_PAS_SO 222 +#define F_SOPR_PAS_D 223 +#define F_DIFF_QUO_GR 224 +#define F_DIFF_QUO_CO 225 +#define F_DIFF_QUO_SO 226 +#define F_DIFF_QUO_D 227 +#define F_DIFF_FON_GR 228 +#define F_DIFF_FON_CO 229 +#define F_DIFF_FON_SO 230 +#define F_DIFF_FON_D 231 +#define F_PLUSVAL_GR 232 +#define F_PLUSVAL_CO 233 +#define F_PLUSVAL_SO 234 +#define F_PLUSVAL_D 235 +#define F_MINUSVAL_GR 236 +#define F_MINUSVAL_CO 237 +#define F_MINUSVAL_SO 238 +#define F_MINUSVAL_D 239 +#define F_VEND_CESP_GR 240 +#define F_VEND_CESP_CO 241 +#define F_VEND_CESP_SO 242 +#define F_VEND_CESP_D 243 diff --git a/ce/ce0400a.uml b/ce/ce0400a.uml index c4b63e67f..8150c9431 100755 --- a/ce/ce0400a.uml +++ b/ce/ce0400a.uml @@ -129,393 +129,600 @@ BEGIN FIELD CATSU END +BOOLEAN F_AMMPROP +BEGIN + PROMPT 1 9 "Attiva ammortamento proporzionale da entrata in funzione" + FIELD AMMPROP +END + ENDPAGE +/* PAGE "Collegamento Contabilitą" -1 -1 78 10 BOOLEAN F_PLUSMINUS BEGIN - PROMPT 1 1 "Generazione movimenti di plus/minusvalenza" + PROMPT 2 1 "Genera anche movimenti plus/minusvalenza" + MESSAGE TRUE ENABLE,F_RIL_PLUS|ENABLE,F_D_RIL_PLUS|ENABLE,F_RIL_MIN|ENABLE,F_D_RIL_MIN|ENABLE,F_TIPOSCRIT|REQUIRED,F_PLUSVAL_SO|REQUIRED,F_MINUSVAL_SO + MESSAGE FALSE CLEAR,F_RIL_PLUS|CLEAR,F_D_RIL_PLUS|CLEAR,F_RIL_MIN|CLEAR,F_D_RIL_MIN|CLEAR,F_TIPOSCRIT|NORMAL,F_PLUSVAL_SO|NORMAL,F_MINUSVAL_SO + FIELD COPLMN END -GROUP DLG_NULL 78 8 +RADIOBUTTON F_TIPOSCRIT 1 60 BEGIN - PROMPT 1 2 "@bConti di collegamento" + PROMPT 2 2 "Tipo scrittura per vendita cespite " + ITEM "|Su Conto Vendite" + MESSAGE ENABLE,F_VEND_CESP_GR|ENABLE,F_VEND_CESP_CO|ENABLE,F_VEND_CESP_SO|ENABLE,F_VEND_CESP_D + ITEM "X|Su Conto Cespite" + MESSAGE CLEAR,F_VEND_CESP_GR|CLEAR,F_VEND_CESP_CO|CLEAR,F_VEND_CESP_SO|CLEAR,F_VEND_CESP_D + FIELD COR5PM END -NUMBER F_GR1 3 +GROUPBOX DLG_NULL 78 7 BEGIN - PROMPT 2 3 "Eliminazione cespiti " - CHECKTYPE NORMAL + PROMPT 1 6 "@B Cod. Causali" + FLAGS "R" END -NUMBER F_CO1 3 +STRING F_ELIMCESP 3 BEGIN - PROMPT 30 3 "" - CHECKTYPE NORMAL -END - -NUMBER F_SO1 6 -BEGIN - PROMPT 35 3 "" - USE LF_PCON SELECT SOTTOCONTO!="" - INPUT GRUPPO F_GR1 - INPUT CONTO F_CO1 - INPUT SOTTOCONTO F_SO1 - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GR1 GRUPPO - OUTPUT F_CO1 CONTO - OUTPUT F_SO1 SOTTOCONTO - OUTPUT F_DE1 DESCR - CHECKTYPE NORMAL -END - -STRING F_DE1 50 30 -BEGIN - PROMPT 45 3 "" - USE LF_PCON KEY 2 SELECT SOTTOCONTO!="" - INPUT DESCR F_DE1 - DISPLAY "Descrizione@50" DESCR - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - COPY OUTPUT F_SO1 -END - -NUMBER F_GR2 3 -BEGIN - PROMPT 2 4 "Differenze su quote " - CHECKTYPE NORMAL -END - -NUMBER F_CO2 3 -BEGIN - PROMPT 30 4 "" - CHECKTYPE NORMAL -END - -NUMBER F_SO2 6 -BEGIN - PROMPT 35 4 "" - USE LF_PCON SELECT SOTTOCONTO!="" - INPUT GRUPPO F_GR2 - INPUT CONTO F_CO2 - INPUT SOTTOCONTO F_SO2 - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GR2 GRUPPO - OUTPUT F_CO2 CONTO - OUTPUT F_SO2 SOTTOCONTO - OUTPUT F_DE2 DESCR - CHECKTYPE NORMAL -END - -STRING F_DE2 50 30 -BEGIN - PROMPT 45 4 "" - USE LF_PCON KEY 2 SELECT SOTTOCONTO!="" - INPUT DESCR F_DE2 - DISPLAY "Descrizione@50" DESCR - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - COPY OUTPUT F_SO2 -END - -NUMBER F_GR3 3 -BEGIN - PROMPT 2 5 "Differenze su fondi " - CHECKTYPE NORMAL -END - -NUMBER F_CO3 3 -BEGIN - PROMPT 30 5 "" - CHECKTYPE NORMAL -END - -NUMBER F_SO3 6 -BEGIN - PROMPT 35 5 "" - USE LF_PCON SELECT SOTTOCONTO!="" - INPUT GRUPPO F_GR3 - INPUT CONTO F_CO3 - INPUT SOTTOCONTO F_SO3 - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GR3 GRUPPO - OUTPUT F_CO3 CONTO - OUTPUT F_SO3 SOTTOCONTO - OUTPUT F_DE3 DESCR - CHECKTYPE NORMAL -END - -STRING F_DE3 50 30 -BEGIN - PROMPT 45 5 "" - USE LF_PCON KEY 2 SELECT SOTTOCONTO!="" - INPUT DESCR F_DE3 - DISPLAY "Descrizione@50" DESCR - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - COPY OUTPUT F_SO3 -END - -NUMBER F_GR4 3 -BEGIN - PROMPT 2 6 "Differenze su plusval. " - CHECKTYPE NORMAL -END - -NUMBER F_CO4 3 -BEGIN - PROMPT 30 6 "" - CHECKTYPE NORMAL -END - -NUMBER F_SO4 6 -BEGIN - PROMPT 35 6 "" - USE LF_PCON SELECT SOTTOCONTO!="" - INPUT GRUPPO F_GR4 - INPUT CONTO F_CO4 - INPUT SOTTOCONTO F_SO4 - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GR4 GRUPPO - OUTPUT F_CO4 CONTO - OUTPUT F_SO4 SOTTOCONTO - OUTPUT F_DE4 DESCR - CHECKTYPE NORMAL -END - -STRING F_DE4 50 30 -BEGIN - PROMPT 45 6 "" - USE LF_PCON KEY 2 SELECT SOTTOCONTO!="" - INPUT DESCR F_DE4 - DISPLAY "Descrizione@50" DESCR - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - COPY OUTPUT F_SO4 -END - -NUMBER F_GR5 3 -BEGIN - PROMPT 2 7 "Differenze su minusval." - CHECKTYPE NORMAL -END - -NUMBER F_CO5 3 -BEGIN - PROMPT 30 7 "" - CHECKTYPE NORMAL -END - -NUMBER F_SO5 6 -BEGIN - PROMPT 35 7 "" - USE LF_PCON SELECT SOTTOCONTO!="" - INPUT GRUPPO F_GR5 - INPUT CONTO F_CO5 - INPUT SOTTOCONTO F_SO5 - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GR5 GRUPPO - OUTPUT F_CO5 CONTO - OUTPUT F_SO5 SOTTOCONTO - OUTPUT F_DE5 DESCR - CHECKTYPE NORMAL -END - -STRING F_DE5 50 30 -BEGIN - PROMPT 45 7 "" - USE LF_PCON KEY 2 SELECT SOTTOCONTO!="" - INPUT DESCR F_DE5 - DISPLAY "Descrizione@50" DESCR - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - COPY OUTPUT F_SO5 -END - -NUMBER F_GR6 3 -BEGIN - PROMPT 2 8 "Vendita cespiti " - CHECKTYPE NORMAL -END - -NUMBER F_CO6 3 -BEGIN - PROMPT 30 8 "" - CHECKTYPE NORMAL -END - -NUMBER F_SO6 6 -BEGIN - PROMPT 35 8 "" - USE LF_PCON SELECT SOTTOCONTO!="" - INPUT GRUPPO F_GR6 - INPUT CONTO F_CO6 - INPUT SOTTOCONTO F_SO6 - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GR6 GRUPPO - OUTPUT F_CO6 CONTO - OUTPUT F_SO6 SOTTOCONTO - OUTPUT F_DE6 DESCR - CHECKTYPE NORMAL -END - -STRING F_DE6 50 30 -BEGIN - PROMPT 45 8 "" - USE LF_PCON KEY 2 SELECT SOTTOCONTO!="" - INPUT DESCR F_DE6 - DISPLAY "Descrizione@50" DESCR - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - COPY OUTPUT F_SO6 -END - -GROUP DLG_NULL 78 7 -BEGIN - PROMPT 1 10 "@bCausali di collegamento" -END - -STRING F_CA1 3 -BEGIN - PROMPT 2 11 "Eliminazione cespiti " - USE LF_CAUSALI - INPUT CODCAUS F_CA1 + PROMPT 2 7 "Eliminazione cespite " + FIELD COAUEL + USE LF_CAUSALI SELECT ((SOSPESO=="")&&(TIPODOC=="")&&(COLLCESP=="")) + INPUT CODCAUS F_ELIMCESP DISPLAY "Codice" CODCAUS DISPLAY "Descrizione@50" DESCR - OUTPUT F_CA1 CODCAUS - OUTPUT F_DC1 DESCR - CHECKTYPE NORMAL + OUTPUT F_ELIMCESP CODCAUS + OUTPUT F_D_ELIMCESP DESCR + ADD RUN CG0 -4 + CHECKTYPE REQUIRED END -STRING F_DC1 50 30 +STRING F_D_ELIMCESP 50 35 BEGIN - PROMPT 45 11 "" + PROMPT 40 7 "" USE LF_CAUSALI KEY 2 - INPUT DESCR F_DC1 - DISPLAY "Descrizione@60" DESCR + INPUT DESCR F_D_ELIMCESP + DISPLAY "Descrizione@50" DESCR DISPLAY "Codice" CODCAUS - COPY OUTPUT F_CA1 - CHECKTYPE NORMAL + COPY OUTPUT F_ELIMCESP + ADD RUN CG0 -4 + CHECKTYPE REQUIRED END -STRING F_CA2 3 +STRING F_RIL_DIFF 3 BEGIN - PROMPT 2 12 "Rilevazione differenze " - USE LF_CAUSALI - INPUT CODCAUS F_CA2 + PROMPT 2 8 "Rilevazione differenze " + FIELD COAUDI + USE LF_CAUSALI SELECT ((SOSPESO=="")&&(TIPODOC=="")&&(COLLCESP=="")) + INPUT CODCAUS F_RIL_DIFF DISPLAY "Codice" CODCAUS DISPLAY "Descrizione@50" DESCR - OUTPUT F_CA2 CODCAUS - OUTPUT F_DC2 DESCR - CHECKTYPE NORMAL + OUTPUT F_RIL_DIFF CODCAUS + OUTPUT F_D_RIL_DIFF DESCR + ADD RUN CG0 -4 + CHECKTYPE REQUIRED END -STRING F_DC2 50 30 +STRING F_D_RIL_DIFF 50 35 BEGIN - PROMPT 45 12 "" + PROMPT 40 8 "" USE LF_CAUSALI KEY 2 - INPUT DESCR F_DC2 - DISPLAY "Descrizione@60" DESCR + INPUT DESCR F_D_RIL_DIFF + DISPLAY "Descrizione@50" DESCR DISPLAY "Codice" CODCAUS - COPY OUTPUT F_CA2 - CHECKTYPE NORMAL + COPY OUTPUT F_RIL_DIFF + ADD RUN CG0 -4 + CHECKTYPE REQUIRED END -STRING F_CA3 3 +STRING F_RIL_QUOT 3 BEGIN - PROMPT 2 13 "Rilevazione quote ammortamento " - USE LF_CAUSALI - INPUT CODCAUS F_CA3 + PROMPT 2 9 "Rilevazione quote ammortamento " + FIELD COAUQU + USE LF_CAUSALI SELECT ((SOSPESO=="")&&(TIPODOC=="")&&(COLLCESP=="")) + INPUT CODCAUS F_RIL_QUOT DISPLAY "Codice" CODCAUS DISPLAY "Descrizione@50" DESCR - OUTPUT F_CA3 CODCAUS - OUTPUT F_DC3 DESCR - CHECKTYPE NORMAL + OUTPUT F_RIL_QUOT CODCAUS + OUTPUT F_D_RIL_QUOT DESCR + ADD RUN CG0 -4 + CHECKTYPE REQUIRED END -STRING F_DC3 50 30 +STRING F_D_RIL_QUOT 50 35 BEGIN - PROMPT 45 13 "" + PROMPT 40 9 "" USE LF_CAUSALI KEY 2 - INPUT DESCR F_DC3 - DISPLAY "Descrizione@60" DESCR + INPUT DESCR F_D_RIL_QUOT + DISPLAY "Descrizione@50" DESCR DISPLAY "Codice" CODCAUS - COPY OUTPUT F_CA3 - CHECKTYPE NORMAL + COPY OUTPUT F_RIL_QUOT + ADD RUN CG0 -4 + CHECKTYPE REQUIRED END -STRING F_CA4 3 +STRING F_RIL_PLUS 3 BEGIN - PROMPT 2 14 "Rilevazione quote plusvalenze " - USE LF_CAUSALI - INPUT CODCAUS F_CA4 + PROMPT 2 10 "Rilevazione plusvalenze " + FIELD COAUPL + USE LF_CAUSALI SELECT ((SOSPESO=="")&&(TIPODOC=="")&&(COLLCESP=="")) + INPUT CODCAUS F_RIL_PLUS DISPLAY "Codice" CODCAUS DISPLAY "Descrizione@50" DESCR - OUTPUT F_CA4 CODCAUS - OUTPUT F_DC4 DESCR - CHECKTYPE NORMAL + OUTPUT F_RIL_PLUS CODCAUS + OUTPUT F_D_RIL_PLUS DESCR + ADD RUN CG0 -4 + CHECKTYPE REQUIRED END -STRING F_DC4 50 30 +STRING F_D_RIL_PLUS 50 35 BEGIN - PROMPT 45 14 "" + PROMPT 40 10 "" USE LF_CAUSALI KEY 2 - INPUT DESCR F_DC4 - DISPLAY "Descrizione@60" DESCR + INPUT DESCR F_D_RIL_PLUS + DISPLAY "Descrizione@50" DESCR DISPLAY "Codice" CODCAUS - COPY OUTPUT F_CA4 - CHECKTYPE NORMAL + COPY OUTPUT F_RIL_PLUS + ADD RUN CG0 -4 + CHECKTYPE REQUIRED END -STRING F_CA5 3 +STRING F_RIL_MIN 3 BEGIN - PROMPT 2 15 "Rilevazione quote minusvalenze " - USE LF_CAUSALI - INPUT CODCAUS F_CA5 + PROMPT 2 11 "Rilevazione minusvalenze " + FIELD COAUM + USE LF_CAUSALI SELECT ((SOSPESO=="")&&(TIPODOC=="")&&(COLLCESP=="")) + INPUT CODCAUS F_RIL_MIN DISPLAY "Codice" CODCAUS DISPLAY "Descrizione@50" DESCR - OUTPUT F_CA5 CODCAUS - OUTPUT F_DC5 DESCR - CHECKTYPE NORMAL + OUTPUT F_RIL_MIN CODCAUS + OUTPUT F_D_RIL_MIN DESCR + ADD RUN CG0 -4 + CHECKTYPE REQUIRED END -STRING F_DC5 50 30 +STRING F_D_RIL_MIN 50 35 BEGIN - PROMPT 45 15 "" + PROMPT 40 11 "" USE LF_CAUSALI KEY 2 - INPUT DESCR F_DC5 - DISPLAY "Descrizione@60" DESCR + INPUT DESCR F_D_RIL_MIN + DISPLAY "Descrizione@50" DESCR DISPLAY "Codice" CODCAUS - COPY OUTPUT F_CA5 + COPY OUTPUT F_RIL_MIN + ADD RUN CG0 -4 + CHECKTYPE REQUIRED +END + +GROUPBOX DLG_NULL 78 8 +BEGIN + PROMPT 1 14 "@B Gr. Co. Sottoc. Descrizione" + FLAGS "R" +END + +NUMBER F_SOPR_PAS_GR 3 +BEGIN + PROMPT 2 15 "Sopravvenienze passive " + FIELD GRCOTELI + FLAGS "R" + USE LF_PCON KEY 1 SELECT CONTO="" + INPUT GRUPPO F_SOPR_PAS_GR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_SOPR_PAS_GR GRUPPO + ADD RUN CG0 -0 + CHECKTYPE REQUIRED +END + +NUMBER F_SOPR_PAS_CO 3 +BEGIN + PROMPT 31 15 "" + FIELD COCOTELI + FLAGS "R" + USE LF_PCON KEY 1 SELECT ((CONTO!="")&&(SOTTOCONTO="")) + COPY INPUT F_SOPR_PAS_GR + INPUT CONTO F_SOPR_PAS_CO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_SOPR_PAS_GR GRUPPO + OUTPUT F_SOPR_PAS_CO CONTO + ADD RUN CG0 -0 + CHECKTYPE REQUIRED + VALIDATE REQIF_FUNC 1 F_SOPR_PAS_SO + WARNING "Manca il conto" +END + +NUMBER F_SOPR_PAS_SO 6 +BEGIN + PROMPT 37 15 "" + FIELD SOCOTELI + FLAGS "R" + USE LF_PCON KEY 1 SELECT SOTTOCONTO!="" + COPY INPUT F_SOPR_PAS_CO + INPUT SOTTOCONTO F_SOPR_PAS_SO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Sosp." SOSPESO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_SOPR_PAS_SO SOTTOCONTO + OUTPUT F_SOPR_PAS_GR GRUPPO + OUTPUT F_SOPR_PAS_CO CONTO + OUTPUT F_SOPR_PAS_D DESCR + ADD RUN CG0 -0 + CHECKTYPE REQUIRED +END + +STRING F_SOPR_PAS_D 50 29 +BEGIN + PROMPT 46 15 "" + USE LF_PCON KEY 2 + INPUT DESCR F_SOPR_PAS_D + DISPLAY "Descrizione@50" DESCR + DISPLAY "Sosp." SOSPESO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + COPY OUTPUT F_SOPR_PAS_SO + ADD RUN CG0 -0 + CHECKTYPE REQUIRED + WARNING "Manca la descrizione" +END + +NUMBER F_DIFF_QUO_GR 3 +BEGIN + PROMPT 2 16 "Differenze su quote " + FIELD GRCOTDIQ + FLAGS "R" + USE LF_PCON KEY 1 SELECT CONTO="" + INPUT GRUPPO F_DIFF_QUO_GR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_DIFF_QUO_GR GRUPPO + ADD RUN CG0 -0 + CHECKTYPE REQUIRED +END + +NUMBER F_DIFF_QUO_CO 3 +BEGIN + PROMPT 31 16 "" + FIELD COCOTDIQ + FLAGS "R" + USE LF_PCON KEY 1 SELECT ((CONTO!="")&&(SOTTOCONTO="")) + COPY INPUT F_DIFF_QUO_GR + INPUT CONTO F_DIFF_QUO_CO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_DIFF_QUO_GR GRUPPO + OUTPUT F_DIFF_QUO_CO CONTO + ADD RUN CG0 -0 + CHECKTYPE REQUIRED + VALIDATE REQIF_FUNC 1 F_DIFF_QUO_SO + WARNING "Manca il conto" +END + +NUMBER F_DIFF_QUO_SO 6 +BEGIN + PROMPT 37 16 "" + FIELD SOCOTDIQ + FLAGS "R" + USE LF_PCON KEY 1 SELECT SOTTOCONTO!="" + COPY INPUT F_DIFF_QUO_CO + INPUT SOTTOCONTO F_DIFF_QUO_SO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Sosp." SOSPESO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_DIFF_QUO_SO SOTTOCONTO + OUTPUT F_DIFF_QUO_GR GRUPPO + OUTPUT F_DIFF_QUO_CO CONTO + OUTPUT F_DIFF_QUO_D DESCR + ADD RUN CG0 -0 + CHECKTYPE REQUIRED +END + +STRING F_DIFF_QUO_D 50 29 +BEGIN + PROMPT 46 16 "" + USE LF_PCON KEY 2 + INPUT DESCR F_DIFF_QUO_D + DISPLAY "Descrizione@50" DESCR + DISPLAY "Sosp." SOSPESO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + COPY OUTPUT F_DIFF_QUO_SO + ADD RUN CG0 -0 + CHECKTYPE REQUIRED + WARNING "Manca la descrizione" +END + +NUMBER F_DIFF_FON_GR 3 +BEGIN + PROMPT 2 17 "Differenze su fondi " + FIELD GRCOTDIF + FLAGS "R" + USE LF_PCON KEY 1 SELECT CONTO="" + INPUT GRUPPO F_DIFF_FON_GR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_DIFF_FON_GR GRUPPO + ADD RUN CG0 -0 + CHECKTYPE REQUIRED +END + +NUMBER F_DIFF_FON_CO 3 +BEGIN + PROMPT 31 17 "" + FIELD COCOTDIF + FLAGS "R" + USE LF_PCON KEY 1 SELECT ((CONTO!="")&&(SOTTOCONTO="")) + COPY INPUT F_DIFF_FON_GR + INPUT CONTO F_DIFF_FON_CO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_DIFF_FON_GR GRUPPO + OUTPUT F_DIFF_FON_CO CONTO + ADD RUN CG0 -0 + CHECKTYPE REQUIRED + VALIDATE REQIF_FUNC 1 F_DIFF_FON_SO + WARNING "Manca il conto" +END + +NUMBER F_DIFF_FON_SO 6 +BEGIN + PROMPT 37 17 "" + FIELD SOCOTDIF + FLAGS "R" + USE LF_PCON KEY 1 SELECT SOTTOCONTO!="" + COPY INPUT F_DIFF_FON_CO + INPUT SOTTOCONTO F_DIFF_FON_SO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Sosp." SOSPESO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_DIFF_FON_SO SOTTOCONTO + OUTPUT F_DIFF_FON_GR GRUPPO + OUTPUT F_DIFF_FON_CO CONTO + OUTPUT F_DIFF_FON_D DESCR + ADD RUN CG0 -0 + CHECKTYPE REQUIRED +END + +STRING F_DIFF_FON_D 50 29 +BEGIN + PROMPT 46 17 "" + USE LF_PCON KEY 2 + INPUT DESCR F_DIFF_FON_D + DISPLAY "Descrizione@50" DESCR + DISPLAY "Sosp." SOSPESO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + COPY OUTPUT F_DIFF_FON_SO + ADD RUN CG0 -0 + CHECKTYPE REQUIRED + WARNING "Manca la descrizione" +END + +NUMBER F_PLUSVAL_GR 3 +BEGIN + PROMPT 2 18 "Plusvalenze " + FIELD GRCOTPLU + FLAGS "R" + USE LF_PCON KEY 1 SELECT CONTO="" + INPUT GRUPPO F_PLUSVAL_GR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_PLUSVAL_GR GRUPPO + ADD RUN CG0 -0 CHECKTYPE NORMAL END +NUMBER F_PLUSVAL_CO 3 +BEGIN + PROMPT 31 18 "" + FIELD COCOTPLU + FLAGS "R" + USE LF_PCON KEY 1 SELECT ((CONTO!="")&&(SOTTOCONTO="")&&(INDBIL==4)) + COPY INPUT F_PLUSVAL_GR + INPUT CONTO F_PLUSVAL_CO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_PLUSVAL_GR GRUPPO + OUTPUT F_PLUSVAL_CO CONTO + ADD RUN CG0 -0 + CHECKTYPE NORMAL + VALIDATE REQIF_FUNC 1 F_PLUSVAL_SO + WARNING "Manca il conto" +END + +NUMBER F_PLUSVAL_SO 6 +BEGIN + PROMPT 37 18 "" + FIELD SOCOTPLU + FLAGS "R" + USE LF_PCON KEY 1 SELECT SOTTOCONTO!="" + INPUT GRUPPO F_PLUSVAL_GR SELECT + INPUT CONTO F_PLUSVAL_CO SELECT + INPUT SOTTOCONTO F_PLUSVAL_SO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Sosp." SOSPESO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_PLUSVAL_SO SOTTOCONTO + OUTPUT F_PLUSVAL_GR GRUPPO + OUTPUT F_PLUSVAL_CO CONTO + OUTPUT F_PLUSVAL_D DESCR + ADD RUN CG0 -0 + CHECKTYPE NORMAL +END + +STRING F_PLUSVAL_D 50 29 +BEGIN + PROMPT 46 18 "" + USE LF_PCON KEY 2 + INPUT DESCR F_PLUSVAL_D + DISPLAY "Descrizione@50" DESCR + DISPLAY "Sosp." SOSPESO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + COPY OUTPUT F_PLUSVAL_SO + ADD RUN CG0 -0 + CHECKTYPE NORMAL + WARNING "Manca la descrizione" +END + +NUMBER F_MINUSVAL_GR 3 +BEGIN + PROMPT 2 19 "Minusvalenze " + FIELD GRCOTMIN + FLAGS "R" + USE LF_PCON KEY 1 SELECT CONTO="" + INPUT GRUPPO F_MINUSVAL_GR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_MINUSVAL_GR GRUPPO + ADD RUN CG0 -0 + CHECKTYPE NORMAL +END + +NUMBER F_MINUSVAL_CO 3 +BEGIN + PROMPT 31 19 "" + FIELD COCOTMIN + FLAGS "R" + USE LF_PCON KEY 1 SELECT ((CONTO!="")&&(SOTTOCONTO="")&&(INDBIL==3)) + COPY INPUT F_MINUSVAL_GR + INPUT CONTO F_MINUSVAL_CO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_MINUSVAL_GR GRUPPO + OUTPUT F_MINUSVAL_CO CONTO + ADD RUN CG0 -0 + CHECKTYPE NORMAL + VALIDATE REQIF_FUNC 1 F_MINUSVAL_SO + WARNING "Manca il conto" +END + +NUMBER F_MINUSVAL_SO 6 +BEGIN + PROMPT 37 19 "" + FIELD SOCOTMIN + FLAGS "R" + USE LF_PCON KEY 1 SELECT SOTTOCONTO!="" + INPUT GRUPPO F_MINUSVAL_GR SELECT + INPUT CONTO F_MINUSVAL_CO SELECT + INPUT SOTTOCONTO F_MINUSVAL_SO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Sosp." SOSPESO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_MINUSVAL_SO SOTTOCONTO + OUTPUT F_MINUSVAL_GR GRUPPO + OUTPUT F_MINUSVAL_CO CONTO + OUTPUT F_MINUSVAL_D DESCR + ADD RUN CG0 -0 + CHECKTYPE NORMAL +END + +STRING F_MINUSVAL_D 50 29 +BEGIN + PROMPT 46 19 "" + USE LF_PCON KEY 2 + INPUT DESCR F_MINUSVAL_D + DISPLAY "Descrizione@50" DESCR + DISPLAY "Sosp." SOSPESO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + COPY OUTPUT F_MINUSVAL_SO + ADD RUN CG0 -0 + CHECKTYPE NORMAL + WARNING "Manca la descrizione" +END + +NUMBER F_VEND_CESP_GR 3 +BEGIN + PROMPT 2 20 "Vendite cespiti " + FIELD GRCOTVEN + FLAGS "R" + USE LF_PCON KEY 1 SELECT CONTO="" + INPUT GRUPPO F_VEND_CESP_GR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_VEND_CESP_GR GRUPPO + ADD RUN CG0 -0 + CHECKTYPE REQUIRED +END + +NUMBER F_VEND_CESP_CO 3 +BEGIN + PROMPT 31 20 "" + FIELD COCOTVEN + FLAGS "R" + USE LF_PCON KEY 1 SELECT ((CONTO!="")&&(SOTTOCONTO="")) + COPY INPUT F_VEND_CESP_GR + INPUT CONTO F_VEND_CESP_CO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_VEND_CESP_GR GRUPPO + OUTPUT F_VEND_CESP_CO CONTO + ADD RUN CG0 -0 + CHECKTYPE REQUIRED + VALIDATE REQIF_FUNC 1 F_VEND_CESP_SO + WARNING "Manca il conto" +END + +NUMBER F_VEND_CESP_SO 6 +BEGIN + PROMPT 37 20 "" + FIELD SOCOTVEN + FLAGS "R" + USE LF_PCON SELECT SOTTOCONTO!="" + COPY INPUT F_VEND_CESP_CO + INPUT SOTTOCONTO F_VEND_CESP_SO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + DISPLAY "Sospeso" SOSPESO + OUTPUT F_VEND_CESP_SO SOTTOCONTO + OUTPUT F_VEND_CESP_GR GRUPPO + OUTPUT F_VEND_CESP_CO CONTO + OUTPUT F_VEND_CESP_D DESCR + ADD RUN CG0 -0 + CHECKTYPE REQUIRED +END + +STRING F_VEND_CESP_D 50 29 +BEGIN + PROMPT 46 20 "" + USE LF_PCON KEY 2 + INPUT DESCR F_VEND_CESP_D + DISPLAY "Descrizione@50" DESCR + DISPLAY "Sosp." SOSPESO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + COPY OUTPUT F_VEND_CESP_SO + ADD RUN CG0 -0 + CHECKTYPE REQUIRED + WARNING "Manca la descrizione" +END ENDPAGE +*/ ENDMASK diff --git a/ce/ce0500.cpp b/ce/ce0500.cpp index 3547464ef..e0c9d2b04 100755 --- a/ce/ce0500.cpp +++ b/ce/ce0500.cpp @@ -344,15 +344,11 @@ bool TEdit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) if (fine.ok() && dtfunz > fine) return error_box("La data č successiva alla fine validitą della categoria"); if (dtfunz.year() >= dc.anno_tuir()) - { set(F_TUIR, "X"); - set(F_AMMPROP, "X"); - } + else - { reset(F_TUIR); - reset(F_AMMPROP); - } + } } break; @@ -748,6 +744,7 @@ void TAnacespi::init_mask(TMask& m) m.show(F_LEASING, mat_only); m.show(F_ANNIRIC, mat_only); m.show(F_USATO, mat_only); + m.show(F_AMMPROP, dc.ammortamento_proporzionale()); } void TAnacespi::init_insert_mode(TMask& m) @@ -959,4 +956,3 @@ int ce0500(int argc, char* argv[]) a.run(argc, argv, "Anagrafica cespiti"); return 0; } - diff --git a/ce/ce2101.cpp b/ce/ce2101.cpp index e3f341e78..8a419e024 100755 --- a/ce/ce2101.cpp +++ b/ce/ce2101.cpp @@ -323,7 +323,7 @@ real TCespite::val_amm() const _salpro.get_real(SALCE_RIV75)+_salpro.get_real(SALCE_RIV83); if (_tipo_sit == 1 || get_bool(CESPI_LEASING)) - val += _salpro.get_real(SALCE_RIVGF); + val += _salpro.get_real(SALCE_RIVGF); else if (_tipo_sit == 2 && !get_bool(CESPI_LEASING)) val += _salpro.get_real(SALCE_RIVGC); @@ -1624,7 +1624,7 @@ void TCespite::calc_amm_residui(bool is_valid) } else { - if (get_bool(CESPI_AMMPROP)) + if (cce.ammortamento_proporzionale() && get_bool(CESPI_AMMPROP)) { const real durata_esercizio = fines - inies + 1; const real giorni_possesso = fines - dtfunz + 1; @@ -1820,7 +1820,7 @@ bool TCespite::calc_amm(int tipo_sit, const TDate& data_limite, bool recalc_spe_ log("* Inizio calcolo situazione %d cespite %s", tipo_sit, (const char*)idcespite); #ifdef DBG - if (tipo_sit == 1 && atol(idcespite) == 10L) + if (tipo_sit == 1 && atol(idcespite) == 146L) { tipo_sit = 1; // Put your breakpoint here } diff --git a/ce/celib.cpp b/ce/celib.cpp index 5f2fffb18..10a06bb61 100755 --- a/ce/celib.cpp +++ b/ce/celib.cpp @@ -33,6 +33,7 @@ void TDitta_cespiti::load_default() _anno_tuir = dit.get_int("CATSU"); if (_anno_tuir == 0 || _anno_tuir == 1) // Demenzialmente puņ essere memorizzato come 0 o 1 _anno_tuir += 1988; + _amm_prop = dit.get_bool("AMMPROP"); load_records(); } diff --git a/ce/celib.h b/ce/celib.h index 8acc147df..25fa1f025 100755 --- a/ce/celib.h +++ b/ce/celib.h @@ -20,7 +20,8 @@ class TDitta_cespiti TString4 _gruppo, _specie; TDate _data_primi_ricavi; TRectype _cce, _ccb; - + bool _amm_prop; + protected: void load_default(); void update_when_needed(); @@ -44,6 +45,7 @@ public: real coefficiente_durata_esercizio() const; int anno_tuir() const { return _anno_tuir; } bool bollato_stampato() const; + bool ammortamento_proporzionale() const { return _amm_prop; } void init_mask(TMask& m); void arrotonda(real &n) const; diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index 99a7852ca..5a9506a4b 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -1509,6 +1509,9 @@ void TPrimanota_application::ini2mask(TConfig& ini, TMask& msk, bool query) TBill c; ini2bill(ini, c, FALSE); if (c.gruppo() > 0) c.add_to(riga, 4, 0x7); // Conto 105-110 + + add_not_empty(riga, 10, ini, RMI_CODCMS); // Commessa 111 + add_not_empty(riga, 11, ini, RMI_FASCMS); // Fase 112 iva_notify(is, i, K_ENTER); } @@ -1558,8 +1561,8 @@ void TPrimanota_application::ini2mask(TConfig& ini, TMask& msk, bool query) if (conto.gruppo() > 0) conto.add_to(riga, 9, 0x3); // Contropartita 110-114 - riga.add(ini.get(RMV_CODCMS), 14); // Commessa 115 - riga.add(ini.get(RMV_FASCMS), 15); // Fase 116 + add_not_empty(riga, 14, ini, RMV_CODCMS); // Commessa 115 + add_not_empty(riga, 15, ini, RMV_FASCMS); // Fase 116 riga.add(tipo, 16); // Tipo di riga 116 } diff --git a/cg/cg3100b.uml b/cg/cg3100b.uml index aac16e14e..1245187da 100755 --- a/cg/cg3100b.uml +++ b/cg/cg3100b.uml @@ -233,67 +233,73 @@ BEGIN PROMPT 2 13 "Non stampare i separatori delle migliaia" END -GROUPBOX DLG_NULL 71 4 +GROUPBOX DLG_NULL 71 5 BEGIN - PROMPT 2 18 "@bCentri di costo" + PROMPT 2 18 "@bCDC / Commesse" GROUP 4 END -BOOLEAN F_CDC_ONLY +BOOLEAN F_PRINTCDC BEGIN - PROMPT 22 18 "Stampa solo le righe relative ai centri di costo" + PROMPT 22 18 "Stampa CDC/Commessa e fase relativa ad ogni riga" + GROUP 4 5 END STRING F_DACDC 20 BEGIN - PROMPT 3 19 "Da " + PROMPT 3 19 "Da CDC/Commessa " FLAGS "UZ" USE CMS INPUT CODTAB F_DACDC DISPLAY "Codice@20" CODTAB DISPLAY "Descrizione@70" S0 OUTPUT F_DACDC CODTAB - OUTPUT F_DACDC_DES S0 CHECKTYPE SEARCH - GROUP 4 + GROUP 4 5 END -STRING F_DACDC_DES 70 39 +STRING F_DAFASE 10 BEGIN - PROMPT 30 19 "" - USE CMS KEY 2 - INPUT S0 F_DACDC_DES - DISPLAY "Descrizione@70" S0 + PROMPT 50 19 "Da fase " + FLAGS "UZ" + USE FSC + INPUT CODTAB F_DAFASE DISPLAY "Codice@20" CODTAB - COPY OUTPUT F_DACDC + DISPLAY "Descrizione@70" S0 + OUTPUT F_DAFASE CODTAB CHECKTYPE SEARCH - GROUP 4 + GROUP 4 5 END STRING F_ACDC 20 BEGIN - PROMPT 3 20 "A " + PROMPT 3 20 "A CDC/Commessa " FLAGS "UZ" COPY USE F_DACDC INPUT CODTAB F_ACDC COPY DISPLAY F_DACDC OUTPUT F_ACDC CODTAB - OUTPUT F_ACDC_DES S0 CHECKTYPE SEARCH - GROUP 4 + GROUP 4 5 END -STRING F_ACDC_DES 70 39 +STRING F_AFASE 10 BEGIN - PROMPT 30 20 "" - COPY USE F_DACDC_DES - INPUT S0 F_ACDC_DES - COPY DISPLAY F_DACDC_DES - COPY OUTPUT F_ACDC + PROMPT 50 20 "A fase " + FLAGS "UZ" + COPY USE F_DAFASE + INPUT CODTAB F_AFASE + COPY DISPLAY F_DAFASE + OUTPUT F_AFASE CODTAB CHECKTYPE SEARCH - GROUP 4 + GROUP 4 5 END +BOOLEAN F_CDC_ONLY +BEGIN + PROMPT 3 21 "Stampa solo le righe relative a CDC/Commesse " + GROUP 4 5 +END ENDPAGE ENDMASK diff --git a/cg/cg3200.cpp b/cg/cg3200.cpp index d789aebaf..02b392195 100755 --- a/cg/cg3200.cpp +++ b/cg/cg3200.cpp @@ -66,6 +66,7 @@ TFieldtypes TMastrini_record::type(const char* fieldname) const class TMastrini_application : public TPrintapp { + static bool anno_hnd(TMask_field& f, KEY k); static bool data_inizio (TMask_field& f, KEY k); static bool data_fine (TMask_field& f, KEY k); static bool gruppo_hnd (TMask_field& f, KEY k); @@ -162,6 +163,7 @@ protected: bool sheet2mask(); const char* real2str(const real& r) const; + bool show_cdc(); public: //TDate _inizioEs,_fineEs; @@ -273,6 +275,26 @@ void TMastrini_application::process_link(int id, const char* txt) pn.run(); } +// Visualizzo le commesse se necessario +bool TMastrini_application::show_cdc() +{ + const bool okp = has_module(CMAUT); // Mostra campo "Stampa commesse" + bool okg = okp; // Mostra campi del gruppo delle commesse + if (okg) + { + okg = _msk->get_int(F_ANNO) != 0; // Controllo anno + if (okg) + { // Controllo se conto normale + const char ti = _msk->get(F_TIPOCF_INI)[0]; + const char tf = _msk->get(F_TIPOCF_FINE)[0]; + okg = ti <= ' ' && tf <= ' '; + } + } + _msk->show(-7, okg); + _msk->show(F_PRINTCDC, okp); + return okg; +} + bool TMastrini_application::cdc_handler(TMask_field& f, KEY k) { if (k == K_TAB) @@ -483,15 +505,7 @@ bool TMastrini_application::gruppo_hnd (TMask_field& f, KEY k) bool TMastrini_application::tipocf_hnd (TMask_field& f, KEY k) { if (k == K_SPACE) - { - if (app().has_module(CMAUT)) - { - TMask& m = f.mask(); - char ti = m.get(F_TIPOCF_INI)[0]; - char tf = m.get(F_TIPOCF_FINE)[0]; - m.show(-7, ti <= ' ' && tf <= ' '); - } - } + app().show_cdc(); return TRUE; } @@ -584,9 +598,6 @@ bool TMastrini_application::contof_hnd (TMask_field& f, KEY k) int gruppo = m.get_int(F_GRUPPOFINE); int conto = m.get_int(id); - if (app().has_module(CMAUT)) - m.show(-7, m.get(F_TIPOCF_FINE)[0] <= ' '); - if (gruppo != 0 && conto != 0 && m.field(F_DESCRFINE_CONTO).empty()) { bool warning; @@ -745,6 +756,13 @@ bool TMastrini_application::almeno_un_record() return trovato; } +bool TMastrini_application::anno_hnd(TMask_field& f, KEY k) +{ + if (f.to_check(k, TRUE)) + app().show_cdc(); + return TRUE; +} + bool TMastrini_application::data_inizio(TMask_field& f, KEY k) { const TDate data = f.mask().get (F_DATAINI); @@ -2637,7 +2655,7 @@ bool TMastrini_application::set_print(int m) _print_cdc = _msk->get_bool(F_PRINTCDC); - if (_msk->get(F_DACDC).not_empty() || _msk->get(F_ACDC).not_empty()) + if (_msk->field(F_DACDC).active() && (_msk->get(F_DACDC).not_empty() || _msk->get(F_ACDC).not_empty())) { TRelation rel("CMS"); TRectype darec(rel.curr()), arec(rel.curr()); @@ -2681,8 +2699,6 @@ bool TMastrini_application::set_print(int m) } while (need_to_repeat_print()); } - - } } else @@ -4109,6 +4125,7 @@ const char* TMastrini_application::descrizione_sottoconto() // o di quella dello spreadsheet della seconda pagina void TMastrini_application::set_handlers(TMask* msk) const { + msk->set_handler(F_ANNO, anno_hnd); msk->set_handler(F_DATAINI, data_inizio); msk->set_handler(F_DATAFINE, data_fine); msk->set_handler(F_GRUPPOFINE, gruppo_hnd); @@ -4216,9 +4233,6 @@ bool TMastrini_application::user_create() set_handlers(_msk); _msk->set_handler(F_MEMORIZZA, memorizza_handler); - if (!has_module(CMAUT)) - _msk->hide(-7); // Spegne campi commesse in assenza del modulo relativo - TSheet_field& sht = (TSheet_field&)_msk->field(F_SCELTE); sht.set_notify(scelte_notify); TMask& sm = sht.sheet_mask(); diff --git a/cg/cglib01.cpp b/cg/cglib01.cpp index 2d89021cf..403a8ad44 100755 --- a/cg/cglib01.cpp +++ b/cg/cglib01.cpp @@ -494,20 +494,19 @@ bool TCodiceIVA::read(const char* cod) real TCodiceIVA::imposta(const real & imponibile, int ndec, const char * codval) const { const real percent = percentuale(); + real iva = imponibile * percent / 100.0; switch (ndec) { case AUTO_DECIMALS: - ndec = TCurrency(ZERO, codval).decimals(); + ndec = TExchange(codval).decimals(FALSE); break; case AUTO_PRICES_DECIMALS: - ndec = TPrice(ZERO, codval).decimals(); + ndec = TExchange(codval).decimals(TRUE); break; default: break; } - - real iva = imponibile * percent / 100.0; if (ndec < 20) { if (ndec == 0) @@ -523,27 +522,27 @@ real TCodiceIVA::imposta(const real & imponibile, int ndec, const char * codval) return iva; } -real TCodiceIVA::scorpora(real & imponibile, int ndec, const char* codval) const +real TCodiceIVA::scorpora(real& lordo, int ndec, const char* codval) const { const real percent = percentuale(); + real iva = (lordo * percent) / (percent + 100.0); + real imponibile = lordo - iva; switch (ndec) { case AUTO_DECIMALS: - ndec = TCurrency(ZERO, codval).decimals(); + ndec = TExchange(codval).decimals(FALSE); break; case AUTO_PRICES_DECIMALS: - ndec = TPrice(ZERO, codval).decimals(); + ndec = TExchange(codval).decimals(TRUE); break; default: break; } - - real iva = (imponibile * percent) / (percent + 100.0); - - if (ndec < 20) + if (ndec < 20) // E' richiesto un arrotondamento significativo? { - if (ndec == 0) + lordo.round(ndec); // Arrotondo importo lordo + if (ndec == 0) // Probabile caso Lire: arrotondo per eccesso l'IVA { if (imponibile > ZERO) iva.ceil(ndec); @@ -551,9 +550,20 @@ real TCodiceIVA::scorpora(real & imponibile, int ndec, const char* codval) const iva.floor(ndec); } else - iva.round(ndec); + iva.round(ndec); // Probabile caso Euro: arrotondo matematicamente l'IVA + imponibile.round(ndec); // Arrotondo imponibile + + real diff = lordo - imponibile - iva; + diff.round(ndec); // Arrotondo la differenza (importantissimo per evitare valori del tipo 1E-18) + if (!diff.is_zero()) + { + if (iva.sign() == diff.sign()) // Faccio crescere l'iva o l'imponibile ? + iva += diff; + else + imponibile += diff; + } } - imponibile -= iva; + lordo = imponibile; // lordo č un reference da aggiornare con l'imponibile! return iva; } diff --git a/cg/cgprassi.men b/cg/cgprassi.men index 753162cda..888a129db 100755 --- a/cg/cgprassi.men +++ b/cg/cgprassi.men @@ -87,17 +87,12 @@ Flags = "" Item_01 = "Prima nota", "cg2 -0", "F" Item_02 = "Gestione movimenti provvisori", "cg2 -1", "F" Item_03 = "Visualizzazione mastrini", "cg3 -5", "F" -Item_04 = "IVA", [PRASSICG_010] -Item_05 = "Lista movimenti", "cg3 -0 M", "F" -Item_06 = "Lista fatture per clienti/fornitori", "cg3 -0 C", "F" -Item_07 = "Stampa Mastrini", "cg3 -1", "F" -Item_08 = "Stampa Riepiloghi", "cg3 -4", "F" -Item_09 = "Visualizzazione saldi", "cg5 -2", "F" -Item_10 = "Ricalcolo saldi", "cg4 -0", "F" -Item_11 = "Bilancio", "cg1 -4", "F" -Item_12 = "Bilancio IV direttiva CEE", "cg1 -5", "F" -Item_13 = "Giornale", "cg3 -3", "F" -Item_14 = "Saldaconto", +Item_04 = "Visualizzazione saldi", "cg5 -2", "F" +Item_05 = "Ricalcolo saldi", "cg4 -0", "F" +Item_06 = "IVA", [PRASSICG_010] +Item_07 = "Stampe di contabilita`", [PRASSICG_023] +Item_08 = "Stampe CDC/Commesse ", +Item_09 = "Saldaconto", [PRASSICG_010] Caption = "IVA" @@ -229,6 +224,19 @@ Item_02 = "Gestione versamenti", "ba3 -0 %del", "" Item_03 = "Stampa versamenti", "cg1 -3", "F" Item_04 = "Gestione profili deleghe e distinte", "ba2 -0", "" +[PRASSICG_023] +Caption = "Stampe di contabilita`" +Picture = +Module = 7 +Flags = "" +Item_01 = "Lista movimenti", "cg3 -0 M", "F" +Item_02 = "Lista fatture per clienti/fornitori", "cg3 -0 C", "F" +Item_03 = "Stampa Mastrini", "cg3 -1", "F" +Item_04 = "Stampa Riepiloghi", "cg3 -4", "F" +Item_05 = "Bilancio", "cg1 -4", "F" +Item_06 = "Bilancio IV direttiva CEE", "cg1 -5", "F" +Item_07 = "Giornale", "cg3 -3", "F" + [PRASSICG_025] Caption = "Collegamento bilanci" Picture = diff --git a/cg/cgsaldac.cpp b/cg/cgsaldac.cpp index 5fca8017e..5187fe8f2 100755 --- a/cg/cgsaldac.cpp +++ b/cg/cgsaldac.cpp @@ -781,8 +781,6 @@ TImporto TRiga_partite::importo(bool valuta, int mode) const if (!in_lire) // Converto in lire gli abbuoni che sono memorizzati in valuta { const real cambio(get(PART_CAMBIO)); -// abbuoni.valore() *= cambio; -// abbuoni.valore().round(); TCurrency cur(abbuoni.valore(), codice_valuta(), cambio); cur.change_to_firm_val(); abbuoni.valore() = cur.get_num(); @@ -1230,6 +1228,35 @@ TRiga_partite& TPartita::new_row(int r) return nuova; } +TRiga_partite& TPartita::riga(int r) const +{ + if (!_part.exist(r)) + { + yesnofatal_box("La partita %d %s del conto %c %d %d %ld (%s) č incoerente: manca la riga %d", + anno(), (const char*)numero(), + _conto.tipo(), _conto.gruppo(), _conto.conto(), _conto.sottoconto(), + (const char*)_conto.descrizione(), r); + + // Ricreiamo una riga fasulla tanto per non bloccare il programma + TRiga_partite& newrow = ((TPartita*)this)->new_row(r); + for (int p = last(); p > 0; p = pred(p)) + { + const TRiga_partite& par = riga(p); + for (int rr = par.rate(); rr > 0; rr--) + { + TRiga_scadenze& rat = par.rata(rr); + if (rat.exist(r)) // Ho trovato un pagamento assegnato alla nuova riga! + { + newrow.put(PART_TIPOMOV, (int)tm_pagamento); // Imposta il tipo movimento + newrow.put(PART_SEZ, par.sezione() == 'D' ? 'A' : 'D'); // Imposta sezione al contrario della fattura + TValuta val(par); val.put(newrow); // Copia valuta da fattura + } + } + } + } + return (TRiga_partite&)_part.row(r); +} + TRiga_scadenze& TPartita::rata(int nriga, int nrata) const { const TRiga_partite& r = riga(nriga); @@ -1619,8 +1646,6 @@ TImporto TPartita::importo_pagato_unassigned(bool val, int mode) const real abb(pag.get_real(PAGSCA_ABBUONI)); if (in_val && !val) // Gli abbuoni sono sempre in valuta e quindi { // devono essere convertiti opportunamente -// abb *= sum.get_real(PART_CAMBIO); -// abb.round(); const TExchange cmb(sum); TCurrency cur(abb, cmb); cur.change_to_firm_val(); diff --git a/cg/cgsaldac.h b/cg/cgsaldac.h index eb6b032fa..5cf47767b 100755 --- a/cg/cgsaldac.h +++ b/cg/cgsaldac.h @@ -235,7 +235,7 @@ public: // TObject public: enum { NUMLEN = 7, UNASSIGNED = 9999 }; - TRiga_partite& riga(int r) const { return (TRiga_partite&)_part.row(r); } + TRiga_partite& riga(int r) const; TRiga_partite& new_row(int r = 0); void rimuovi_riga(int r); TRiga_scadenze& rata(int nriga, int nrata) const; diff --git a/cm/cm0100.cpp b/cm/cm0100.cpp index f3da265c9..d134094bf 100755 --- a/cm/cm0100.cpp +++ b/cm/cm0100.cpp @@ -19,7 +19,6 @@ class TForm_contixcdc : public TForm public: virtual bool validate(TForm_item &cf, TToken_string &s); void set_testata() {set_header(1,TRUE);} - //void set_pedata() {set_footer(1,FALSE); set_footer(1,TRUE);} TPrint_section& get_body() {return section('B', odd_page);} TPrint_section& get_section(char s, pagetype pos) {return section(s, pos);} TForm_contixcdc(); @@ -37,7 +36,48 @@ TForm_contixcdc::~TForm_contixcdc() //distruttore bool TForm_contixcdc::validate(TForm_item &cf, TToken_string &s) { - return TForm::validate(cf,s); //richiama la validate standard della classe genitore + const TString code(s.get(0)); // prende il primo parametro, il codice del messaggio + TString valore; + if (code== "_DITTA") + { + // lettura dei dati della ditta + // sintassi: _DITTA,{|} + // dove: č un riferimento alla relazione di gestione dei dati della ditta (es. 113@->DENCOM č la denominazione del comune di residenza della ditta) + // č uno delle macro seguenti: + // !RAGSOC ragione sociale + // !IND indirizzo (fiscale se c'č, oppure di residenza) + // !NUM numero civico (fiscale se c'č, oppure di residenza) + // !CAP CAP (fiscale se c'č, oppure di residenza) + // !COM comune (fiscale se c'č, oppure di residenza) + // !PROV provincia (fiscale se c'č, oppure di residenza) + // !IVA partita iva + // !CF codice fiscale + // !TEL numero di telefono (con prefisso) + // !FAX numero di fax (con prefisso) + // !REGSOC numero di registrazione presso il Tribunale + // !CCIAA numero di registrazione presso la camera di commercio + // nota: la relazione della ditta č cosģ strutturata: + // %NDITTE (9) Dati ditte + // + %ANAGR (6) Anagrafica generale (indirizzo, ecc.) + // + %COMUNI (113@) Comune di residenza + // + %COMUNI (213@) Comune di residenza fiscale + TLocalisamfile firm(LF_NDITTE); + TLocalisamfile anag(LF_ANAG); + firm.put("CODDITTA",main_app().get_firm()); + firm.read(); + anag.put("TIPOA",firm.get("TIPOA")); + anag.put("CODANAGR",firm.get("CODANAGR")); + anag.read(); + TString in(s.get()); + if (in[0]!='!') + { + cf.set(firm.curr().get(in)); + return TRUE; + } + else + return TForm::validate(cf, s); // se il codice del messaggio non č identificato viene passato alla funzione standard + } // fine _DITTA + return TForm::validate(cf, s); // se il codice del messaggio non č identificato viene passato alla funzione standard } class TContixcdc_mask : public TAutomask @@ -76,6 +116,33 @@ bool TContixcdc_mask::on_field_event(TOperable_field& o, TField_event e, long jo enable(F_AFSC, on); } break; + case F_DATAINI: + if (e == fe_modify || e == fe_close) + { + TDate dataini(field(F_DATAINI).get()); + if (dataini.ok()) + { + TDate datainies = cache().get("ESC", field(F_ANNO).get(), "D0"); + if (dataini < datainies && datainies.ok()) + return error_box("La data iniziale non puņ essere precedente alla data inizio esercizio %s", (const char*) datainies.string()); + } + } + break; + case F_DATAFIN: + if (e == fe_modify || fe_close) + { + TDate datafin(field(F_DATAFIN).get()); + if (datafin.ok()) + { + TDate datafines = cache().get("ESC", field(F_ANNO).get(), "D1"); + if (datafin > datafines && datafines.ok()) + return error_box("La data finale non puņ essere successiva alla data fine esercizio %s", (const char*) datafines.string()); + TDate dataini(field(F_DATAINI).get()); + if (dataini > datafin) + return error_box("La data iniziale non puņ essere successiva alla data finale"); + } + } + break; default: break; } return TRUE; @@ -83,7 +150,7 @@ bool TContixcdc_mask::on_field_event(TOperable_field& o, TField_event e, long jo struct TTotali : public TObject { - TImporto _tot_progprec, _tot_periodo, _tot_saldocont; + TImporto _tot_progprec, _tot_periodo, _tot_saldoatt; void azzera(); TTotali& operator += (const TTotali& t); }; @@ -92,29 +159,29 @@ void TTotali::azzera() { _tot_progprec = 0; _tot_periodo = 0; - _tot_saldocont = 0; + _tot_saldoatt = 0; } TTotali& TTotali::operator += (const TTotali& t) { _tot_progprec += t._tot_progprec; _tot_periodo += t._tot_periodo; - _tot_saldocont += t._tot_saldocont; + _tot_saldoatt += t._tot_saldoatt; return *this; //ritorna se stesso, quindi i valori dei totali } class TContixCdc : public TSkeleton_application { - TContixcdc_mask * _mask; - TForm_contixcdc * _form; + TContixcdc_mask* _mask; + TForm_contixcdc* _form; int _codes; TDate _dataini, _datafin; TTotali _t_gruppo, _t_sottoc, _t_fsc, _t_cms; //sono i tre set di totali (gruppo/conto, sottoconto, commessa) int _currgruppo, _currconto, _oldgruppo, _oldconto; long _currsottoc, _oldsottoc; TString _currcms, _currfsc, _oldcms, _oldfsc; - bool _saltopagina; + bool _saltopagina, _headercms, _headerfsc; protected: virtual bool create(); @@ -122,13 +189,11 @@ protected: virtual void main_loop(); void print_sottoc(); - void ctrl_commessa(); - void print_footer_gruppo(const int gruppo, const int conto); - void print_header_gruppo(const int gruppo, const int conto); - void print_footer_commessa(const TString& cms); - void print_header_commessa(const TString& cms); - void print_footer_fase(const TString& fsc); - void print_header_fase(const TString& fsc); + void print_footer_gruppo(); + void print_footer_cms(); + void print_header_cms(); + void print_footer_fsc(); + void print_header_fsc(); void set_intestazione(); void fill_body(const TTotali& tot); //riempie il campo body con tutti i totali void print_body(); //stampa effettivamente il body @@ -144,10 +209,9 @@ public: bool TContixCdc::create() { - open_files(LF_RMOV, 0); _mask = new TContixcdc_mask; _form = new TForm_contixcdc; - + open_files(LF_RMOV, 0); return TSkeleton_application::create(); } @@ -159,78 +223,100 @@ bool TContixCdc::destroy() } void TContixCdc::print_sottoc() -{ - if (_oldsottoc != -1) +{ + if (!_t_sottoc._tot_periodo.is_zero()) { + if (_headercms) + { + print_header_cms(); + _headercms = FALSE; + } + if (_headerfsc) + { + print_header_fsc(); + _headerfsc = FALSE; + } TString16 key; key.format("%d|%d|%ld", _oldgruppo, _oldconto, _oldsottoc); const TRectype& pcon = cache().get(LF_PCON, key); + set_field(FR_GRUPPO, _oldgruppo); + set_field(FR_CONTO, _oldconto); set_field(FR_SOTTOC, _oldsottoc); set_field(FR_D_SOTTOC, pcon.get(PCN_DESCR)); - // manca costo/ricavo fill_body(_t_sottoc); print_body(); - } + _t_gruppo += _t_sottoc; + _t_fsc += _t_sottoc; + _t_cms += _t_sottoc; + } _oldsottoc = _currsottoc; _t_sottoc.azzera(); } -void TContixCdc::print_footer_gruppo(const int gruppo, const int conto) +void TContixCdc::print_footer_gruppo() { - TString16 key; - key.format("%d|%d", gruppo, conto); - TString tmp; - const TRectype& pcon = cache().get(LF_PCON, key); - tmp.format("TOTALE %d %d %s", gruppo, conto, (const char*) pcon.get(PCN_DESCR)); - set_field(FR_SOTTOC, ""); - set_field(FR_D_SOTTOC, tmp); - fill_body(_t_gruppo); - print_body(); + if (!_t_gruppo._tot_periodo.is_zero()) + { + TString16 key; + key.format("%d|%d", _oldgruppo, _oldconto); + TString tmp; + const TRectype& pcon = cache().get(LF_PCON, key); + tmp.format("TOTALE %d %d %s", _oldgruppo, _oldconto, (const char*) pcon.get(PCN_DESCR)); + set_field(FR_GRUPPO, ""); + set_field(FR_CONTO, ""); + set_field(FR_SOTTOC, ""); + set_field(FR_D_SOTTOC, tmp); + fill_body(_t_gruppo); + print_body(); + } + _oldgruppo = _currgruppo; + _oldconto = _currconto; + _t_gruppo.azzera(); } -void TContixCdc::print_header_gruppo(const int gruppo, const int conto) -{ - TString tmp; - TString16 key; - key.format("%d|%d", gruppo, conto); - const TRectype& pcon = cache().get(LF_PCON, key); - tmp.format("%d %d", gruppo, conto); - _form->find_field('H', even_page, FR_GRUPPOCONTO).set(tmp); - _form->find_field('H', even_page, FR_D_GRUPPOCONTO).set(pcon.get(PCN_DESCR)); - print_specialsection('H', even_page); -} - -void TContixCdc::print_footer_commessa(const TString& cms) +void TContixCdc::print_footer_cms() { - TString tmp; - tmp.format("TOTALE COMMESSA %s", (const char*) cms); - set_field(FR_D_SOTTOC, tmp); - fill_body(_t_cms); - print_body(); - if (_saltopagina) - printer().formfeed(); + if (!_t_cms._tot_periodo.is_zero()) + { + TString tmp; + tmp.format("TOTALE COMMESSA %s", (const char*) _oldcms); + set_field(FR_D_SOTTOC, tmp); + fill_body(_t_cms); + print_body(); + if (_saltopagina) + printer().formfeed(); + } + _t_cms.azzera(); + _oldcms = _currcms; + _headercms = TRUE; } -void TContixCdc::print_footer_fase(const TString& fsc) +void TContixCdc::print_footer_fsc() { - TString tmp; - tmp.format("TOTALE FASE %s", (const char*) fsc); - set_field(FR_D_SOTTOC, tmp); - fill_body(_t_fsc); - print_body(); + if (!_t_fsc._tot_periodo.is_zero()) + { + TString tmp; + tmp.format("TOTALE FASE %s", (const char*) _oldfsc); + set_field(FR_D_SOTTOC, tmp); + fill_body(_t_fsc); + print_body(); + } + _oldfsc = _currfsc; + _t_fsc.azzera(); + _headerfsc = TRUE; } -void TContixCdc::print_header_commessa(const TString& cms) +void TContixCdc::print_header_cms() { - _form->find_field('H', odd_page, FR_CMS).set(cms); - _form->find_field('H', odd_page, FR_D_CMS).set(cache().get("CMS", cms).get("S0")); + _form->find_field('H', odd_page, FR_CMS).set(_oldcms); + _form->find_field('H', odd_page, FR_D_CMS).set(cache().get("CMS", _oldcms).get("S0")); print_specialsection('H', odd_page); } -void TContixCdc::print_header_fase(const TString& fsc) +void TContixCdc::print_header_fsc() { - _form->find_field('H', last_page, FR_FSC).set(fsc); - _form->find_field('H', last_page, FR_D_FSC).set(cache().get("FSC", fsc).get("S0")); + _form->find_field('H', last_page, FR_FSC).set(_oldfsc); + _form->find_field('H', last_page, FR_D_FSC).set(cache().get("FSC", _oldfsc).get("S0")); print_specialsection('H', last_page); } @@ -279,31 +365,21 @@ void TContixCdc::set_field(int id, const char* val) void TContixCdc::fill_body(const TTotali& tot) { -// riempie il body odd, contenente i totali; lo fa chiamando la set_field per ogni campo + // riempie il body odd, contenente i totali; lo fa chiamando la set_field per ogni campo set_field(FR_PROGPREC, tot._tot_progprec.valore()); set_field(FR_PERIODO, tot._tot_periodo.valore()); real tempval1 = tot._tot_progprec.valore()+tot._tot_periodo.valore(); set_field(FR_PROG, tempval1); - set_field(FR_SALDOCONT, tot._tot_saldocont.valore()); + set_field(FR_SALDOATT, tot._tot_saldoatt.valore()); } void TContixCdc::aggiorna_totali(const TImporto importo, const TDate data) { if (data < _dataini) _t_sottoc._tot_progprec+=importo; - else if (data > _datafin) - _t_sottoc._tot_saldocont+=importo; - else + else if (data <= _datafin) _t_sottoc._tot_periodo+=importo; -} - -void TContixCdc::ctrl_commessa() -{ - if (_oldcms != "@@") - print_footer_commessa(_oldcms); - _t_cms.azzera(); - print_header_commessa(_currcms); - _oldcms = _currcms; + _t_sottoc._tot_saldoatt+=importo; } void TContixCdc::main_loop() @@ -314,13 +390,15 @@ void TContixCdc::main_loop() _codes = _mask->get_int(F_ANNO); // esercizio _dataini = _mask->get_date(F_DATAINI); // data iniziale _datafin = _mask->get_date(F_DATAFIN); // data finale - TString80 dacdc = _mask->get(F_DACDC); // cdc/commessa iniziale - TString80 dafsc = _mask->get(F_DAFSC); // fase iniziale - TString80 acdc = _mask->get(F_ACDC); // cdc/commessa finale - TString80 afsc = _mask->get(F_AFSC); // fase finale - // relazione su rmov + if (_dataini.empty()) + _dataini = cache().get("ESC", _mask->get(F_ANNO)).get_date("D0"); + if (_datafin.empty()) + _datafin = cache().get("ESC", _mask->get(F_ANNO)).get_date("D1"); + TString80 dacdc = _mask->get(F_DACDC); // cdc/commessa iniziale + TString80 dafsc = _mask->get(F_DAFSC); // fase iniziale + TString80 acdc = _mask->get(F_ACDC); // cdc/commessa finale + TString80 afsc = _mask->get(F_AFSC); // fase finale TRelation relrmov(LF_RMOV); - // filtro TString filtro = ""; if (_codes != 0) filtro.format("ANNOES==%d", _codes); @@ -355,31 +433,33 @@ void TContixCdc::main_loop() if (dacdc.empty() && acdc.empty()) filtro << " && " << "(CODCMS!=\"\")"; TRectype darec(LF_RMOV), arec(LF_RMOV); - // servono per gruppo-conto-sottoconto darec.zero(); arec.zero(); - darec.put(RMV_GRUPPO, _mask->get_int(F_GRUPPOINI)); darec.put(RMV_CONTO, _mask->get_int(F_CONTOINI)); darec.put(RMV_SOTTOCONTO, _mask->get_long(F_SOTTOCINI)); arec.put(RMV_GRUPPO, _mask->get_int(F_GRUPPOFIN)); arec.put(RMV_CONTO, _mask->get_int(F_CONTOFIN)); arec.put(RMV_SOTTOCONTO, _mask->get_long(F_SOTTOCFIN)); - - // ordinamento per TSorted_cursor - TString ordin = "CODCMS|FASCMS|GRUPPO|CONTO|SOTTOCONTO|DATAREG|NUMREG|NUMRIG"; + TString ordin = "GRUPPO|CONTO|SOTTOCONTO|DATAREG|NUMREG|NUMRIG"; + bool ctrlfsc = TRUE; + if (dafsc.empty() && afsc.empty()) + { + ctrlfsc = FALSE; + ordin.insert("CODCMS|"); + } + else + ordin.insert("CODCMS|FASCMS|"); TSorted_cursor sortcur (&relrmov, ordin, filtro, 2, &darec, &arec); sortcur.setregion(darec,arec); sortcur.setfilter(filtro,TRUE); - long num = sortcur.items(); sortcur.freeze(); printer().open(); -// setta l'intestazione del form... set_intestazione(); TRectype currrec(LF_RMOV); _oldcms = "@@"; - _oldfsc = "@@"; + _oldfsc = (ctrlfsc) ? "@@" : ""; _oldsottoc = -1; _oldgruppo = -1; _oldconto = -1; @@ -387,54 +467,42 @@ void TContixCdc::main_loop() _t_fsc.azzera(); _t_gruppo.azzera(); _t_sottoc.azzera(); + _headercms = TRUE; + _headerfsc = (ctrlfsc) ? TRUE : FALSE; for (sortcur=0; sortcur.pos()0) + if (num > 0) { print_sottoc(); - print_footer_gruppo(_currgruppo, _currconto); - print_footer_fase(_currfsc); - print_footer_commessa(_currcms); + print_footer_gruppo(); + if (ctrlfsc) + print_footer_fsc(); + print_footer_cms(); printer().formfeed(); } printer().close(); diff --git a/cm/cm0100.h b/cm/cm0100.h index 75b8ebf8a..3708da2d2 100755 --- a/cm/cm0100.h +++ b/cm/cm0100.h @@ -12,13 +12,12 @@ #define FR_D_CMS 22 #define FR_FSC 23 #define FR_D_FSC 24 -#define FR_GRUPPOCONTO 25 -#define FR_D_GRUPPOCONTO 26 -#define FR_SOTTOC 31 -#define FR_D_SOTTOC 32 -#define FR_CR_SOTTOC 33 -#define FR_PROGPREC 34 -#define FR_PERIODO 35 -#define FR_PROG 36 -#define FR_SALDOCONT 37 +#define FR_GRUPPO 31 +#define FR_CONTO 32 +#define FR_SOTTOC 33 +#define FR_D_SOTTOC 34 +#define FR_PROGPREC 35 +#define FR_PERIODO 36 +#define FR_PROG 37 +#define FR_SALDOATT 38 diff --git a/cm/cm0100a.frm b/cm/cm0100a.frm index 251735037..3c6e2938c 100755 --- a/cm/cm0100a.frm +++ b/cm/cm0100a.frm @@ -2,214 +2,214 @@ GENERAL BEGIN - OFFSET 0 0 - FONT "Courier New" - SIZE 12 - GRID "" + OFFSET 0 0 + FONT "Courier New" + SIZE 12 + GRID "" END -SECTION HEADER FIRST 7 +// intestazione generale stampa conti per commessa +SECTION HEADER FIRST 6 -STRINGA 1 40 1 +STRINGA 1 5 BEGIN - KEY "nome ditta" - PROMPT 1 1 "Ditta " - MESSAGE _DITTA, !RAGSOC + KEY "Codice ditta" + PROMPT 1 1 "Ditta " + MESSAGE _DITTA,CODDITTA + PICTURE "#####" END -STRINGA 2 10 +STRINGA 2 40 BEGIN - KEY "Data" - PROMPT 100 1 "Data " - MESSAGE _TODAY + KEY "nome ditta" + PROMPT 13 1 "" + MESSAGE _DITTA,RAGSOC END -NUMERO 3 7 +STRINGA 310 BEGIN - KEY "Nr. pagina" - PROMPT 120 1 "Pagina " - MESSAGE _PAGENO + KEY "Data" + PROMPT 100 1 "Data " + MESSAGE _TODAY +END + +NUMERO 4 7 +BEGIN + KEY "Nr. pagina" + PROMPT 120 1 "Pagina " + MESSAGE _PAGENO END STRINGA -1 22 BEGIN - KEY "Intestazione stampa" - PROMPT 1 2 "Conti per CDC/Commessa" + KEY "Intestazione stampa" + PROMPT 1 2 "Conti per CDC/Commessa" END NUMERO FR_ESERCIZIO 16 BEGIN - KEY "Parametri stampa: codice esercizio" - PROMPT 1 3 "Esercizio: " + KEY "Parametri stampa: codice esercizio" + PROMPT 1 3 "Esercizio: " END DATA FR_DATAINI BEGIN - KEY "Parametri stampa: data iniziale" - PROMPT 1 4 "Movimenti dal " + KEY "Parametri stampa: data iniziale" + PROMPT 1 4 "Movimenti dal " END DATA FR_DATAFIN BEGIN - KEY "Parametri stampa: data finale" - PROMPT 40 4 "al " + KEY "Parametri stampa: data finale" + PROMPT 40 4 "al " END STRINGA FR_DACDC 20 BEGIN - KEY "Parametri stampa: da commessa" - PROMPT 1 5 "Da CDC/commessa: " + KEY "Parametri stampa: da commessa" + PROMPT 1 5 "Da CDC/commessa: " END STRINGA FR_DAFSC 10 BEGIN - KEY "Parametri stampa: da fase" - PROMPT 40 5 "Da fase: " + KEY "Parametri stampa: da fase" + PROMPT 40 5 "Da fase: " END STRINGA FR_ACDC 20 BEGIN - KEY "Parametri stampa: a commessa" - PROMPT 1 6 "a CDC/commessa: " + KEY "Parametri stampa: a commessa" + PROMPT 1 6 "a CDC/commessa: " END STRINGA FR_AFSC 10 BEGIN - KEY "Parametri stampa: a fase" - PROMPT 40 6 "a fase: " + KEY "Parametri stampa: a fase" + PROMPT 40 6 "a fase: " END END // section header first +// intestazione comessa SECTION HEADER ODD 5 +STRINGA -1 +BEGIN + KEY "Intestazione stampa" + PROMPT 1 2 "------------------------------------------------------------------------------------------------------------------------------------" +END + STRINGA FR_CMS 20 BEGIN - KEY "Intestazione commessa" - PROMPT 1 1 "CDC/Commessa " + KEY "Codice commessa" + PROMPT 1 3 "@bCDC/Commessa " END STRINGA FR_D_CMS 50 BEGIN - KEY "Intestazione commessa" - PROMPT 35 1 "" + KEY "Descrizione commessa" + PROMPT 35 3 "@b" END STRINGA -1 BEGIN - KEY "Intestazione stampa" - PROMPT 1 3 "------------------------------------------------------------------------------------------------------------------------" + KEY "Intestazione stampa" + PROMPT 70 4 " Progr. prec." END STRINGA -1 BEGIN - KEY "Intestazione stampa" - PROMPT 1 4 "Gruppo/Conto/Sottoconto" + KEY "Intestazione stampa" + PROMPT 85 4 " Tot. periodo" END STRINGA -1 BEGIN - KEY "Intestazione stampa" - PROMPT 70 4 "Prog. prec." + KEY "Intestazione stampa" + PROMPT 100 4 " Tot. progr." +END + +STRINGA -1 +BEGIN + KEY "Intestazione stampa" + PROMPT 115 4 " Saldo attuale" END STRINGA -1 BEGIN - KEY "Intestazione stampa" - PROMPT 85 4 "Tot. periodo" -END - -STRINGA -1 -BEGIN - KEY "Intestazione stampa" - PROMPT 100 4 "Tot. progr." -END - -STRINGA -1 -BEGIN - KEY "Intestazione stampa" - PROMPT 115 4 "Saldo cont." -END - -STRINGA -1 -BEGIN - KEY "Intestazione stampa" - PROMPT 1 5 "------------------------------------------------------------------------------------------------------------------------" + KEY "Intestazione stampa" + PROMPT 1 5 "------------------------------------------------------------------------------------------------------------------------------------" END END // section header odd +// intestazione fase SECTION HEADER LAST 1 STRINGA FR_FSC 20 BEGIN - KEY "Intestazione fase" - PROMPT 1 1 "Fase " + KEY "Codice fase" + PROMPT 1 1 "@bFase " END STRINGA FR_D_FSC 50 BEGIN - KEY "Intestazione fase" - PROMPT 35 1 "" + KEY "Descrizione fase" + PROMPT 35 1 "@b" END END // section header last -SECTION HEADER EVEN 1 - -STRINGA FR_GRUPPOCONTO 20 -BEGIN - KEY "Intestazione stampa" - PROMPT 1 1 "Gruppo/Conto " -END - -STRINGA FR_D_GRUPPOCONTO 50 -BEGIN - KEY "Intestazione stampa" - PROMPT 21 1 "" -END - -END // section header even - +// riga di stampa (utilizzata per ogni gruppo/conto/sottoconto e per tutti i totali) SECTION BODY ODD 1 +NUMERO FR_GRUPPO 3 +BEGIN + KEY "Gruppo" + PROMPT 5 1 "" +END + +NUMERO FR_CONTO 3 +BEGIN + KEY "Conto" + PROMPT 9 1 "" +END + NUMERO FR_SOTTOC 6 -BEGIN - PROMPT 1 1 "" +BEGIN + KEY "Gruppo/Conto/Sottoconto" + PROMPT 13 1 "" END -STRINGA FR_D_SOTTOC 50 -BEGIN - PROMPT 8 1 "" + +STRINGA FR_D_SOTTOC 48 +BEGIN + KEY "Descrizione sottoconto" + PROMPT 20 1 "" END -STRINGA FR_CR_SOTTOC 1 +VALUTA FR_PROGPREC 14 BEGIN - PROMPT 64 1 "" + PROMPT 70 1 "" + PICTURE "." END -NUMERO FR_PROGPREC 14 2 +VALUTA FR_PERIODO 14 BEGIN - PROMPT 70 1 "" - PICTURE "###.###.###,##" + PROMPT 85 1 "" + PICTURE "." END -NUMERO FR_PERIODO 14 2 +VALUTA FR_PROG 14 BEGIN - PROMPT 85 1 "" - PICTURE "###.###.###,##" -END - -NUMERO FR_PROG 14 2 -BEGIN - PROMPT 100 1 "" - PICTURE "###.###.###,##" + PROMPT 100 1 "" + PICTURE "." END -NUMERO FR_SALDOCONT 14 2 +VALUTA FR_SALDOATT 14 BEGIN - PROMPT 115 1 "" - PICTURE "###.###.###,##" + PROMPT 115 1 "" + PICTURE "." END END // section body diff --git a/cm/cm0100a.uml b/cm/cm0100a.uml index 9d79b38a3..79f807499 100755 --- a/cm/cm0100a.uml +++ b/cm/cm0100a.uml @@ -41,7 +41,6 @@ BEGIN PROMPT 2 4 "Codice esercizio " HELP "Codice esercizio per cui si vuole la lista" USE ESC - CHECKTYPE NORMAL INPUT CODTAB F_ANNO DISPLAY "Codice" CODTAB DISPLAY "Data inizio esercizio" D0 @@ -49,6 +48,8 @@ BEGIN OUTPUT F_ANNO CODTAB FLAGS "RZ" ADD RUN cg0 -5 esc + CHECKTYPE REQUIRED + WARNING "Codice esercizio obbligatorio" END DATE F_DATAINI diff --git a/cm/cm0200.cpp b/cm/cm0200.cpp index cb50ec531..1de5953f8 100755 --- a/cm/cm0200.cpp +++ b/cm/cm0200.cpp @@ -10,6 +10,7 @@ #include "cm0200a.h" #include "cm0200.h" +#include "causali.h" #include "mov.h" #include "rmov.h" #include "pconti.h" @@ -36,7 +37,48 @@ TForm_schedacdc::~TForm_schedacdc() //distruttore bool TForm_schedacdc::validate(TForm_item &cf, TToken_string &s) { - return TForm::validate(cf,s); //richiama la validate standard della classe genitore + const TString code(s.get(0)); // prende il primo parametro, il codice del messaggio + TString valore; + if (code== "_DITTA") + { + // lettura dei dati della ditta + // sintassi: _DITTA,{|} + // dove: č un riferimento alla relazione di gestione dei dati della ditta (es. 113@->DENCOM č la denominazione del comune di residenza della ditta) + // č uno delle macro seguenti: + // !RAGSOC ragione sociale + // !IND indirizzo (fiscale se c'č, oppure di residenza) + // !NUM numero civico (fiscale se c'č, oppure di residenza) + // !CAP CAP (fiscale se c'č, oppure di residenza) + // !COM comune (fiscale se c'č, oppure di residenza) + // !PROV provincia (fiscale se c'č, oppure di residenza) + // !IVA partita iva + // !CF codice fiscale + // !TEL numero di telefono (con prefisso) + // !FAX numero di fax (con prefisso) + // !REGSOC numero di registrazione presso il Tribunale + // !CCIAA numero di registrazione presso la camera di commercio + // nota: la relazione della ditta č cosģ strutturata: + // %NDITTE (9) Dati ditte + // + %ANAGR (6) Anagrafica generale (indirizzo, ecc.) + // + %COMUNI (113@) Comune di residenza + // + %COMUNI (213@) Comune di residenza fiscale + TLocalisamfile firm(LF_NDITTE); + TLocalisamfile anag(LF_ANAG); + firm.put("CODDITTA",main_app().get_firm()); + firm.read(); + anag.put("TIPOA",firm.get("TIPOA")); + anag.put("CODANAGR",firm.get("CODANAGR")); + anag.read(); + TString in(s.get()); + if (in[0]!='!') + { + cf.set(firm.curr().get(in)); + return TRUE; + } + else + return TForm::validate(cf, s); // se il codice del messaggio non č identificato viene passato alla funzione standard + } // fine _DITTA + return TForm::validate(cf, s); // se il codice del messaggio non č identificato viene passato alla funzione standard } class TSchedacdc_mask : public TAutomask @@ -75,6 +117,33 @@ bool TSchedacdc_mask::on_field_event(TOperable_field& o, TField_event e, long jo enable(F_AFSC, on); } break; + case F_DATAINI: + if (e == fe_modify || e == fe_close) + { + TDate dataini(field(F_DATAINI).get()); + if (dataini.ok()) + { + TDate datainies = cache().get("ESC", field(F_ANNO).get(), "D0"); + if (dataini < datainies && datainies.ok()) + return error_box("La data iniziale non puņ essere precedente alla data inizio esercizio %s", (const char*) datainies.string()); + } + } + break; + case F_DATAFIN: + if (e == fe_modify || fe_close) + { + TDate datafin(field(F_DATAFIN).get()); + if (datafin.ok()) + { + TDate datafines = cache().get("ESC", field(F_ANNO).get(), "D1"); + if (datafin > datafines && datafines.ok()) + return error_box("La data finale non puņ essere successiva alla data fine esercizio %s", (const char*) datafines.string()); + TDate dataini(field(F_DATAINI).get()); + if (dataini > datafin) + return error_box("La data iniziale non puņ essere successiva alla data finale"); + } + } + break; default: break; } return TRUE; @@ -82,19 +151,21 @@ bool TSchedacdc_mask::on_field_event(TOperable_field& o, TField_event e, long jo struct TTotalis : public TObject { - TImporto _tot_periodo, _tot_generale; + TImporto _tot_perprec, _tot_periodo, _tot_generale; void azzera(); TTotalis& operator += (const TTotalis& t); }; void TTotalis::azzera() { - _tot_periodo = 0; - _tot_generale = 0; + _tot_perprec = 0; + _tot_periodo = 0; + _tot_generale = 0; } TTotalis& TTotalis::operator += (const TTotalis& t) { + _tot_perprec += t._tot_perprec; _tot_periodo += t._tot_periodo; _tot_generale += t._tot_generale; @@ -103,15 +174,15 @@ TTotalis& TTotalis::operator += (const TTotalis& t) class TSchedacdc : public TSkeleton_application { - TSchedacdc_mask * _mask; - TForm_schedacdc * _form; + TSchedacdc_mask* _mask; + TForm_schedacdc* _form; int _codes; TDate _dataini, _datafin; - TTotalis _t_gruppo, _t_fsc, _t_cms; + TTotalis _t_sottoc, _t_fsc, _t_cms; + TString _currcms, _currfsc, _oldcms, _oldfsc; + bool _saltopagina, _headercms, _headerfsc, _headersottoc; int _currgruppo, _currconto, _oldgruppo, _oldconto; long _currsottoc, _oldsottoc; - TString _currcms, _currfsc, _oldcms, _oldfsc; - bool _saltopagina; protected: virtual bool create(); @@ -119,19 +190,17 @@ protected: virtual void main_loop(); void print_movimento(TSorted_cursor& cur); - void print_progprec(real importo); - void ctrl_commessa(); - void print_footer_gruppo(const int gruppo, const int conto, const long sottoconto); - void print_header_gruppo(const int gruppo, const int conto, const long sottoconto); - void print_footer_commessa(const TString& cms); - void print_header_commessa(const TString& cms); - void print_footer_fase(const TString& fsc); - void print_header_fase(const TString& fsc); + void print_header_mov() { print_specialsection('H', even_page); }; + void print_header_sottoc(); + void print_footer_cms(); + void print_header_cms(); + void print_footer_fsc(); + void print_header_fsc(); void set_intestazione(); void print_body(); //stampa effettivamente il body void set_field(int id, const real& val); //mette in un campo del body odd un valore numerico void set_field(int id, const char* val); //mette in un campo del body odd una stringa - void print_specialsection(char s, pagetype pos); // stampa una sezione qualunque ( + void print_specialsection(char s, pagetype pos); // stampa una sezione qualunque void aggiorna_totali(const TImporto importo, const TDate data); public: @@ -155,18 +224,55 @@ bool TSchedacdc::destroy() return TSkeleton_application::destroy(); } -void TSchedacdc::print_progprec(real importo) -{ - _form->find_field('B', first_page, FR_PROGPREC).set(importo.string()); - print_specialsection('B', first_page); +void TSchedacdc::aggiorna_totali(const TImporto importo, const TDate data) +{ + if (data < _dataini) + { + _t_cms._tot_perprec+=importo; + _t_fsc._tot_perprec+=importo; + _t_sottoc._tot_perprec+=importo; + } + else if (data <= _datafin) + { + _t_cms._tot_periodo+=importo; + _t_fsc._tot_periodo+=importo; + _t_sottoc._tot_periodo+=importo; + } + _t_cms._tot_generale+=importo; + _t_fsc._tot_generale+=importo; + _t_sottoc._tot_generale+=importo; } void TSchedacdc::print_movimento(TSorted_cursor& cur) { + if (_headercms) + { + print_header_cms(); + if (!_headerfsc) + print_header_mov(); + _headercms = FALSE; + } + if (_headerfsc) + { + print_header_fsc(); + print_header_mov(); + _headerfsc = FALSE; + } + if (_headersottoc) + { + print_header_sottoc(); + _headersottoc = FALSE; + } + TRectype rec = cur.curr(); + TString16 key; set_field(FR_DATAREG, cur.curr().get(RMV_DATAREG)); set_field(FR_NUMREG, cur.curr().get(RMV_NUMREG)); set_field(FR_DESCRMOV, cur.curr(LF_MOV).get(MOV_DESCR)); - set_field(FR_CODCAUS, cur.curr(LF_MOV).get(MOV_CODCAUS)); + set_field(FR_NUMDOC, cur.curr(LF_MOV).get(MOV_NUMDOC)); + set_field(FR_DATADOC, cur.curr(LF_MOV).get(MOV_DATADOC)); + set_field(FR_CAUSALE, cur.curr(LF_MOV).get(MOV_CODCAUS)); + TString tmp = cache().get(LF_CAUSALI, cur.curr(LF_MOV).get(MOV_CODCAUS),CAU_DESCR); + set_field(FR_D_CAUSALE, tmp); const char sezione = cur.curr().get_char(RMV_SEZIONE); const real importo = cur.curr().get_real(RMV_IMPORTO); set_field(FR_DARE, ""); @@ -175,68 +281,141 @@ void TSchedacdc::print_movimento(TSorted_cursor& cur) set_field(FR_DARE, importo.string()); else set_field(FR_AVERE, importo.string()); - print_body(); } -void TSchedacdc::print_footer_gruppo(const int gruppo, const int conto, const long sottoconto) -{ - TString16 key; - key.format("%d|%d|%ld", gruppo, conto, sottoconto); - TString tmp; - const TRectype& pcon = cache().get(LF_PCON, key); - tmp.format("TOTALE %d %d %ld %s", gruppo, conto, sottoconto, (const char*) pcon.get(PCN_DESCR)); - //set_field(FR_SOTTOC, ""); - //set_field(FR_D_SOTTOC, tmp); - //fill_body(_t_gruppo); - //print_body(); +void TSchedacdc::print_footer_cms() +{ + if (!_t_cms._tot_periodo.is_zero()) + { + TString tmp; + tmp.format("PERIODO COMMESSA %s", (const char*) _oldcms); + _form->find_field('F', first_page, FR_CODICE).set(tmp); + _form->find_field('F', first_page, FR_TOTALE_DARE).set(""); + _form->find_field('F', first_page, FR_TOTALE_AVERE).set(""); + char sezione = _t_cms._tot_periodo.sezione(); + real valore = _t_cms._tot_periodo.valore(); + _form->find_field('F', first_page, FR_TOTALE_SALDO).set(valore.string()); + if ( sezione == 'D') + { + _form->find_field('F', first_page, FR_TOTALE_DARE).set(valore.string()); + _form->find_field('F', first_page, FR_TOTALE_SEGNO).set("D"); + } + else + { + _form->find_field('F', first_page, FR_TOTALE_AVERE).set(valore.string()); + _form->find_field('F', first_page, FR_TOTALE_SEGNO).set("A"); + } + print_specialsection('F', first_page); + tmp.format("GENERALE COMMESSA %s", (const char*) _oldcms); + _form->find_field('F', first_page, FR_CODICE).set(tmp); + _form->find_field('F', first_page, FR_TOTALE_DARE).set(""); + _form->find_field('F', first_page, FR_TOTALE_AVERE).set(""); + sezione = _t_cms._tot_generale.sezione(); + valore = _t_cms._tot_generale.valore(); + _form->find_field('F', first_page, FR_TOTALE_SALDO).set(valore.string()); + if ( sezione == 'D') + { + _form->find_field('F', first_page, FR_TOTALE_DARE).set(valore.string()); + _form->find_field('F', first_page, FR_TOTALE_SEGNO).set("D"); + } + else + { + _form->find_field('F', first_page, FR_TOTALE_AVERE).set(valore.string()); + _form->find_field('F', first_page, FR_TOTALE_SEGNO).set("A"); + } + print_specialsection('F', first_page); + if (_saltopagina) + printer().formfeed(); + } + _t_cms.azzera(); + _oldcms = _currcms; + _headercms = TRUE; } -void TSchedacdc::print_header_gruppo(const int gruppo, const int conto, const long sottoconto) -{ - TString tmp; - TString16 key; - key.format("%d|%d|%ld", gruppo, conto, sottoconto); - const TRectype& pcon = cache().get(LF_PCON, key); - tmp.format("%d %d %ld", gruppo, conto, sottoconto); - _form->find_field('H', even_page, FR_GRUPPOCONTO).set(tmp); - _form->find_field('H', even_page, FR_D_GRUPPOCONTO).set(pcon.get(PCN_DESCR)); - print_specialsection('H', even_page); -} - -void TSchedacdc::print_footer_commessa(const TString& cms) +void TSchedacdc::print_footer_fsc() { - TString tmp; - tmp.format("TOTALE COMMESSA %s", (const char*) cms); - //set_field(FR_D_SOTTOC, tmp); - //fill_body(_t_cms); - //print_body(); - if (_saltopagina) - printer().formfeed(); + if (!_t_fsc._tot_periodo.is_zero()) + { + TString tmp; + tmp.format("PERIODO FASE %s", (const char*) _oldfsc); + _form->find_field('F', first_page, FR_CODICE).set(tmp); + _form->find_field('F', first_page, FR_TOTALE_DARE).set(""); + _form->find_field('F', first_page, FR_TOTALE_AVERE).set(""); + char sezione = _t_fsc._tot_periodo.sezione(); + real valore = _t_fsc._tot_periodo.valore(); + _form->find_field('F', first_page, FR_TOTALE_SALDO).set(valore.string()); + if (sezione == 'D') + { + _form->find_field('F', first_page, FR_TOTALE_DARE).set(valore.string()); + _form->find_field('F', first_page, FR_TOTALE_SEGNO).set("D"); + } + else + { + _form->find_field('F', first_page, FR_TOTALE_AVERE).set(valore.string()); + _form->find_field('F', first_page, FR_TOTALE_SEGNO).set("A"); + } + print_specialsection('F', first_page); + tmp.format("GENERALE FASE %s", (const char*) _oldfsc); + _form->find_field('F', first_page, FR_CODICE).set(tmp); + _form->find_field('F', first_page, FR_TOTALE_DARE).set(""); + _form->find_field('F', first_page, FR_TOTALE_AVERE).set(""); + sezione = _t_fsc._tot_generale.sezione(); + valore = _t_fsc._tot_generale.valore(); + _form->find_field('F', first_page, FR_TOTALE_SALDO).set(valore.string()); + if ( sezione == 'D') + { + _form->find_field('F', first_page, FR_TOTALE_DARE).set(valore.string()); + _form->find_field('F', first_page, FR_TOTALE_SEGNO).set("D"); + } + else + { + _form->find_field('F', first_page, FR_TOTALE_AVERE).set(valore.string()); + _form->find_field('F', first_page, FR_TOTALE_SEGNO).set("A"); + } + print_specialsection('F', first_page); + } + _oldfsc = _currfsc; + _t_fsc.azzera(); + _headerfsc = TRUE; } -void TSchedacdc::print_footer_fase(const TString& fsc) -{ - TString tmp; - tmp.format("TOTALE FASE %s", (const char*) fsc); - //set_field(FR_D_SOTTOC, tmp); - //fill_body(_t_fsc); - //print_body(); - if (_saltopagina) - printer().formfeed(); -} - -void TSchedacdc::print_header_commessa(const TString& cms) +void TSchedacdc::print_header_sottoc() { - _form->find_field('H', odd_page, FR_CMS).set(cms); - _form->find_field('H', odd_page, FR_D_CMS).set(cache().get("CMS", cms).get("S0")); + TString16 key; + key.format("%d|%d|%ld", _oldgruppo, _oldconto, _oldsottoc); + const TRectype& pcon = cache().get(LF_PCON, key); + key.format("%d", _oldgruppo); + _form->find_field('B', first_page, FR_GRUPPO).set(key); + key.format("%d", _oldconto); + _form->find_field('B', first_page, FR_CONTO).set(key); + key.format("%ld", _oldsottoc); + _form->find_field('B', first_page, FR_SOTTOC).set(key); + _form->find_field('B', first_page, FR_D_SOTTOC).set(pcon.get(PCN_DESCR)); + TString tmp; + _form->find_field('B', first_page, FR_S_DARE).set(""); + _form->find_field('B', first_page, FR_S_AVERE).set(""); + char sezione = _t_sottoc._tot_perprec.sezione(); + real valore = _t_sottoc._tot_perprec.valore(); + if ( sezione == 'D') + _form->find_field('B', first_page, FR_S_DARE).set(valore.string()); + else + _form->find_field('B', first_page, FR_S_AVERE).set(valore.string()); + + print_specialsection('B', first_page); +} + +void TSchedacdc::print_header_cms() +{ + _form->find_field('H', odd_page, FR_CMS).set(_oldcms); + _form->find_field('H', odd_page, FR_D_CMS).set(cache().get("CMS", _oldcms).get("S0")); print_specialsection('H', odd_page); } -void TSchedacdc::print_header_fase(const TString& fsc) +void TSchedacdc::print_header_fsc() { - _form->find_field('H', last_page, FR_FSC).set(fsc); - _form->find_field('H', last_page, FR_D_FSC).set(cache().get("FSC", fsc).get("S0")); + _form->find_field('H', last_page, FR_FSC).set(_oldfsc); + _form->find_field('H', last_page, FR_D_FSC).set(cache().get("FSC", _oldfsc).get("S0")); print_specialsection('H', last_page); } @@ -283,15 +462,6 @@ void TSchedacdc::set_field(int id, const char* val) _form->find_field('B', odd_page, id).set(val); } -void TSchedacdc::ctrl_commessa() -{ - if (_oldcms != "@@") - print_footer_commessa(_oldcms); - _t_cms.azzera(); - print_header_commessa(_currcms); - _oldcms = _currcms; -} - void TSchedacdc::main_loop() { while (_mask->run() == K_ENTER) @@ -300,6 +470,10 @@ void TSchedacdc::main_loop() _codes = _mask->get_int(F_ANNO); // esercizio _dataini = _mask->get_date(F_DATAINI); // data iniziale _datafin = _mask->get_date(F_DATAFIN); // data finale + if (_dataini.empty()) + _dataini = cache().get("ESC", _mask->get(F_ANNO)).get_date("D0"); + if (_datafin.empty()) + _datafin = cache().get("ESC", _mask->get(F_ANNO)).get_date("D1"); TString80 dacdc = _mask->get(F_DACDC); // cdc/commessa iniziale TString80 dafsc = _mask->get(F_DAFSC); // fase iniziale TString80 acdc = _mask->get(F_ACDC); // cdc/commessa finale @@ -352,76 +526,69 @@ void TSchedacdc::main_loop() arec.put(RMV_GRUPPO, _mask->get_int(F_GRUPPOFIN)); arec.put(RMV_CONTO, _mask->get_int(F_CONTOFIN)); arec.put(RMV_SOTTOCONTO, _mask->get_long(F_SOTTOCFIN)); - - // ordinamento per TSorted_cursor - TString ordin = "CODCMS|FASCMS|GRUPPO|CONTO|SOTTOCONTO|DATAREG|NUMREG|NUMRIG"; + + TString ordin = "GRUPPO|CONTO|SOTTOCONTO|DATAREG|NUMREG|NUMRIG"; + bool ctrlfsc = TRUE; + if (dafsc.empty() && afsc.empty()) + { + ctrlfsc = FALSE; + ordin.insert("CODCMS|"); + } + else + ordin.insert("CODCMS|FASCMS|"); TSorted_cursor sortcur (&relrmov, ordin, filtro, 2, &darec, &arec); sortcur.setregion(darec,arec); sortcur.setfilter(filtro,TRUE); - long num = sortcur.items(); sortcur.freeze(); printer().open(); -// setta l'intestazione del form... set_intestazione(); TRectype currrec(LF_RMOV); _oldcms = "@@"; - _oldfsc = "@@"; - _oldsottoc = -1; + _oldfsc = (ctrlfsc) ? "@@" : ""; _oldgruppo = -1; _oldconto = -1; + _oldsottoc = -1; _t_cms.azzera(); _t_fsc.azzera(); - _t_gruppo.azzera(); - real tot_progprec = ZERO; + _t_sottoc.azzera(); + _headercms = TRUE; + _headerfsc = (ctrlfsc) ? TRUE : FALSE; + _headersottoc = TRUE; for (sortcur=0; sortcur.pos()= _dataini && datareg <= _datafin) + print_movimento(sortcur); } if (num > 0) { - print_footer_gruppo(_currgruppo, _currconto, _currsottoc); - print_footer_fase(_currfsc); - print_footer_commessa(_currcms); + if (ctrlfsc) + print_footer_fsc(); + print_footer_cms(); printer().formfeed(); } printer().close(); diff --git a/cm/cm0200.h b/cm/cm0200.h index 71c56cbe1..bbcc09b6a 100755 --- a/cm/cm0200.h +++ b/cm/cm0200.h @@ -1,25 +1,39 @@ // campi del form cm0100a.frm -#define FR_ESERCIZIO 11 -#define FR_DATAINI 12 -#define FR_DATAFIN 13 -#define FR_DACDC 14 -#define FR_DAFSC 15 -#define FR_ACDC 16 -#define FR_AFSC 17 +#define FR_ESERCIZIO 11 +#define FR_DATAINI 12 +#define FR_DATAFIN 13 +#define FR_DACDC 14 +#define FR_DAFSC 15 +#define FR_ACDC 16 +#define FR_AFSC 17 -#define FR_CMS 21 -#define FR_D_CMS 22 -#define FR_FSC 23 -#define FR_D_FSC 24 -#define FR_GRUPPOCONTO 25 -#define FR_D_GRUPPOCONTO 26 -#define FR_PROGPREC 27 - +#define FR_CMS 21 +#define FR_D_CMS 22 +#define FR_FSC 23 +#define FR_D_FSC 24 -#define FR_DATAREG 31 -#define FR_NUMREG 32 -#define FR_DESCRMOV 33 -#define FR_CODCAUS 34 -#define FR_DARE 35 -#define FR_AVERE 36 +#define FR_GRUPPO 31 +#define FR_CONTO 32 +#define FR_SOTTOC 33 +#define FR_D_SOTTOC 35 +#define FR_S_DARE 36 +#define FR_S_AVERE 37 +#define FR_S_SALDO 38 + +#define FR_DATAREG 41 +#define FR_NUMREG 42 +#define FR_DATADOC 43 +#define FR_NUMDOC 44 +#define FR_DESCRMOV 45 +#define FR_CAUSALE 46 +#define FR_D_CAUSALE 47 +#define FR_DARE 48 +#define FR_AVERE 49 +#define FR_SALDO 50 + +#define FR_CODICE 61 +#define FR_TOTALE_DARE 62 +#define FR_TOTALE_AVERE 63 +#define FR_TOTALE_SALDO 64 +#define FR_TOTALE_SEGNO 65 diff --git a/cm/cm0200a.frm b/cm/cm0200a.frm index 51518e849..093a1ac5d 100755 --- a/cm/cm0200a.frm +++ b/cm/cm0200a.frm @@ -1,39 +1,48 @@ #include "cm0200.h" + GENERAL BEGIN - OFFSET 0 0 - FONT "Courier New" - SIZE 12 - GRID "" + OFFSET 0 0 + FONT "Courier New" + SIZE 12 + GRID "" END -SECTION HEADER FIRST 7 +SECTION HEADER FIRST 6 -STRINGA 1 40 1 +STRINGA 1 5 BEGIN - KEY "nome ditta" - PROMPT 1 1 "Ditta " - MESSAGE _DITTA, !RAGSOC + KEY "Codice ditta" + PROMPT 1 1 "Ditta " + MESSAGE _DITTA,CODDITTA + PICTURE "#####" END -STRINGA 2 10 +STRINGA 2 40 BEGIN - KEY "Data" - PROMPT 100 1 "Data " - MESSAGE _TODAY + KEY "nome ditta" + PROMPT 13 1 "" + MESSAGE _DITTA,RAGSOC END -NUMERO 3 7 +STRINGA 3 10 BEGIN - KEY "Nr. pagina" - PROMPT 120 1 "Pagina " - MESSAGE _PAGENO + KEY "Data" + PROMPT 100 1 "Data " + MESSAGE _TODAY END -STRINGA -1 22 +NUMERO 4 7 +BEGIN + KEY "Nr. pagina" + PROMPT 120 1 "Pagina " + MESSAGE _PAGENO +END + +STRINGA -1 BEGIN KEY "Intestazione stampa" - PROMPT 1 2 "Conti per CDC/Commessa" + PROMPT 1 2 "Scheda per CDC/Commessa" END NUMERO FR_ESERCIZIO 16 @@ -80,147 +89,262 @@ END END // section header first -SECTION HEADER ODD 1 - +// intestazione commessa +SECTION HEADER ODD 2 + STRINGA FR_CMS 20 BEGIN - KEY "Intestazione commessa" - PROMPT 1 1 "CDC/Commessa " + KEY "Codice commessa" + PROMPT 1 2 "@bCDC/Commessa " END STRINGA FR_D_CMS 50 BEGIN - KEY "Intestazione commessa" - PROMPT 35 1 "" + KEY "Descrizione commessa" + PROMPT 35 2 "@b" END END // section header odd -SECTION HEADER LAST 4 +// intestazione fase +SECTION HEADER LAST 1 STRINGA FR_FSC 20 BEGIN - KEY "Intestazione fase" - PROMPT 1 1 "Fase " + KEY "Codice fase" + PROMPT 1 1 "@bFase " END STRINGA FR_D_FSC 50 BEGIN - KEY "Intestazione fase" - PROMPT 35 1 "" -END - -STRINGA -1 -BEGIN - KEY "Intestazione stampa" - PROMPT 1 2 "------------------------------------------------------------------------------------------------------------------------------------" -END - -STRINGA -1 -BEGIN - KEY "Intestazione stampa" - PROMPT 1 3 "Gr./Co./Sot." -END - -STRINGA -1 -BEGIN - KEY "Intestazione stampa" - PROMPT 14 3 "Data reg." -END - -STRINGA -1 -BEGIN - KEY "Intestazione stampa" - PROMPT 25 3 "N. reg." -END - -STRINGA -1 -BEGIN - KEY "Intestazione stampa" - PROMPT 33 3 "Descrizione movimento" -END - -STRINGA -1 -BEGIN - KEY "Intestazione stampa" - PROMPT 100 3 "Dare" -END - -STRINGA -1 -BEGIN - KEY "Intestazione stampa" - PROMPT 115 3 "Avere" -END - -STRINGA -1 -BEGIN - KEY "Intestazione stampa" - PROMPT 1 4 "------------------------------------------------------------------------------------------------------------------------------------" + KEY "Descrizione fase" + PROMPT 35 1 "@b" END END // section header last -SECTION HEADER EVEN 2 +// intestazione vera e proprioa della stampa (a parte perché va stampata o dopo la commessa e dopo la fase) +SECTION HEADER EVEN 3 -STRINGA FR_GRUPPOCONTO 12 +STRINGA -1 BEGIN KEY "Intestazione stampa" - PROMPT 1 1 "" + PROMPT 1 1 "------------------------------------------------------------------------------------------------------------------------------------" END -STRINGA FR_D_GRUPPOCONTO 50 +STRINGA -1 BEGIN KEY "Intestazione stampa" - PROMPT 14 1 "" + PROMPT 1 2 "Gr./Co./Sot." +END + +STRINGA -1 +BEGIN + KEY "Intestazione stampa" + PROMPT 16 2 "Data reg." +END + +STRINGA -1 +BEGIN + KEY "Intestazione stampa" + PROMPT 27 2 "N. reg." +END + +STRINGA -1 +BEGIN + KEY "Intestazione stampa" + PROMPT 35 2 "N. doc." +END + +STRINGA -1 +BEGIN + KEY "Intestazione stampa" + PROMPT 43 2 "Data doc." +END + +STRINGA -1 +BEGIN + KEY "Intestazione stampa" + PROMPT 54 2 "Causale" +END + +STRINGA -1 +BEGIN + KEY "Intestazione stampa" + PROMPT 94 2 "Dare" +END + +STRINGA -1 +BEGIN + KEY "Intestazione stampa" + PROMPT 108 2 "Avere" +END + +STRINGA -1 +BEGIN + KEY "Intestazione stampa" + PROMPT 123 2 "Saldo" +END + +STRINGA -1 +BEGIN + KEY "Intestazione stampa" + PROMPT 1 3 "------------------------------------------------------------------------------------------------------------------------------------" END END // section header even - + +// intestazione gruppo/conto/sottoconto SECTION BODY FIRST 1 - -NUMERO FR_PROGPREC 14 2 + +NUMERO FR_GRUPPO 3 BEGIN - KEY "Progressivo precedente" - PROMPT 14 1 "Prog. prec. " - PICTURE "###.###.###,##" + KEY "Gruppo" + PROMPT 1 1 "" END -END // section header last +NUMERO FR_CONTO 3 +BEGIN + KEY "Conto" + PROMPT 5 1 "" +END -SECTION BODY ODD 1 +NUMERO FR_SOTTOC 6 +BEGIN + KEY "" + PROMPT 9 1 "" +END +STRINGA FR_D_SOTTOC 50 +BEGIN + KEY "Descrizione sottoconto" + PROMPT 16 1 "" +END + +STRINGA -1 +BEGIN + KEY "Testo: progressivo precedente" + PROMPT 68 1 "PROG. PREC. " +END + +VALUTA FR_S_DARE 14 +BEGIN + KEY "Colonna dare prog.prec. sottoconto" + PROMPT 84 1 "" + PICTURE "." +END + +VALUTA FR_S_AVERE 14 +BEGIN + KEY "Colonna avere prog.prec. sottoconto" + PROMPT 99 1 "" + PICTURE "." +END + +VALUTA FR_S_SALDO 14 +BEGIN + KEY "Colonna saldo prog.prec. sottoconto" + PROMPT 114 1 "" + PICTURE "." +END + +END // section body first + +// riga del movimento +SECTION BODY ODD 2 + DATA FR_DATAREG BEGIN - PROMPT 14 1 "" + PROMPT 16 1 "" END NUMERO FR_NUMREG 7 BEGIN - PROMPT 25 1 "" + PROMPT 27 1 "" END -STRINGA FR_DESCRMOV 30 2 +STRINGA FR_DESCRMOV 45 BEGIN - PROMPT 33 1 "" + PROMPT 35 1 "" END -STRINGA FR_CODCAUS 3 +STRINGA FR_NUMDOC 7 BEGIN - PROMPT 71 1 "" + PROMPT 35 2 "" END -NUMERO FR_DARE 14 2 +DATA FR_DATADOC 10 BEGIN - PROMPT 100 1 "" - PICTURE "###.###.###,##" + PROMPT 43 2 "" END -NUMERO FR_AVERE 14 2 +STRINGA FR_CAUSALE 3 BEGIN - PROMPT 115 1 "" - PICTURE "###.###.###,##" + PROMPT 54 2 "" END -END // section body +STRINGA FR_D_CAUSALE 25 +BEGIN + PROMPT 58 2 "" +END + +VALUTA FR_DARE 14 +BEGIN + PROMPT 84 1 "" + PICTURE "." +END + +VALUTA FR_AVERE 14 +BEGIN + PROMPT 99 1 "" + PICTURE "." +END + +VALUTA FR_SALDO 14 +BEGIN + PROMPT 99 1 "" + PICTURE "." +END + + +END // section body odd + +// totali per commessa o fase +SECTION FOOTER FIRST 1 + +STRINGA FR_CODICE 50 +BEGIN + KEY "Codice commessa o fase" + PROMPT 1 1 "TOTALI " +END + +VALUTA FR_TOTALE_DARE 14 +BEGIN + KEY "Colonna dare totale periodo o generale" + PROMPT 84 1 "" + PICTURE "." +END + +VALUTA FR_TOTALE_AVERE 14 +BEGIN + KEY "Colonna avere totale periodo o generale" + PROMPT 99 1 "" + PICTURE "." +END + +VALUTA FR_TOTALE_SALDO 14 +BEGIN + KEY "Colonna saldo totale periodo" + PROMPT 114 1 "" + PICTURE "." +END + +STRINGA FR_TOTALE_SEGNO 1 +BEGIN + KEY "Segno D/A del saldo" + PROMPT 129 1 "" +END + +END // section footer first END // form diff --git a/cm/cm0200a.uml b/cm/cm0200a.uml index 2567cca4f..93fcce474 100755 --- a/cm/cm0200a.uml +++ b/cm/cm0200a.uml @@ -41,7 +41,6 @@ BEGIN PROMPT 2 4 "Codice esercizio " HELP "Codice esercizio per cui si vuole la lista" USE ESC - CHECKTYPE NORMAL INPUT CODTAB F_ANNO DISPLAY "Codice" CODTAB DISPLAY "Data inizio esercizio" D0 @@ -49,6 +48,8 @@ BEGIN OUTPUT F_ANNO CODTAB FLAGS "RZ" ADD RUN cg0 -5 esc + CHECKTYPE REQUIRED + WARNING "Codice esercizio obbligatorio" END DATE F_DATAINI diff --git a/cm/cmprassi.men b/cm/cmprassi.men new file mode 100755 index 000000000..af15e33d5 --- /dev/null +++ b/cm/cmprassi.men @@ -0,0 +1,7 @@ +[PRASSICM_000] +Caption = "Commesse" +Picture = +Module = 15 +Flags = "" +Item_01 = "Stampa conti per CDC/Commessa", "cm0.exe -0","F" +Item_02 = "Stampa scheda CDC/Commessa", "cm0.exe -1","F" diff --git a/ef/ef0301.cpp b/ef/ef0301.cpp index d1af44cfd..3b64069da 100755 --- a/ef/ef0301.cpp +++ b/ef/ef0301.cpp @@ -131,3 +131,14 @@ int TDistinta::remove(char tipodist, long ndist) reset();//elimino gli effetti dalla memoria resettando l'array return err; } + +bool TDistinta::contabilizzata() const +{ + bool yes = FALSE; + if (_righe_dist.items() > 0) + { + const TRectype& eff = (const TRectype&)_righe_dist[0]; + yes = eff.get_bool(EFF_EFFCONT); + } + return yes; +} diff --git a/ef/ef0301.h b/ef/ef0301.h index 795791200..33751a896 100755 --- a/ef/ef0301.h +++ b/ef/ef0301.h @@ -59,6 +59,8 @@ public: const TString& cabp()const { return eff(0).get(EFF_CODCABP); } // restituisce l'effetto n-esimo TEffetto& operator[](const int index) { return eff(index); } + // Ritorna vero se la distinta č stata contabilizzata + bool contabilizzata() const; //costruttore di default TDistinta() { } //costruttore distinta del tipo e numero passato diff --git a/ef/ef0500.cpp b/ef/ef0500.cpp index 72b3f69b6..fbe24be45 100755 --- a/ef/ef0500.cpp +++ b/ef/ef0500.cpp @@ -557,14 +557,14 @@ void TEmissione::print() int emis = _msk->get_int(F_EMIS); int ndist = _msk->get_int(F_NUMBER); char tipodist = _msk->get(F_TIPODIST)[0]; - _rel->lfile().put(EFF_TIPODIST,tipodist); - _rel->lfile().put(EFF_NDIST,ndist); - _rel->lfile().put(EFF_NRIGADIST,1); + _rel->curr().put(EFF_TIPODIST,tipodist); + _rel->curr().put(EFF_NDIST,ndist); + _rel->curr().put(EFF_NRIGADIST,1); _rel->lfile().setkey(4); _rel->read(); - long codabi = _rel->lfile().get_long(EFF_CODABIP); - const char tipocf = _rel->lfile().get_char(EFF_TIPOCF); - const char tipopag = _rel->lfile().get_char(EFF_TIPOPAG); + long codabi = _rel->curr().get_long(EFF_CODABIP); + const char tipocf = _rel->curr().get_char(EFF_TIPOCF); + const char tipopag = _rel->curr().get_char(EFF_TIPOPAG); char tipost = _msk->get(F_TIPOST)[0]; char tipord = _msk->get(F_TIPORD)[0]; @@ -728,7 +728,7 @@ bool TRiba_form::validate(TForm_item &cf, TToken_string &s) in.ltrim(1); TRelation* rel = relation(); - const bool pick_normal = rel->lfile(LF_CFVEN).get_int(CFV_CODINDEFF) == 0; + const bool pick_normal = rel->curr(LF_CFVEN).get_int(CFV_CODINDEFF) == 0; if (in=="IND") { @@ -755,10 +755,10 @@ bool TRiba_form::validate(TForm_item &cf, TToken_string &s) } else if (in=="RAGSOC") - valore = rel->lfile(pick_normal ? LF_CLIFO : LF_INDSP).get(pick_normal ? CLI_RAGSOC : IND_RAGSOC); + valore = rel->curr(pick_normal ? LF_CLIFO : LF_INDSP).get(pick_normal ? CLI_RAGSOC : IND_RAGSOC); else if (in=="CAPCF") - valore = rel->lfile(pick_normal ? LF_CLIFO : LF_INDSP).get(pick_normal ? CLI_CAPCF : IND_CAP); + valore = rel->curr(pick_normal ? LF_CLIFO : LF_INDSP).get(pick_normal ? CLI_CAPCF : IND_CAP); } cf.put_paragraph(valore); return (TRUE); diff --git a/ef/rb.frm b/ef/rb.frm index 54f0bf0a8..0a855ed04 100755 --- a/ef/rb.frm +++ b/ef/rb.frm @@ -1,6 +1,6 @@ USE 31 JOIN 14 INTO NPROGTR==NPROGTR -JOIN 20 INTO TIPOCF=="C" CODCF==CODCF +JOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF JOIN 17 TO 20 INTO TIPOCF==TIPOCF CODCF==CODCF JOIN 16 TO 17 INTO TIPOCF==TIPOCF CODCF==CODCF CODIND==CODINDEFF JOIN 13 TO 20 ALIAS 113 INTO COM==COMCF diff --git a/include/currency.cpp b/include/currency.cpp index 129b6caad..366d56161 100755 --- a/include/currency.cpp +++ b/include/currency.cpp @@ -49,9 +49,9 @@ public: real exchange(const real& num, const char* fromval, const real& fromchg, exchange_type fromeuro, const char* toval, const real& tochg, exchange_type toeuro, - bool price = FALSE); + int price = 0); - real exchange(const real& num, const TExchange& frval, const TExchange& toval, bool price = FALSE); + real exchange(const real& num, const TExchange& frval, const TExchange& toval, int price = 0); int get_dec(const char* val, bool prices = FALSE); const real& get_change(const char* val, exchange_type& contro_euro); @@ -208,7 +208,7 @@ real TDowJones::exchange(const real& num, // Importo da convertire const char* toval, // Alla valuta const real& tochg, // Al cambio exchange_type toeur, // Al cambio in euro - bool price) // e' un prezzo ? + int price) // e' un prezzo ? { real n = num; if (!n.is_zero()) @@ -238,7 +238,8 @@ real TDowJones::exchange(const real& num, // Importo da convertire n = n * fr / to; // Vecchio modo break; } - n.round(price ? datato._dec_prices : datato._dec); // Arrotonda + if (price == 0 || price == 1) // Arrotonda solo in caso normale + n.round(price ? datato._dec_prices : datato._dec); } return n; } @@ -246,7 +247,7 @@ real TDowJones::exchange(const real& num, // Importo da convertire real TDowJones::exchange(const real& num, // Importo da convertire const TExchange& frval, // Dalla valuta const TExchange& toval, // Alla valuta - bool price) // e' un prezzo ? + int price) // e' un prezzo ? { exchange_type fret, toet; const real& frch = frval.get_change(fret); @@ -393,6 +394,11 @@ bool TExchange::is_euro_value() const return DowJones.get_euro_val() == _val; } +int TExchange::decimals(bool price) const +{ + return DowJones.get_dec(_val, price); +} + void TExchange::set(const char* val, const real& chg, exchange_type et) { val = DowJones.normalize_value(val, chg, et); @@ -632,3 +638,11 @@ bool same_values(const char * valuea, const char * valueb) return stricmp(valuea, valueb) == 0; } + +real change_currency(const real& num, + const char* fromval, const real& fromchg, exchange_type fromeuro, + const char* toval, const real& tochg, exchange_type toeuro, + int price) +{ + return DowJones.exchange(num, fromval, fromchg, fromeuro, toval, tochg, toeuro, price); +} diff --git a/include/currency.h b/include/currency.h index 99977ce5a..914eff617 100755 --- a/include/currency.h +++ b/include/currency.h @@ -38,6 +38,7 @@ public: const real& get_change(exchange_type& et) const; real get_base_change() const; real get_contro_change() const; + int decimals(bool price = FALSE) const; TExchange(const char* val = NULL, const real& exc = ZERO, exchange_type et = _exchange_undefined); TExchange(const TExchange& exc) { copy(exc); } @@ -138,4 +139,10 @@ inline bool is_true_value(const char * value) { return !is_firm_value(value);} inline bool is_euro_value(const char * value) { return (value && *value) ? TCurrency::get_euro_val() == value : TCurrency::get_euro_val() == TCurrency::get_firm_val();} bool same_values(const char * valuea, const char * valueb); +// Funzione di levello super-basso: usate solo se sapete bene cosa state facendo +real change_currency(const real& num, + const char* fromval, const real& fromchg, exchange_type fromeuro, + const char* toval, const real& tochg, exchange_type toeuro = _exchange_undefined, + int price_round = 0); + #endif diff --git a/include/strings.cpp b/include/strings.cpp index b7daad043..b8cf9a014 100755 --- a/include/strings.cpp +++ b/include/strings.cpp @@ -448,7 +448,7 @@ const TString& TString::mid( #ifdef DBG if (from < 0) { - NFCHECK("Ivalid MID parameter: from = %d", from); + NFCHECK("Invalid MID parameter: from = %d", from); from = 0; } #endif @@ -944,7 +944,9 @@ void TFixed_string::resize(int size, bool) void TFixed_string::strncpy(const char* s, int n) { CHECKD(n <= _size, "Fixed string can't be strncpyed: lenght ", n); - for (int i = 0; *s && i < n; i++) _str[i] = *s++; + int i = 0; + if (s && *s) + for (; *s && i < n; i++) _str[i] = *s++; _str[i] = '\0'; } diff --git a/m770/771230.cpp b/m770/771230.cpp index ad2ee8387..217595370 100755 --- a/m770/771230.cpp +++ b/m770/771230.cpp @@ -1,4 +1,6 @@ -// 771230.cpp - Quadri C, D, D bis, D1, E, E1, E2 +// 771230.cpp - Quadri C, D, D bis, D1, E, E1, E2, +// Dal 2002 il Quadro LA riassume SC ed SE, che a loro volta erano D e D1) + #include #include #include @@ -142,7 +144,7 @@ void TRighe_pagamento::add_riga(const TRectype& scheda, const TRectype& riga) class TQuadroC_E2 : public TRelation_application { private: - TString _quadro; // Codice del quadro in gestione + TString8 _quadro; // Codice del quadro in gestione int _file; bool _registra; // Se TRUE fa i riporti TRelation* _rel; @@ -157,6 +159,7 @@ private: bool QuadroE() const { return _quadro == "E"; } bool QuadroE1() const { return _quadro == "E1"; } bool QuadroE2() const { return _quadro == "E2"; } + bool QuadroLA() const { return _quadro == "LA"; } protected: virtual bool user_create(); @@ -190,6 +193,7 @@ protected: void genera_d1(TRectype& quadro, const TRectype& riga) const; void genera_e(TRectype& quadro, const TRectype& riga) const; void genera_e1(TRectype& quadro, const TRectype& riga) const; + void genera_la(TRectype& quadro, const TRectype& riga) const; void genera_righe(TRighe_pagamento& righe) const; void distruzione() const; void generazione(); @@ -202,6 +206,7 @@ protected: static bool ricalcola_imposte_d(TMask_field& f, KEY key); static bool ricalcola_imposte_dbis(TMask_field& f, KEY key); static bool ricalcola_imposte_e(TMask_field& f, KEY key); + static bool ricalcola_imposte_la(TMask_field& f, KEY key); static bool ricalcola_imposte_e1(TMask_field& f, KEY key); static bool prospetto_e1_notify(TSheet_field& s, int r, KEY k); @@ -356,7 +361,7 @@ bool TQuadroC_E2::user_create() _codditta = get_firm_770(); _registra = FALSE; - TString name("771230"); + TString8 name("771230"); name << _quadro; _msk = new TMask(name); @@ -377,7 +382,7 @@ bool TQuadroC_E2::user_create() m.set_handler(107, ricalcola_imposte_c); m.set_handler(108, ricalcola_imposte_c); } else - if (QuadroD()) + if (QuadroD()) // Obsoleto dal 2002: confluito in LA { _file = LF_QUAD; m.set_handler(102, ricalcola_imposte_d); @@ -386,7 +391,7 @@ bool TQuadroC_E2::user_create() m.set_handler(106, ricalcola_imposte_d); m.set_handler(107, ricalcola_imposte_d); } else - if (QuadroD1()) + if (QuadroD1()) // Obsoleto dal 2002: confluito in LA { _file = LF_QUAD1; m.set_handler(102, ricalcola_imposte_d); @@ -427,6 +432,15 @@ bool TQuadroC_E2::user_create() m.set_handler(103, ricalcola_imposte_e2); m.set_handler(104, ricalcola_imposte_e2); m.set_handler(105, ritenute_handler_e2); + } else + if (QuadroLA()) // Nuovo del 2002: riassume SC ed SE + { + _file = LF_QUALA; + m.set_handler(102, ricalcola_imposte_la); + m.set_handler(105, ricalcola_imposte_la); + m.set_handler(106, ricalcola_imposte_la); + m.set_handler(107, ricalcola_imposte_la); + m.set_handler(108, ricalcola_imposte_la); } _rel = new TRelation(_file); @@ -708,6 +722,31 @@ void TQuadroC_E2::genera_e1(TRectype& quadro, const TRectype& riga) const genera_aliquota(quadro, QE1_PERC, QE1_AMMONTARE, QUE_IMPORTO); // 14 } +void TQuadroC_E2::genera_la(TRectype& quadro, const TRectype& riga) const +{ + quadro.put(QUD_PERC, riga.get(PAG_PERC)); + + real ammlordo = riga.get(PAG_IMPONIBILE); + ammlordo += riga.get_real(PAG_SOMNSRIT); + ammlordo += riga.get_real(PAG_CONTROBB); + ammlordo += riga.get_real(PAG_SOMREGCONV); + quadro.put(QUD_TOTALE, ammlordo); // 16 + + real somme = riga.get_real(PAG_COMPENSO); + somme -= riga.get_real(PAG_IMPONIBILE); + somme += riga.get_real(PAG_SPESA); + somme -= riga.get_real(PAG_IMPCPA); + somme -= riga.get_real(PAG_SOMREGCONV); + quadro.put(QUD_SOMME, somme); // 17 + + quadro.put(QUD_SOMREGCONV, riga.get(PAG_SOMREGCONV)); // 18 + quadro.put(QUD_IMPONIBILE, riga.get(PAG_IMPONIBILE)); // 19 + quadro.put(QUD_IMPORTO, riga.get(PAG_RITENUTA)); // 20 + + genera_aliquota(quadro, QUD_PERC, QUD_IMPONIBILE, QUD_IMPORTO); +} + + void TQuadroC_E2::genera_righe(TRighe_pagamento& righe) const { TLocalisamfile file(_file); @@ -750,6 +789,10 @@ void TQuadroC_E2::genera_righe(TRighe_pagamento& righe) const genera_e(curr, riga); } break; + case 'L': + if (_quadro[1] == 'A') + genera_la(curr, riga); + break; default: CHECK(FALSE, "Quadro non generabile dalle schede"); break; @@ -826,11 +869,11 @@ void TQuadroC_E2::generazione() TCursor cur(&rel, NULL, 1, &rec, &rec); - TString16 filter; filter.format("(%d->S1=\"%s\")", LF_TABCOM, (const char*) _quadronuovo); + TString16 filter; filter.format("(%d->S1=\"%s\")", LF_TABCOM, (const char*)_quadronuovo); cur.setfilter(filter, TRUE); const int anno770 = anno_770(); - const long items = cur.items(); + const long items = cur.items(); const TRectype& scheda = cur.curr(); const TRectype& riga = cur.curr(LF_RPAG); @@ -993,7 +1036,10 @@ bool TQuadroC_E2::ricalcola_imposte_d(TMask_field& f, KEY key) else { if (key == K_ENTER && imponibile != imponibile_v) - f.warning_box("L'imponibile dovrebbe essere %s", imponibile_v.string(".")); + { + const TCurrency imponibile_c(imponibile_v); + f.warning_box("L'imponibile dovrebbe essere %s", imponibile_c.string(TRUE)); + } } const real imposta_v = m.get_real(102) * imponibile / 100.0; @@ -1006,7 +1052,10 @@ bool TQuadroC_E2::ricalcola_imposte_d(TMask_field& f, KEY key) else { if (key == K_ENTER && imposta != imposta_v) - f.warning_box("L'imposta dovrebbe essere %s", imposta_v.string(".")); + { + const TCurrency imposta_c(imposta_v); + f.warning_box("L'imposta dovrebbe essere %s", imposta_c.string(TRUE)); + } } } return TRUE; @@ -1129,6 +1178,55 @@ bool TQuadroC_E2::ricalcola_imposte_e2(TMask_field& f, KEY key) return TRUE; } +bool TQuadroC_E2::ricalcola_imposte_la(TMask_field& f, KEY key) +{ + if (key == K_F8) + { + f.reset(); + f.set_dirty(); + key == K_TAB; + } + + if (key == K_TAB && f.focusdirty() || + key == K_ENTER && f.dlg() == 105) + { + TMask& m = f.mask(); + + const real imponibile_v = m.get_real(105) - m.get_real(106) - m.get_real(107); + real imponibile = m.get(108); + if (imponibile.is_zero()) + { + imponibile = imponibile_v; + m.set(108, imponibile); + } + else + { + if (key == K_ENTER && imponibile != imponibile_v) + { + const TCurrency imponibile_c(imponibile_v); + f.warning_box("L'imponibile dovrebbe essere %s", imponibile_c.string(TRUE)); + } + } + + const real imposta_v = m.get_real(102) * imponibile / 100.0; + real imposta = m.get(109); + if (imposta.is_zero()) + { + imposta = imposta_v; + m.set(109, imposta); + } + else + { + if (key == K_ENTER && imposta != imposta_v) + { + const TCurrency imposta_c(imposta_v); + f.warning_box("L'imposta dovrebbe essere %s", imposta_c.string(TRUE)); + } + } + } + return TRUE; +} + bool TQuadroC_E2::ritenute_handler_e2(TMask_field& f, KEY key) { if (key == K_TAB && f.focusdirty() || key == K_ENTER) @@ -1210,43 +1308,40 @@ int TQuadroC_E2::write_prospetto_e1() const return error; } - int quadriC_E2(int argc, char* argv[]) { TString16 taitol; taitol << "Riepilogo "; - const char * nome_quadro = argv[2]; + const char* nome_quadro = argv[2]; if (strnicmp(nome_quadro, "C", 1) == 0) - taitol << "C"; - else - if (strnicmp(nome_quadro, "DB", 2) == 0) - taitol << "SG"; - else - if (strnicmp(nome_quadro, "D1", 2) == 0) - { - _quadronuovo = "SE"; - taitol << "SE"; - } - else - if (strnicmp(nome_quadro, "D", 1) == 0) - { - _quadronuovo = "SC"; - taitol << "SC"; - } - else - if (strnicmp(nome_quadro, "E1", 2) == 0) - { - _quadronuovo = "SG"; - taitol << "SG"; - } - else - if (strnicmp(nome_quadro, "E", 1) == 0) - { - _quadronuovo = "SF"; - taitol << "SF"; - } - else - taitol << nome_quadro; + taitol << "C"; else + if (strnicmp(nome_quadro, "DB", 2) == 0) + taitol << "SG"; else + if (strnicmp(nome_quadro, "D1", 2) == 0) + { + _quadronuovo = "SE"; + taitol << "SE"; + } else + if (strnicmp(nome_quadro, "D", 1) == 0) + { + _quadronuovo = "SC"; + taitol << "SC"; + } else + if (strnicmp(nome_quadro, "E1", 2) == 0) + { + _quadronuovo = "SG"; + taitol << "SG"; + } else + if (strnicmp(nome_quadro, "E", 1) == 0) + { + _quadronuovo = "SF"; + taitol << "SF"; + } + else + { + _quadronuovo = nome_quadro; + taitol << nome_quadro; + } TQuadroC_E2 a(nome_quadro); a.run(argc, argv, taitol); diff --git a/m770/776100b.uml b/m770/776100b.uml index 1d8aa0a95..9b0e37c30 100755 --- a/m770/776100b.uml +++ b/m770/776100b.uml @@ -305,6 +305,8 @@ END // Prima colonna // +/* Obsoleto dal 2002 + TEXT DLG_NULL_D BEGIN PROMPT 5 12 "Riepilogo SC" @@ -333,6 +335,26 @@ BEGIN GROUP MENU_MAIN MENU_MAIN_VIS END +*/ + +// Roba nuova 2002 + +TEXT DLG_NULL_D +BEGIN + PROMPT 5 12 "Riepilogo LA" + GROUP MENU_MAIN MENU_MAIN_VIS +END + +BUTTON DLG_STOPREC_D 1 1 +BEGIN + PROMPT 1 12 "" + PICTURE 123 + MESSAGE RUN,771MOD,-5,LA|K_TAB,RILEGGI_QUADRI + GROUP MENU_MAIN MENU_MAIN_VIS +END + +// Fine roba nuova 2002 + TEXT DLG_NULL_E BEGIN PROMPT 5 14 "Riepilogo SF" @@ -1114,6 +1136,7 @@ END //Prima colonna +/* Roba obsoleta dal 2002 TEXT T_D BEGIN PROMPT COL1 ROW3 "Riepilogo SC" @@ -1146,6 +1169,28 @@ BEGIN GROUP MENU_STAMPEDICH MENU_STAMPEDICH_VIS END +*/ + +// Roba nuova del 2002 + +TEXT T_D +BEGIN + PROMPT COL1 ROW3 "Riepilogo LA" + FLAGS "H" + GROUP MENU_STAMPEDICH MENU_STAMPEDICH_VIS +END + +BUTTON B_D 1 1 +BEGIN + PROMPT 1 ROW3 "" + PICTURE 123 + MESSAGE RUN,772MOD,-5,LA,D|K_TAB,RILEGGI_QUADRI + FLAGS "H" + GROUP MENU_STAMPEDICH MENU_STAMPEDICH_VIS +END + +// Fine roba nuova del 2002 + TEXT T_E BEGIN PROMPT COL1 ROW5 "Riepilogo SF" diff --git a/m770/batbca7.uml b/m770/batbca7.uml index 80e71c080..ad1d5330a 100755 --- a/m770/batbca7.uml +++ b/m770/batbca7.uml @@ -51,10 +51,8 @@ LIST F_QUADRCE2 2 BEGIN PROMPT 1 3 "Codice quadro " HELP "Inserire il codice quadro" - ITEM "SC|SC" + ITEM "LA|LA" MESSAGE ENABLE,TCF_BINPS|K_SPACE,TCF_BINPS|RESET,G_ICTS@|DISABLE,G_ICTS@|ENABLE,TCF_PERCASSPREV|RESET,GR_NOCAUD@|DISABLE,GR_CAUDD1@|ENABLE,TCF_CAUSD|SHOW,F_DESCR1|HIDE,F_DESCR2 - ITEM "SE|SE" - MESSAGE ENABLE,TCF_BINPS|K_SPACE,TCF_BINPS|RESET,G_ICTS@|DISABLE,G_ICTS@|RESET,TCF_PERCASSPREV|DISABLE,TCF_PERCASSPREV|RESET,GR_NOCAUD1@|DISABLE,GR_CAUDD1@|ENABLE,TCF_CAUSD1|SHOW,F_DESCR1|HIDE,F_DESCR2 ITEM "SF|SF" MESSAGE CLEAR,TCF_BINPS|K_SPACE,TCF_BINPS|RESET,G_ICTS@|DISABLE,G_ICTS@|RESET,TCF_PERCASSPREV|DISABLE,TCF_PERCASSPREV|RESET,GR_NOCAUE@|DISABLE,GR_CAUDD1@|ENABLE,TCF_CAUSE|SHOW,F_DESCR1|HIDE,F_DESCR2 ITEM "SG|SG" @@ -68,10 +66,8 @@ LIST F_QUADRAT 2 BEGIN PROMPT 1 3 "Codice quadro " HELP "Inserire il codice quadro" - ITEM "SC|SC" + ITEM "LA|LA" MESSAGE ENABLE,TCF_BINPS|K_SPACE,TCF_BINPS|RESET,G_ICTS@|DISABLE,G_ICTS@|ENABLE,TCF_PERCASSPREV|RESET,GR_NOCAUD@|DISABLE,GR_CAUDD1@|ENABLE,TCF_CAUSD|SHOW,F_DESCR1|HIDE,F_DESCR2 - ITEM "SE|SE" - MESSAGE ENABLE,TCF_BINPS|K_SPACE,TCF_BINPS|RESET,G_ICTS@|DISABLE,G_ICTS@|RESET,TCF_PERCASSPREV|DISABLE,TCF_PERCASSPREV|RESET,GR_NOCAUD1@|DISABLE,GR_CAUDD1@|ENABLE,TCF_CAUSD1|DISABLE,TCF_CAUSD|SHOW,F_DESCR1|HIDE,F_DESCR2 ITEM "SF|SF" MESSAGE CLEAR,TCF_BINPS|K_SPACE,TCF_BINPS|RESET,G_ICTS@|DISABLE,G_ICTS@|RESET,TCF_PERCASSPREV|DISABLE,TCF_PERCASSPREV|RESET,GR_NOCAUE@|DISABLE,GR_CAUDD1@|ENABLE,TCF_CAUSE|SHOW,F_DESCR1|HIDE,F_DESCR2 ITEM "SG|SG" @@ -85,8 +81,7 @@ END LIST F_CODQUA 2 BEGIN PROMPT 1 3 "" - ITEM "SC|SC" - ITEM "SE|SE" + ITEM "LA|LA" ITEM "SF|SF" ITEM "SG|SG" ITEM "ST|ST" @@ -118,28 +113,30 @@ STRING TCF_CAUSD 1 BEGIN PROMPT 1 6 "Causale LA " FLAGS "U" - SHEET "Codice|Descrizione@250" INPUT TCF_CAUSD ITEM " | " - ITEM "A|per prestazioni di lavoro autonomo rientranti nell'esercizio di arte o professione abituale" - ITEM "B|per prestazioni rese da amministratori, sindaci e revisori di societį, associazione ed altri enti con o senza personalitį giuridica" - ITEM "C|per prestazioni rese da collaboratori a giornali, riviste, enciclopedie e simili (che non costituiscono diritti d'autore)" - ITEM "D|per prestazioni rese da partecipanti a collegi e commissioni" - ITEM "E|per prestazioni rese nell'ambito di rapporti di collaborazione coordinata e continuativa diversi da quelli sopra elencati" - ITEM "F|per indennitį corrisposte per la cessazione di rapporti di collaborazione coordinata e continuativa, assoggettabili a tassazione separata" - ITEM "G|per l'utilizzazione economica, da parte dell'autore o dell'inventore, di opere dell'ingegno, di brevetti industriali e di processi, formule o informazioni relativi ad esperienze acquisite in campo industriale, commerciale o scientifico" - ITEM "H|a titolo di utili derivanti da contratti di associazione in partecipazione e da contratti di cointeressenza, quando l'apporto é costituito esclusivamente dalla prestazione di lavoro" - ITEM "I|a titolo di utili spettanti ai soci promotori ed ai soci fondatori delle societį di capitali" - ITEM "K|per la levata di protesti cambiari da parte di segretari comunali" - ITEM "L|per prestazioni rese dagli sportivi con contratto di lavoro autonomo" - ITEM "M|a titolo di indennitį corrisposte per la cessazione di attivitį sportiva professionale" - ITEM "N|a titolo di indennitį corrisposte per la cessazione dei rapporti di agenzia delle persone fisiche" - ITEM "P|a titolo di indennitį corrisposte per la cessazione da funzioni notarili" - ITEM "Q|per l'utilizzazione economica, da parte di soggetto diverso dall'autore o dall'inventore, di opere dell'ingegno, di brevetti industriali e di processi, formule e informazioni relativi ad esperienze acquisite in campo indust., commer. o scient." - ITEM "R|per prestazioni di lavoro autonomo non esercitate abitualmente" - ITEM "S|a titolo di indennitį di trasferta o di rimborso forfetario di spese spettanti a soggetti che svolgono attivitį sportiva dilettantistica di cui alla L n. 80 del 1986" - ITEM "T|per altro titolo diverso dai precedenti" + ITEM "A|Prestazioni di lavoro autonomo rientranti nell'esercizio di arte o professione abituale" + ITEM "B|Utilizzazione economica, da parte dell'autore o dell'inventore, di opere dell'ingegno, di brevetti industriali e di processi, formule o informazioni relativi ad esperienzeacquisite in campo industriale, commerciale o scientifico" + ITEM "C|Utili derivanti da contratti di associazione in partecipazione e da contratti di cointeressenza quando l' apporto e' costituito esclusivamente dalla prestazione di lavoro" + ITEM "D|utili spettanti ai soci promotori ed ai soci fondatori delle societa' di capitali" + ITEM "E|Levata di protesti cambiari da parte dei segretari comunali" + ITEM "F|Prestazioni rese dagli sportivi con contratto di lavoro autonomo" + ITEM "G|Idennita' corrisposte per la cessazione di attivita' sportiva professionale" + ITEM "H|Idennita' corrisposte per la cessazione dei rapporti di agenzia delle persone fisiche" + ITEM "I|Idennita' corrisposte per la cessazione da funzionari notarili" + ITEM "L|Utilizzaz. economica, da parte di sogg. diverso dall'autore o dall'inventore, di opere dell'ingegno, di brevetti industiali e di processi, formule e informaz. relativi ad esperienze acquisite in campo industriale, commerciale, scientifico" + ITEM "M|Prestazioni di lavoro autonomo non esercitate abitualmente" + ITEM "N|Idennita' di trasferta, rinborso forfetario di spese, premi e compensi erogati nell' esercizio diretto di attivita' sportiva dilettantistiche" + ITEM "P|Prestazioni in forma di capitale e riscatti erogati dalle forme di previdenza complementare di cui al D.Lgs 21 aprile 1993,n. 124 e sucessive modificazioni a lavoratori autonomi e imprenditori individuali" + ITEM "Q|Provvigioni corrisposte ad agente o rappresentante di commercio monomandatario" + ITEM "R|Provvigioni corrisposte ad agente o rappresentante plurimandatario" + ITEM "S|Provvigioni corrisposte a commissionario" + ITEM "T|Provvigioni corrisposte a mediatore" + ITEM "U|Provvigioni corrisposte a procacciatore di affari" + ITEM "V|Provvigioni corrisposte a incaricato per le vendite a domicilio" + ITEM "W|Provvigioni corrisposte a incaricato per la vendita porta a porta e per la vendita ambulante di giornali quotidiani e periodici (L. 25 febbraio 1987, n. 67)" + ITEM "Z|Titolo diverso dai precedenti" OUTPUT TCF_CAUSD OUTPUT TCF_CAUSD_DESCR FIELD LF_TABCOM->S2 @@ -182,7 +179,7 @@ BEGIN OUTPUT TCF_CAUSD1 OUTPUT TCF_CAUSD1_DESCR FIELD LF_TABCOM->S3 - FLAGS "D" + FLAGS "DH" GROUP GR_CAUDD1 GROUP GR_NOCAUC GROUP GR_NOCAUD @@ -194,7 +191,7 @@ END STRING TCF_CAUSD1_DESCR 250 60 BEGIN PROMPT 16 8 "" - FLAGS "D" + FLAGS "DH" GROUP GR_CAUDD1 GROUP GR_NOCAUC GROUP GR_NOCAUD @@ -391,3 +388,4 @@ END ENDPAGE ENDMASK + diff --git a/mg/mg3300.cpp b/mg/mg3300.cpp index fb9b2503f..cf23f2c42 100755 --- a/mg/mg3300.cpp +++ b/mg/mg3300.cpp @@ -14,6 +14,17 @@ #endif +TCausale_magazzino& get_cau(const char* codcaus) +{ + static TAssoc_array _c; + TCausale_magazzino * caus = (TCausale_magazzino*) _c.objptr(codcaus); + if (caus == NULL) + { + caus = new TCausale_magazzino(codcaus); + _c.add(codcaus, caus); + } + return *caus; +} class TForm_schedemag : public TForm_stampemg { int _tolivgiac,_tolivart; @@ -49,6 +60,7 @@ public: void set_options(bool no_valori, bool no_ff, bool sintetica); const char* descr_tiposcheda() const; const char* nomecampo_scheda() const; + TTipo_saldomag tiposcheda() const {return _tiposcheda;} ; TForm_schedemag(const char *name,const char *code) ; virtual ~TForm_schedemag(); @@ -181,7 +193,8 @@ bool TForm_schedemag::validate(TForm_item &cf, TToken_string &s) const TRectype& movmag = relation()->curr(LF_MOVMAG); const TString16 cau_r= rmovmag.get(RMOVMAG_CODCAUS); const TString16 cau_m= movmag.get(MOVMAG_CODCAUS); - const TCausale_magazzino cau(cau_r.empty() ? cau_m : cau_r); +// const TCausale_magazzino cau(cau_r.empty() ? cau_m : cau_r); + const TCausale_magazzino & cau = get_cau(cau_r.empty() ? cau_m : cau_r); if (subcode=="*SEGNOCAUS") { const char qv = s.get_char(); // Segno per Quantita'o Valore int sgn = cau.sgn(_tiposcheda); @@ -346,7 +359,7 @@ bool TForm_schedemag::validate(TForm_item &cf, TToken_string &s) if (subcode.left(3) == "ADD") { const TString16 cau = cf.section().find_field(FF_CAUSALE_RIGA).get(); - TCausale_magazzino ccrr(cau); + TCausale_magazzino & ccrr = get_cau(cau); const bool is_qta = subcode.right(3) == "QTA"; const bool ok = is_qta && ccrr.update_qta() || !is_qta && ccrr.update_val(); if (ok) @@ -646,6 +659,7 @@ protected: virtual bool destroy(); virtual void main_loop(); static bool negatives_only(const TRelation* rel); + static bool cau_filter(const TRelation* rel); void setprint_perarticoli(); void setprint_permagazzini(); @@ -655,6 +669,7 @@ protected: static bool handle_adata(TMask_field& f, KEY k); public: + TTipo_saldomag tiposcheda() const {return _form->tiposcheda();} ; void autorun() { _autorun = TRUE; } TStampa_schede_mag() {} }; @@ -672,6 +687,15 @@ bool TStampa_schede_mag::negatives_only(const TRelation* rel) return giac < ZERO; } +bool TStampa_schede_mag::cau_filter(const TRelation* rel) +{ + const TRectype& rmov = rel->curr(LF_RMOVMAG); + TString16 cau = rmov.get(RMOVMAG_CODCAUS); + if (cau.empty()) + cau = cache().get(LF_MOVMAG, rmov.get(RMOVMAG_NUMREG), MOVMAG_CODCAUS); + return get_cau(cau).sgn(app().tiposcheda()) != 0; +} + void TStampa_schede_mag::setprint_permagazzini() { char subordine=*_mask->get(F_ORDINEART); @@ -834,6 +858,8 @@ void TStampa_schede_mag::setprint_perarticoli() darecr.put(RMOVMAG_CODART,darec.get(ANAMAG_CODART)); arecr.put(RMOVMAG_CODART,arec.get(ANAMAG_CODART)); rmovmag->setregion(darecr,arecr,0x2); + if (tiposcheda() != s_giac) + rmovmag->cursor().set_filterfunction(cau_filter); _cur->relation()->replace(rmovmag,1, _form->rmov_joinexp() ); TLocalisamfile *mag=new TLocalisamfile(LF_MAG); diff --git a/or/or1100ap.uml b/or/or1100ap.uml index 32596d687..df02bedfb 100755 --- a/or/or1100ap.uml +++ b/or/or1100ap.uml @@ -27,6 +27,8 @@ BEGIN MESSAGE DISABLE,GR_TUTTI@|HIDE,GR_CLIFO@|SHOW,GR_AGE@|ENABLE,GR_AGE@|DISABLE,F_DATA_O_NUM|"D", F_DATA_O_NUM|ENABLE,F_DETTAGLIO|" ",F_DETTAGLIO|CLEAR,GR_DETAIL@|CLEAR,GR_DETAILART@|ENABLE,F_DETAIL_BY_CLI|HIDE,GR_CATMER@ ITEM "3|Articolo" MESSAGE DISABLE,GR_TUTTI@|HIDE,GR_AGE@|SHOW,GR_CLIFO@|DISABLE,F_DATA_O_NUM|"D", F_DATA_O_NUM|DISABLE,F_DETTAGLIO|"X",F_DETTAGLIO|ENABLE,GR_CLIFO@|ENABLE,GR_ART@|ENABLE,GR_DETAILART@|ENABLE,GR_DETAIL@|DISABLE,F_DETAIL_BY_DOC|HIDE,GR_CATMER@ + ITEM "4|Data consegna" + MESSAGE DISABLE,GR_TUTTI@|HIDE,GR_AGE@|SHOW,GR_CLIFO@|ENABLE,GR_CLIFO@|DISABLE,F_DATA_O_NUM|"D", F_DATA_O_NUM|ENABLE,F_DETTAGLIO|" ",F_DETTAGLIO|CLEAR,GR_DETAIL@|CLEAR,GR_DETAILART@|SHOW,GR_CATMER@ END GROUPBOX DLG_NULL 40 6 diff --git a/or/or1100p.cpp b/or/or1100p.cpp index a341167f5..7f7a1ad56 100755 --- a/or/or1100p.cpp +++ b/or/or1100p.cpp @@ -8,9 +8,10 @@ // Tipi di stampa per selezionare il form enum tipo_stampa { numero, // or1100a.frm - clifo, // or1100b.frm + clifo, // or1100bp.frm agente, // or1100c.frm - articolo // or1100d.frm + articolo, // or1100d.frm + datacons // or1100ep.frm }; // Tipi di ordinamento @@ -1004,6 +1005,9 @@ void TStampa_ordini::main_loop() case articolo: form_name = "or1100d"; break; + case datacons: + form_name = "or1100ep"; + break; default: form_name = "or1100a"; break; @@ -1016,6 +1020,7 @@ void TStampa_ordini::main_loop() { case clifo: case agente: + case datacons: filter_for_clifo_agent(); break; case articolo: diff --git a/or/or1p.url b/or/or1p.url index b0848c0b5..d162431c9 100755 --- a/or/or1p.url +++ b/or/or1p.url @@ -1,20 +1,2 @@ #include - -/* or1 -0 Stampe ordini */ - -MENU TASK_MENUBAR - SUBMENU MENU_FILE "~File" - -/* or1 -1 Stampa dettaglio disponbilita' articoli*/ -MENUBAR MENU_BAR(1) - -MENU MENU_BAR(1) - SUBMENU MENU_FILE "~File" - -/* or1 -2 Stampa statistiche sui tempi di consegna*/ -MENUBAR MENU_BAR(2) - -MENU MENU_BAR(2) - SUBMENU MENU_FILE "~File" - - +#include diff --git a/ve/condv.h b/ve/condv.h new file mode 100755 index 000000000..50b4911d7 --- /dev/null +++ b/ve/condv.h @@ -0,0 +1,26 @@ +#ifndef __CONDV_H +#define __CONDV_H + +#define CONDV_TIPO "TIPO" +#define CONDV_CATVEN "CATVEN" +#define CONDV_TIPOCF "TIPOCF" +#define CONDV_CODCF "CODCF" +#define CONDV_COD "COD" +#define CONDV_DESCR "DESCR" +#define CONDV_CODVAL "CODVAL" +#define CONDV_CAMBIO "CAMBIO" +#define CONDV_CONTROEURO "CONTROEURO" +#define CONDV_DATACAM "DATACAM" +#define CONDV_VALIN "VALIN" +#define CONDV_VALFIN "VALFIN" +#define CONDV_IMPLORDI "IMPLORDI" +#define CONDV_GESTUM "GESTUM" +#define CONDV_GESTSCAGL "GESTSCAGL" +#define CONDV_GESTSCO "GESTSCO" +#define CONDV_SCONST "SCONST" +#define CONDV_OBBLIG "OBBLIG" +#define CONDV_CODLISSUCC "CODLISSUCC" +#define CONDV_SEQRIC "SEQRIC" +#define CONDV_DECIMALI "DECIMALI" + +#endif diff --git a/ve/f47.trr b/ve/f47.trr index d83ccd765..d2fae4d09 100755 --- a/ve/f47.trr +++ b/ve/f47.trr @@ -57,7 +57,7 @@ CONLEG|4|15|5|Peso Legno (Kg) per CONAI CONVET|4|15|5|Peso Vetro (Kg) per CONAI CONTOINDA|1|12|0|Codice piano dei conti industriale (GrCoSo) Acquisti CONTOINDV|1|12|0|Codice piano dei conti industriale (GrCoSo) Vendite -USER1|1|20|0|Campo libero 1 +USER1|1|40|0|Campo libero 1 USER2|1|20|0|Campo libero 2 USER3|1|20|0|Campo libero 3 USER4|1|20|0|Campo libero 4 @@ -70,4 +70,4 @@ USER10|1|20|0|Campo libero 10 3 CODART| UPPER(DESCR)|X -GRMERC+CODART| +GRMERC+CODART| \ No newline at end of file diff --git a/ve/rcondv.h b/ve/rcondv.h new file mode 100755 index 000000000..243f818d7 --- /dev/null +++ b/ve/rcondv.h @@ -0,0 +1,27 @@ +#ifndef __RCONDV_H +#define __RCONDV_H + +#define RCONDV_TIPO "TIPO" +#define RCONDV_CATVEN "CATVEN" +#define RCONDV_TIPOCF "TIPOCF" +#define RCONDV_CODCF "CODCF" +#define RCONDV_COD "COD" +#define RCONDV_TIPORIGA "TIPORIGA" +#define RCONDV_CODRIGA "CODRIGA" +#define RCONDV_UM "UM" +#define RCONDV_NSCAGL "NSCAGL" +#define RCONDV_QLIM "QLIM" +#define RCONDV_PREZZO "PREZZO" +#define RCONDV_SCONTO "SCONTO" +#define RCONDV_ADDIVA "ADDIVA" +#define RCONDV_CODIVA "CODIVA" +#define RCONDV_PERCPROVV "PERCPROVV" +#define RCONDV_QOM "QOM" +#define RCONDV_QBASE "QBASE" +#define RCONDV_CODARTOM "CODARTOM" +#define RCONDV_PROMAGGIO "PROMAGGIO" +#define RCONDV_UMOM "UMOM" +#define RCONDV_CODLOTTO "CODLOTTO" +#define RCONDV_ARTES "ARTES" + +#endif diff --git a/ve/ve0100.cpp b/ve/ve0100.cpp index 1e937071c..6f1c5f507 100755 --- a/ve/ve0100.cpp +++ b/ve/ve0100.cpp @@ -283,8 +283,8 @@ void TMotore_application::on_firm_change() bool TMotore_application::user_create( ) { - open_files(LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, - LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON, LF_DESLIN, LF_CODCORR, + open_files(LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, LF_DESLIN, LF_CODCORR, + LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON, LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0); _config_ditta = new TConfig(CONFIG_DITTA); @@ -384,13 +384,22 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query) { TRelation_application::ini2mask(ini, msk, query); // Default processing - TMask_field& campo = msk.field(F_TIPODOC); - TString16 str = campo.field()->read(ini, format("%d", LF_DOC)); - if (str.not_empty()) - campo.set(str); - if (query) - { + { + // Dobbiamo riempire il tipo documento per determinare il profilo corretto! + TMask_field& campo = msk.field(F_TIPODOC); + TString16 str = campo.field()->read(ini, format("%d", LF_DOC)); + if (str.empty()) + { + TToken_string key; + key.add(msk.get(F_PROVV)); + key.add(msk.get(F_ANNO)); + key.add(msk.get(F_CODNUM)); + key.add(msk.get(F_NDOC)); + str = cache().get(LF_DOC, key, DOC_TIPODOC); + } + campo.set(str); + } else { @@ -503,4 +512,4 @@ int ve0100( int argc, char* argv[]) a.run( argc, argv, "Gestione documenti" ); return 0; -} +} \ No newline at end of file diff --git a/ve/ve0200g.uml b/ve/ve0200g.uml index e1423bb29..22b4133c7 100755 --- a/ve/ve0200g.uml +++ b/ve/ve0200g.uml @@ -136,8 +136,8 @@ BEGIN FIELD LEN_USER[1] GROUP 11 FLAGS "U" - NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=20) - WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 20 caratteri" + NUM_EXPR (#THIS_FIELD>0)&&(#THIS_FIELD<=40) + WARNING "La lunghezza del campo deve essere maggiore di 0 e non puo' superare 40 caratteri" END STRING F_DEC_USER1 2 @@ -507,6 +507,7 @@ BEGIN FIELD CHK_USER[9] END + STRING F_PROMPT_USER9 20 BEGIN PROMPT 2 12 "Prompt " @@ -594,4 +595,4 @@ END ENDPAGE -ENDMASK +ENDMASK \ No newline at end of file diff --git a/ve/velib.h b/ve/velib.h index 285a84ce1..6801d4344 100755 --- a/ve/velib.h +++ b/ve/velib.h @@ -443,6 +443,7 @@ public: bool is_articolo() const; bool is_checked() const { return get_bool(RDOC_CHECKED);} bool is_evadibile() const { return is_merce() || is_omaggio() || is_spese() || is_prestazione(); } + bool is_evasa() const; // Ritorna vero se la riga č evasa void checked(bool on = TRUE) { put(RDOC_CHECKED, (bool)on); } void unchecked() { checked(FALSE); } bool linked() const { return get(RDOC_DACODNUM).not_empty();} diff --git a/ve/velib02.cpp b/ve/velib02.cpp index a6f3a1595..b63f290db 100755 --- a/ve/velib02.cpp +++ b/ve/velib02.cpp @@ -641,6 +641,11 @@ real TRiga_documento::qtaresidua() const return val; } +bool TRiga_documento::is_evasa() const +{ + return qtaresidua().is_zero(); +} + real TRiga_documento::valore(bool totale, int ndec) const { real val; diff --git a/ve/velib03.cpp b/ve/velib03.cpp index e3495f0ac..84b4ba465 100755 --- a/ve/velib03.cpp +++ b/ve/velib03.cpp @@ -573,10 +573,10 @@ void TDocumento::test_firm() } } -real TDocumento::spese_incasso(real & imp, int ndec, TTipo_importo t) const +real TDocumento::spese_incasso(real& /* imp */, int ndec, TTipo_importo t) const { real imp_spese; - real percentuale = get_real("PERCSPINC"); + const real percentuale = get_real("PERCSPINC"); static TArray spese_inc; if (percentuale > ZERO) @@ -585,8 +585,7 @@ real TDocumento::spese_incasso(real & imp, int ndec, TTipo_importo t) const ndec = decimals(); if (spese_inc.objptr(_rim_dir) == NULL) { - TConfig conf(CONFIG_STUDIO); - + TConfig conf(CONFIG_STUDIO, "ve"); for (TTipo_pag p = _rim_dir; p < _nessun_pag; p = (TTipo_pag) ((int)p + 1)) { real r(conf.get("IMPSPINC", "ve", p)); @@ -603,11 +602,6 @@ real TDocumento::spese_incasso(real & imp, int ndec, TTipo_importo t) const } imp_spese *= percentuale / 100.0; - real cambio = get_real("CAMBIO"); - - if (cambio == ZERO) - cambio = 1.0; - if (t == _lordo || t == _imposta) { TString16 codiva_es; @@ -620,7 +614,14 @@ real TDocumento::spese_incasso(real & imp, int ndec, TTipo_importo t) const if (t == _imposta) imp_spese = iva_spese; } - imp_spese /= cambio; + + const real cambio = get_real("CAMBIO"); + if (!cambio.is_zero()) + { + const exchange_type ce = get_bool(DOC_CONTROEURO) ? _exchange_contro : _exchange_base; + imp_spese = change_currency(imp_spese, "", ZERO, _exchange_undefined, + get(DOC_CODVAL), cambio, ce, -1); + } imp_spese.round(ndec); } return imp_spese; @@ -682,24 +683,29 @@ real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const } if (ndec == AUTO_DECIMALS) ndec = decimals(); - real cambio = get_real("CAMBIO"); - - if (cambio == ZERO) - cambio = 1.0; - - real importo = imp*cambio; + + TCurrency_documento imp_val(imp); + imp_val.change_to_firm_val(); + real importo = imp_val.get_num(); + TPagamento & pag = ((TDocumento*)this)->pagamento(); const int nrate = pag.n_rate(); real old_bolli = -1.00; real iva_bolli; - real imp_orig = imposta(); - real sp_orig = spese(); + + TCurrency_documento imp_orig_val(imposta()); + imp_orig_val.change_to_firm_val(); + const real imp_orig = imp_orig_val.get_num(); + + TCurrency_documento spese_val(spese()); + spese_val.change_to_firm_val(); + const real sp_orig = spese_val.get_num(); for (int j = 0; j < 5 && tot_bolli+iva_bolli != old_bolli; j++) { old_bolli = tot_bolli + iva_bolli; - const real imposte = imp_orig * cambio + iva_bolli; - const real imp_spese = sp_orig * cambio + tot_bolli - iva_bolli; + const real imposte = imp_orig + iva_bolli; + const real imp_spese = sp_orig + tot_bolli - iva_bolli; const real imponibile = importo - imposte - imp_spese; tot_bolli = ZERO; if (!tipo().nota_credito()) @@ -782,7 +788,14 @@ real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const else if (t == _imposta) tot_bolli = iva_bolli; - tot_bolli /= cambio; + + const real cambio = get_real("CAMBIO"); + if (!cambio.is_zero()) + { + const exchange_type ce = get_bool(DOC_CONTROEURO) ? _exchange_contro : _exchange_base; + tot_bolli = change_currency(tot_bolli, "", ZERO, _exchange_undefined, + get(DOC_CODVAL), cambio, ce, -1); + } tot_bolli.round(ndec); } @@ -1324,7 +1337,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const } if (r.is_evadibile() && is_ordine()) { - docevaso &= (r.get_bool(RDOC_RIGAEVASA) || r.get_real(RDOC_QTA) == ZERO); + docevaso &= r.is_evasa(); const TDate dcons = r.get(RDOC_DATACONS); if (!dcons.ok()) r.put(RDOC_DATACONS, datacons); @@ -1966,7 +1979,7 @@ void TDocumento::update_tabella_iva() if (!r.is_descrizione()) { const real imposta = doc_al_lordo ? ZERO :r.imposta(FALSE); - // Aggiorna o aggiunge l'elemento se non esiste +// Aggiorna o aggiunge l'elemento se non esiste const TCodiceIVA & iva = r.iva(); const TString16 cod(iva.codice()); if (cod.not_empty()) @@ -2040,12 +2053,12 @@ void TDocumento::update_tabella_iva() if (fatt_comm) calc_iva_fattura_commerciale(); - real val = spese_incasso(tot_doc, ALL_DECIMALS, _netto); - TString16 codiva(codiva_es.not_empty() ? (const TString &) codiva_es : codiva_spese()); - TRiepilogo_iva * ri = (TRiepilogo_iva *) table.objptr(codiva); + real val = spese_incasso(tot_doc, ALL_DECIMALS, doc_al_lordo ? _lordo : _netto); if (val != ZERO) { + const TString16 codiva = codiva_es.not_empty() ? (const TString &) codiva_es : codiva_spese(); + TRiepilogo_iva* ri = (TRiepilogo_iva*)table.objptr(codiva); if (ri == NULL) { ri = new TRiepilogo_iva(TCodiceIVA(codiva)); @@ -2054,19 +2067,20 @@ void TDocumento::update_tabella_iva() ri->imp_spese() += val; tot_doc += val; - val = spese_incasso(tot_doc, ALL_DECIMALS, _imposta); - if (doc_al_lordo) - ri->imp_spese() += val; - else + + if (!doc_al_lordo) + { + val = spese_incasso(tot_doc, ALL_DECIMALS, _imposta); ri->iva_spese() += val; - tot_doc += val; + tot_doc += val; + } } - val = bolli(tot_doc, ALL_DECIMALS, _netto); + val = bolli(tot_doc, ALL_DECIMALS, doc_al_lordo ? _lordo : _netto); if (val != ZERO) { - codiva = codiva_bolli(); - ri = (TRiepilogo_iva *) table.objptr(codiva); + const TString16 codiva = codiva_bolli(); + TRiepilogo_iva* ri = (TRiepilogo_iva *) table.objptr(codiva); if (ri == NULL) { ri = new TRiepilogo_iva(TCodiceIVA(codiva)); @@ -2075,24 +2089,25 @@ void TDocumento::update_tabella_iva() ri->imp_spese() += val; tot_doc += val; - val = bolli(tot_doc, ALL_DECIMALS, _imposta); - if (doc_al_lordo) - ri->imp_spese() += val; - else + + if (!doc_al_lordo) + { + val = bolli(tot_doc, ALL_DECIMALS, _imposta); ri->iva_spese() += val; - tot_doc += val; + tot_doc += val; + } } // SCORPORO if (doc_al_lordo) { table.restart(); - for (ri = (TRiepilogo_iva *) table.get(); ri != NULL; + for (TRiepilogo_iva* ri = (TRiepilogo_iva *) table.get(); ri != NULL; ri = (TRiepilogo_iva *) table.get()) { const TCodiceIVA & iva = ri->cod_iva(); - ri->iva() = iva.scorpora(ri->imp(), ndec); + ri->iva() = iva.scorpora(ri->imp(), ndec); ri->iva_spese() = iva.scorpora(ri->imp_spese(), ndec); iva.scorpora(ri->imp_spese_row(), ndec); @@ -2603,7 +2618,7 @@ bool TDocumento::is_evaso() const { const TRiga_documento& riga = physical_row(r); if (riga.is_evadibile()) - ok = riga.get_bool(RDOC_RIGAEVASA) || riga.get_real(RDOC_QTA) == ZERO; + ok = riga.is_evasa(); } return ok; } diff --git a/ve/velib06a.cpp b/ve/velib06a.cpp index 1aa36630e..3c8cf743b 100755 --- a/ve/velib06a.cpp +++ b/ve/velib06a.cpp @@ -43,12 +43,13 @@ #define MAX_VIS_RATE 5 bool numdocrif_hndl( TMask_field& field, KEY key ) - { if (key == K_ENTER) { - TDocumento_mask & m = (TDocumento_mask &) field.mask(); - const TString16 ndocrif(field.get()); + TDocumento_mask& m = (TDocumento_mask&)field.mask(); + TString16 campo = DOC_NUMDOCRIF; + if (field.field() != NULL) + campo = field.field()->name(); TRectype filtrec(LF_DOC); filtrec.put(DOC_TIPOCF, m.get(F_TIPOCF)); @@ -57,14 +58,14 @@ bool numdocrif_hndl( TMask_field& field, KEY key ) filtrec.put(DOC_ANNO, m.get(F_ANNO)); TRelation rel(LF_DOC); -// rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); - TSorted_cursor cur(&rel, "TIPOCF|CODCF|PROVV|ANNO|CODNUM|NUMDOCRIF", "", 2, &filtrec, &filtrec); - TString80 f; f.format("CODNUM==\"%s\"", (const char *)m.get(F_CODNUM)); + TString sortkey = "TIPOCF|CODCF|PROVV|ANNO|CODNUM|"; sortkey << campo; + TSorted_cursor cur(&rel, sortkey, "", 2, &filtrec, &filtrec); + TString80 f; f.format("CODNUM==\"%s\"", (const char*)m.get(F_CODNUM)); cur.setfilter(f); filtrec.put(DOC_CODNUM, m.get(F_CODNUM)); - filtrec.put(DOC_NUMDOCRIF, ndocrif); + filtrec.put(campo, field.get()); cur.curr() = filtrec; cur.read(_isequal); @@ -72,8 +73,8 @@ bool numdocrif_hndl( TMask_field& field, KEY key ) { const long numdoc = m.get_long(F_NDOC); if (numdoc != cur.curr().get_long(DOC_NDOC)) - return yesno_box("il nunero di rifermento %s é giį stati utilizzato\n devo registrare ugualmente", - (const char *)ndocrif); + return yesno_box("Il numero di riferimento %s č gią stato utilizzato\nsi desidera registrare ugualmente?", + (const char *)field.get()); } } return TRUE;