diff --git a/ve/batbtip.h b/ve/batbtip.h
index af04a1fc8..3c4993c92 100755
--- a/ve/batbtip.h
+++ b/ve/batbtip.h
@@ -7,3 +7,4 @@
#define F_NCOPIE 107
#define F_RIFERIMENTO 108
#define F_SPESEAUT 109
+#define F_TIPO 110
diff --git a/ve/batbtip.uml b/ve/batbtip.uml
index 9ea51104d..348efbc3a 100755
--- a/ve/batbtip.uml
+++ b/ve/batbtip.uml
@@ -103,7 +103,17 @@ BEGIN
PROMPT 2 15 "Addebito automatico spese cliente"
FIELD B0
END
-ENDPAGE
+LIST F_TIPO 10
+BEGIN
+ PROMPT 2 17 "Tipo del documento "
+ FIELD I1
+ ITEM "0|Altro"
+ ITEM "1|Fattura"
+ ITEM "2|Bolla"
+ ITEM "3|Ordine"
+END
+
+ENDPAGE
ENDMASK
diff --git a/ve/bollac.src b/ve/bollac.src
index 2e11734ac..79b318f08 100755
--- a/ve/bollac.src
+++ b/ve/bollac.src
@@ -12,8 +12,6 @@ FRMFILE=BOLLAC.FRM
// modifica
CAMPICALC=TOTMER|TOTPRE|TOTSPE|SPESINC|BOLLI|SCONTOD|TOTNS|IMPOSTE|TOTDOC|PROVVD
CALCOLI=BASESCONTO
-IMPONIBILE=TOTNS
-IMPOSTA=IMPOSTE
TOTALE=TOTDOC
BASESCONTO=BASESCONTO
SPESE=TOTSPE
@@ -196,17 +194,21 @@ NDEFAULTS=1
1=F_CAUSTRASP|VEN
[SHEET]
-NCOLS=10
+NCOLS=14
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
-4=FR_DESCR
-5=FR_UMQTA
-6=FR_QTA
-7=FR_PREZZO
-8=FR_SCONTO
-9=FR_PERCPROV
-10=FR_CODIVA
+4=FR_LIV1
+5=FR_LIV2
+6=FR_LIV3
+7=FR_LIV4
+8=FR_DESCR
+9=FR_UMQTA
+10=FR_QTA
+11=FR_PREZZO
+12=FR_SCONTO
+13=FR_PERCPROV
+14=FR_CODIVA
[RIGHE]
NTIPIRIGA=9
@@ -262,7 +264,7 @@ NHANDLER=0
4000 = S_NORMALE
[ORDINEGRUPPI]
-NGROUPS=28
+NGROUPS=29
1=100
2=200
3=300
@@ -290,5 +292,6 @@ NGROUPS=28
25=2700
26=2710
27=1700
-28=2400
+28=2500
+29=2400
diff --git a/ve/bollaf.src b/ve/bollaf.src
index 593a29db3..ba854c2c7 100755
--- a/ve/bollaf.src
+++ b/ve/bollaf.src
@@ -12,8 +12,6 @@ FRMFILE=BOLLAF.FRM
// modifica
CAMPICALC=
CALCOLI=
-IMPONIBILE=
-IMPOSTA=
TOTALE=
BASESCONTO=
SPESE=
@@ -146,14 +144,18 @@ NDEFAULTS=1
1=F_CAUSTRASP|RES
[SHEET]
-NCOLS=6
+NCOLS=11
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
-4=FR_DESCR
-5=FR_UMQTA
-6=FR_QTA
-6=FR_CODIVA
+4=FR_LIV1
+5=FR_LIV2
+6=FR_LIV3
+7=FR_LIV4
+8=FR_DESCR
+9=FR_UMQTA
+10=FR_QTA
+11=FR_CODIVA
[RIGHE]
NTIPIRIGA=1
diff --git a/ve/f34.dir b/ve/f34.dir
index b0a881d4f..d81bbf6a8 100755
--- a/ve/f34.dir
+++ b/ve/f34.dir
@@ -1,3 +1,3 @@
34
0
-$rdoc|0|0|263|31|Righe documenti di vendita|NDOC*3||
+$rdoc|0|0|278|31|Righe documenti di vendita|NDOC*3||
diff --git a/ve/f34.trr b/ve/f34.trr
index 58dff4eae..f4eabe497 100755
--- a/ve/f34.trr
+++ b/ve/f34.trr
@@ -1,35 +1,36 @@
34
-31
+32
CODNUM|1|4|0|
-ANNO|2|4|0|
+ANNO|2|4|0|Anno
PROVV|1|1|0|Tipo numerazione
rovvisoria efinitiva
-NDOC|3|7|0|
-NRIGA|2|3|0|
-STATORIGA|1|1|0|
+NDOC|3|7|0|N. documento
+NRIGA|2|3|0|N. riga
+STATORIGA|1|1|0|Non usato
TIPORIGA|1|3|0|Tipo riga
GENERATA|8|1|0|Riga generata
-CODMAG|1|5|0|
-CODART|1|20|0|
-DESCR|1|50|0|
+CODMAG|1|5|0|Codice magazzino e deposito
+CODART|1|20|0|Codice articolo, codice spesa o codice prestazione
+LIVELLO|1|15|0|Codice di giacenza
+DESCR|1|50|0|Descrizione
DESCLUNGA|8|1|0|Descrizione estesa caricata
DESCEST|11|10|0|Descrizione estesa
-PREZZO|4|18|2|
-UMQTA|1|2|0|
-QTA|4|11|3|
-QTAEVASA|4|11|3|
-RIGAEVASA|8|1|0|
-TARA|4|15|2|
-PNETTO|4|15|2|
-NCOLLI|3|7|0|
-DAEVADERE|8|1|0|
-SCONTO|1|25|0|
-PERCPROV|4|5|2|
-IMPFISSO|4|18|2|
-IMPFISUN|8|1|0|
-CODIVA|1|4|0|
-ADDIVA|8|1|0|
-ASPBENI|1|2|0|
-G1|11|10|0|
+PREZZO|4|18|2|Prezzo o valore
+UMQTA|1|2|0|Unita di misura
+QTA|4|11|3|Quantita'
+QTAEVASA|4|11|3|Quantita' evasa
+RIGAEVASA|8|1|0|Riga evasa
+TARA|4|15|2|Tara
+PNETTO|4|15|2|Peso netto
+NCOLLI|3|7|0|N.colli
+DAEVADERE|8|1|0|????
+SCONTO|1|25|0|Sconto
+PERCPROV|4|5|2|Percentuale di provvigione
+IMPFISSO|4|18|2|Importo fisso di provvigione
+IMPFISUN|8|1|0|Flag importo fisso unitario
+CODIVA|1|4|0|Codice IVA
+ADDIVA|8|1|0|Addebito IVA
+ASPBENI|1|2|0|Aspetto dei beni
+G1|11|10|0|????
PSPESA|4|5|2|Percentuale di spesa
1
CODNUM+ANNO+PROVV+NDOC+NRIGA|
diff --git a/ve/fatturaa.src b/ve/fatturaa.src
index 057f096b5..859cb2ef7 100755
--- a/ve/fatturaa.src
+++ b/ve/fatturaa.src
@@ -12,8 +12,6 @@ FRMFILE=FATTURAA.FRM
// modifica
CAMPICALC=TOTMER|TOTPRE|TOTSPE|SPESINC|BOLLI|SCONTOD|TOTNS|IMPOSTE|TOTDOC|PROVVD
CALCOLI=BASESCONTO
-IMPONIBILE=TOTNS
-IMPOSTA=IMPOSTE
TOTALE=TOTDOC
BASESCONTO=BASESCONTO
SPESE=TOTSPE
@@ -192,17 +190,21 @@ NDEFAULTS=1
1=F_CAUSTRASP|VEN
[SHEET]
-NCOLS=10
+NCOLS=14
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
-4=FR_DESCR
-5=FR_UMQTA
-6=FR_QTA
-7=FR_PREZZO
-8=FR_SCONTO
-9=FR_PERCPROV
-10=FR_CODIVA
+4=FR_LIV1
+5=FR_LIV2
+6=FR_LIV3
+7=FR_LIV4
+8=FR_DESCR
+9=FR_UMQTA
+10=FR_QTA
+11=FR_PREZZO
+12=FR_SCONTO
+13=FR_PERCPROV
+14=FR_CODIVA
[RIGHE]
NTIPIRIGA=9
diff --git a/ve/fatturac.src b/ve/fatturac.src
index 2b5adeb9f..6bd81eddc 100755
--- a/ve/fatturac.src
+++ b/ve/fatturac.src
@@ -11,8 +11,6 @@ FRMFILE=FATTURAC.FRM
// modifica
CAMPICALC=TOTMER|TOTPRE|TOTSPE|SPESINC|BOLLI|SCONTOD|TOTNS|IMPOSTE|TOTDOC|PROVVD
CALCOLI=BASESCONTO
-IMPONIBILE=TOTNS
-IMPOSTA=IMPOSTE
TOTALE=TOTDOC
BASESCONTO=BASESCONTO
SPESE=TOTSPE
@@ -144,17 +142,21 @@ BLANK = S_DISABILITATO //4000
NDEFAULTS=0
[SHEET]
-NCOLS=10
+NCOLS=14
1=FR_CODMAG
2=FR_CODDEP
3=FR_CODART
-4=FR_DESCR
-5=FR_UMQTA
-6=FR_QTA
-7=FR_PREZZO
-8=FR_SCONTO
-9=FR_PERCPROV
-10=FR_CODIVA
+4=FR_LIV1
+5=FR_LIV2
+6=FR_LIV3
+7=FR_LIV4
+8=FR_DESCR
+9=FR_UMQTA
+10=FR_QTA
+11=FR_PREZZO
+12=FR_SCONTO
+13=FR_PERCPROV
+14=FR_CODIVA
[RIGHE]
NTIPIRIGA=9
diff --git a/ve/ve0100.cpp b/ve/ve0100.cpp
index 5c37e6eaa..2a2deea2f 100755
--- a/ve/ve0100.cpp
+++ b/ve/ve0100.cpp
@@ -10,6 +10,10 @@
#include "veini.h"
#endif
+#ifndef __MGLIB01_H
+#include "..\mg\mglib01.h"
+#endif
+
#ifndef __UTILITY_H
#include "utility.h"
#endif
@@ -103,10 +107,16 @@ int TMotore_application::user_function( int index )
// Funzione che dato il profilo di riga ottiene la maschera
// Serve per ottenere una maschera diversa per ogni riga
TMask * TMotore_application::ss_getmask( int numriga, TMask& fullmask)
-{
- TRiga_documento & riga = (*(app()._doc))[numriga + 1];
-
- return ((TTipo_riga_documento &)riga.tipo()).mask();
+{
+ const int n = numriga + 1;
+ if (n <= app()._doc->physical_rows())
+ {
+ TRiga_documento & riga = (*(app()._doc))[numriga + 1];
+
+ return ((TTipo_riga_documento &)riga.tipo()).mask();
+ }
+ else
+ return & fullmask;
}
void TMotore_application::user_set_handler( int fieldid, int index, TMask* m )
@@ -171,6 +181,7 @@ bool TMotore_application::ss_handler( TSheet_field& ss, int r, KEY key )
s << app()._clifor->get(LF_CFVEN, "CODDEP");
riga.put("CODMAG", s);
riga.autoload(ss);
+ ss.check_row(r);
ss.select(r);
}
return TRUE;
@@ -223,25 +234,18 @@ bool TMotore_application::num_handler( TMask_field& f, KEY key )
}
bool TMotore_application::elabora_handler( TMask_field& f, KEY key )
-{
- // Ottengo la maschera
- // TMask& m = f.mask( );
-
- // Registra il record corrente
- // m.send_key( K_INS, 99 );
-
- // TString commandline("ve4 ");
- // commandline << m.get( F_CODNUM );
- // commandline << " ";
- // commandline << m.get( F_ANNO );
- // commandline << " ";
- // commandline << m.get( F_PROVV );
- // commandline << " ";
- // commandline << m.get( F_NDOC );
- // TExternal_app interattivo( commandline );
- // interattivo.run( );
- // ricarica il documento dopo che l'interattivo lo ha modificato
- // app( ).read( m );
+{
+ if (key == K_SPACE)
+ {
+ return message_box("Funzione in fase di implementazione");
+ TString_array elabs;
+ TMask & m = f.mask();
+ const TString16 tipo(m.get(F_TIPODOC));
+ const TString16 stato(m.get(F_STATO));
+ TLista_elaborazioni & elab = app().elab();
+
+ elab.select(elabs, TRUE, m.insert_mode(), NULL, NULL, tipo, stato);
+ }
return TRUE;
}
@@ -451,7 +455,7 @@ TMask* TMotore_application::get_mask( int mode )
msk1->set_handler( F_DATAINSC, condpag_hndl );
msk1->set_handler( F_CODNOTE, note_hndl );
msk1->set_handler( F_DATADOC, data_hndl );
- msk1->set_handler( 99, elabora_handler );
+ msk1->set_handler( 99, elabora_handler ); // cazzo !!!!!!
msk1->set_handler( DLG_PRINT, print_handler );
int numhandler = pro( ).get_int( "NHANDLER", "HANDLERS" ); // prof
for ( i = 1; i <= numhandler; i ++ )
@@ -460,7 +464,25 @@ TMask* TMotore_application::get_mask( int mode )
chiave.format( "%d", i );
TToken_string riga = pro( ).get( chiave, "HANDLERS" );
user_set_handler( riga.get_int( 0 ), riga.get_int( 1 ) );
- }
+ }
+
+ TMag_livelli l("FCG");
+
+ for ( i = MAX_GIAC_LEVEL; i > 0; i--)
+ {
+ const short pos = _sheet->cid2index(FR_LIV1 + i -1);
+ if (l.enabled(i))
+ {
+ const TString & header = l.name(i);
+ const int len = header.len() + 1;
+ const int f_len = l.code_lenght(i);
+
+ _sheet->set_column_header(pos, l.name(i));
+ _sheet->set_column_width(pos, (len > f_len ? len : f_len) * 8);
+ }
+ else
+ _sheet->delete_column(pos);
+ }
// configurazione campi
@@ -607,7 +629,7 @@ int TMotore_application::read( TMask& m )
TSheet_field& f = ( TSheet_field& ) m.field( F_SHEET );
f.destroy( );
- const int rows = _doc->rows();
+ const int rows = _doc->physical_rows();
for (int i = 1; i <= rows; i++)
{
f.insert(-1, FALSE);
@@ -616,7 +638,6 @@ int TMotore_application::read( TMask& m )
rec.autoload(f);
f.check_row(i - 1);
-// f.post_insert(i - 1);
}
}
return err;
diff --git a/ve/ve0100.h b/ve/ve0100.h
index 50d80aa41..808ea5de3 100755
--- a/ve/ve0100.h
+++ b/ve/ve0100.h
@@ -111,7 +111,7 @@ class TMotore_application : public TRelation_application
// Puntatore al profilo del documento caricato
TConfig * _pro;
- TConfig * _config_ditta;
+ TConfig * _config_ditta;
// Puntatore alla maschera di ricerca
TMask * _msk;
@@ -130,17 +130,13 @@ class TMotore_application : public TRelation_application
// Indica se il documento ha come soggetto un liente o un ornitore
char _tipocf;
-// TString16 _profilo;
TString16 _codnum;
TString16 _tipodoc;
-// int _anno;
-// TString16 _tiponum;
-// long _numdoc;
-// int _statodoc;
// Array di maschere documento
TAssoc_array _doc_masks;
+ TLista_elaborazioni _elab;
// Ridefinizione dei metodi virtuali
virtual bool user_create( );
@@ -223,6 +219,7 @@ public:
TCliForVendite & clifo() { CHECK( _clifor, "Oggetto cliente nullo!" ); return *_clifor; }
TCond_vendita & condv() { return *_condv; }
TConfig & config_ditta() {return *_config_ditta; }
+ TLista_elaborazioni & elab() { return _elab; }
TDocumento & doc() {return *_doc; }
// Operazione
diff --git a/ve/ve0100a.uml b/ve/ve0100a.uml
index 4dbc61e8c..d1599bed5 100755
--- a/ve/ve0100a.uml
+++ b/ve/ve0100a.uml
@@ -31,7 +31,7 @@ PAGE "Gestione documenti" 1 1 60 14
STRING F_DESNUM 50
BEGIN
- PROMPT 25 1 ""
+ PROMPT 24 1 ""
HELP "Descrizione numerazione"
USE %NUM KEY 2
INPUT S0 F_DESNUM
@@ -58,7 +58,7 @@ PAGE "Gestione documenti" 1 1 60 14
STRING F_DESTIPODOC 50
BEGIN
- PROMPT 25 2 ""
+ PROMPT 24 2 ""
HELP "Descrizione tipo documento"
USE %TIP KEY 2
INPUT S0 F_DESTIPODOC
@@ -67,9 +67,18 @@ PAGE "Gestione documenti" 1 1 60 14
COPY OUTPUT F_TIPODOC
END
+ NUMBER F_ANNO 4
+ BEGIN
+ PROMPT 2 3 "Esercizio "
+ FIELD ANNO
+ CHECKTYPE REQUIRED
+ FLAG "AP"
+ KEY 1
+ END
+
NUMBER F_NDOC 6
BEGIN
- PROMPT 2 3 "Numero doc. "
+ PROMPT 24 3 "Numero doc. "
FIELD NDOC
USE LF_DOC
INPUT ANNO F_ANNO SELECT
@@ -91,7 +100,7 @@ PAGE "Gestione documenti" 1 1 60 14
LISTBOX F_PROVV 14
BEGIN
FIELD PROVV
- PROMPT 25 3 "Numerazione "
+ PROMPT 46 3 "Tipo "
ITEM "D|Definitiva "
ITEM "P|Provvisoria"
KEY 1
@@ -100,27 +109,11 @@ PAGE "Gestione documenti" 1 1 60 14
STRING F_STATO 1
BEGIN
- PROMPT 57 3 "Stato "
+ PROMPT 69 3 "Stato "
FIELD STATO
FLAG "D"
END
- NUMBER F_ANNO 4
- BEGIN
- PROMPT 68 3 "Es. "
- FIELD ANNO
- CHECKTYPE REQUIRED
- FLAG "A"
- KEY 1
- END
-
- BOOLEAN F_ATTIVAANNO
- BEGIN
- PROMPT 2 6 "Attiva esercizio"
- MESSAGE TRUE ENABLE,F_ANNO
- MESSAGE FALSE DISABLE,F_ANNO
- END
-
STRING F_TIPIDOCS 40
BEGIN
PROMPT 2 10 ""
diff --git a/ve/ve0200.cpp b/ve/ve0200.cpp
index a1173e016..6d967de6d 100755
--- a/ve/ve0200.cpp
+++ b/ve/ve0200.cpp
@@ -14,24 +14,24 @@
#ifndef __TABUTIL_H
#include
-#endif
+#endif
#include "veconf.h"
#define SINTASSI "Usage: VE0 -2 -[1|2|3|4|5|6]"
class TConf_vendite : public TConfig_application
-{
+{
char _current;
-
+
static bool check_fields(TMask_field& f, KEY k);
public:
-
+
virtual bool preprocess_config (TMask& mask, TConfig& config);
virtual bool postprocess_config (TMask& mask, TConfig& config);
virtual bool user_create( );
virtual bool user_destroy( );
-
+
TConf_vendite() : TConfig_application( CONFIG_DITTA ){ }
virtual ~TConf_vendite( ){ }
};
@@ -56,7 +56,7 @@ bool TConf_vendite::check_fields(TMask_field& f, KEY k)
}
bool TConf_vendite::preprocess_config (TMask& mask, TConfig& config)
-{
+{
disable_menu_item(M_FILE_NEW);
disable_menu_item(M_FILE_REVERT);
if (_current == '5') // solo per configurazione "e"
@@ -93,11 +93,11 @@ bool TConf_vendite::preprocess_config (TMask& mask, TConfig& config)
}
}
}
- return TRUE;
+ return TRUE;
}
bool TConf_vendite::postprocess_config (TMask& mask, TConfig& config)
-{
+{
enable_menu_item(M_FILE_NEW);
enable_menu_item(M_FILE_REVERT);
if (_current == '5') // solo per configurazione "e"
@@ -106,17 +106,17 @@ bool TConf_vendite::postprocess_config (TMask& mask, TConfig& config)
TString r;
const KEY k = mask.last_key();
bool tosave = k == K_ENTER || k == K_SAVE;
-
+
if (!tosave && mask.dirty())
tosave = yesno_box("Modifiche non registrate. Salvare?");
-
+
if (!tosave)
return FALSE;
-
+
for (short i=F_RICERCACR1;i<=F_RICERCACR5;i++)
{
r = mask.get(i);
- if (r == "-") continue;
+ if (r == "-") continue;
if (r == "AN")
for (short j=F_RICERCAAN1;j<=F_RICERCAAN4;j++)
{
@@ -129,7 +129,7 @@ bool TConf_vendite::postprocess_config (TMask& mask, TConfig& config)
}
config.set("RICERCACR",ric);
}
- return TRUE;
+ return TRUE;
}
@@ -139,12 +139,12 @@ bool TConf_vendite::user_create( )
// Il fottuto meno serve per evitare fottutamente che la fottuta confapp
// si fotta il fottuto parametro
if( arg[ 0 ] != '-' )
- fatal_box( SINTASSI );
+ fatal_box( SINTASSI );
_current = arg[1];
TConfig conf(_current == '6' ? CONFIG_STUDIO : CONFIG_DITTA );
if (_current == '6') set_config(CONFIG_STUDIO);
// Prima usavo le lettere ma la fottuta confapp si fotte il fottuto -c per i suoi fottuti
- // motivi, così uso i fottuti numeri
+ // motivi, cosi uso i fottuti numeri
switch( _current )
{
case '1':
@@ -153,16 +153,16 @@ bool TConf_vendite::user_create( )
case '2':
conf.set( "EdMask", "ve0200b", "ve" );
break;
- case '3':
+ case '3':
conf.set( "EdMask", "ve0200c", "ve" );
break;
- case '4':
+ case '4':
conf.set( "EdMask", "ve0200d", "ve" );
break;
- case '5':
+ case '5':
conf.set( "EdMask", "ve0200e", "ve" );
break;
- case '6':
+ case '6':
conf.set( "EdMask", "ve0200f", "ve" );
break;
default:
@@ -171,19 +171,19 @@ bool TConf_vendite::user_create( )
break;
}
return TRUE;
-}
+}
bool TConf_vendite::user_destroy( )
-{
+{
return TRUE;
-}
+}
int ve0200(int argc, char** argv)
{
TConf_vendite appc;
-
+
if( argc < 3 )
fatal_box( SINTASSI );
appc.run(argc, argv, "Parametri gestione vendite");
return 0;
-}
+}
diff --git a/ve/ve0200a.uml b/ve/ve0200a.uml
index 56e881d8d..484b93508 100755
--- a/ve/ve0200a.uml
+++ b/ve/ve0200a.uml
@@ -14,7 +14,7 @@ END
ENDPAGE
-PAGE "Tabelle di installazione" 1 1 60 14
+PAGE "Installazione" 1 1 60 14
GROUPBOX DLG_NULL 78 7
BEGIN
@@ -134,7 +134,7 @@ END
ENDPAGE
-PAGE "Tabella gestione sconti " 1 1 60 14
+PAGE "Sconti " 1 1 60 14
LIST F_GESSCO 36
BEGIN
@@ -222,20 +222,6 @@ PROMPT 2 13 "Gestione archivio sconti unita' di misura "
FIELD GESSCOUM
END
-STRING F_SCOTRIGA 4
-BEGIN
-PROMPT 2 14 "Tipo riga per gli sconti di testa "
-FLAGS "U"
-USE %TRI SELECT S7=="C"
-FIELD SCOTRIGA
-INPUT CODTAB F_SCOTRIGA
-DISPLAY "Codice" CODTAB
-DISPLAY "Descrizione@50" S0
-OUTPUT F_SCOTRIGA CODTAB
-CHECKTYPE REQUIRED
-END
-
ENDPAGE
ENDMASK
-
diff --git a/ve/ve0200b.uml b/ve/ve0200b.uml
index 92180d151..974565a64 100755
--- a/ve/ve0200b.uml
+++ b/ve/ve0200b.uml
@@ -14,7 +14,7 @@ END
ENDPAGE
-PAGE "Tabelle di installazione" 1 1 60 14
+PAGE "Installazione" 1 1 60 14
GROUPBOX DLG_NULL 78 4
BEGIN
diff --git a/ve/ve0200c.uml b/ve/ve0200c.uml
index 8d12d3b2a..4a4560d76 100755
--- a/ve/ve0200c.uml
+++ b/ve/ve0200c.uml
@@ -14,7 +14,7 @@ END
ENDPAGE
-PAGE "Tabella gestione sconti" 1 1 60 14
+PAGE "Sconti" 1 1 60 14
GROUPBOX DLG_NULL 78 4
BEGIN
@@ -56,7 +56,7 @@ COPY ALL F_SCOPRCODCON1
CHECKTYPE NORMAL
END
-STRING F_SCOPRDESCON 50
+STRING F_SCOPRDESCON 50
BEGIN
PROMPT 2 3 "Descrizione "
USE LF_PCON KEY 2
diff --git a/ve/ve0200d.uml b/ve/ve0200d.uml
index 69bc45163..4e280d401 100755
--- a/ve/ve0200d.uml
+++ b/ve/ve0200d.uml
@@ -14,7 +14,7 @@ END
ENDPAGE
-PAGE "Tabella gestione spese" 1 1 60 14
+PAGE "Spese" 1 1 60 14
GROUPBOX DLG_NULL 78 8
BEGIN
diff --git a/ve/ve0200e.uml b/ve/ve0200e.uml
index dc3f23f2a..42de7bbd8 100755
--- a/ve/ve0200e.uml
+++ b/ve/ve0200e.uml
@@ -14,7 +14,7 @@ END
ENDPAGE
-PAGE "Tabelle contabilizzazione" 1 1 60 14
+PAGE "Contabilizzazione" 1 1 60 14
GROUPBOX DLG_NULL 78 7
BEGIN
diff --git a/ve/ve0200f.uml b/ve/ve0200f.uml
index 5672eaaf4..b0a2abc13 100755
--- a/ve/ve0200f.uml
+++ b/ve/ve0200f.uml
@@ -14,7 +14,7 @@ END
ENDPAGE
-PAGE "Gestione spese incasso" 1 1 60 14
+PAGE "Spese incasso" 1 1 60 14
NUMBER F_IMPSPINC1 9
BEGIN
@@ -82,7 +82,7 @@ END
ENDPAGE
-PAGE "Gestione spese bolli" 1 1 60 14
+PAGE "Spese bolli" 1 1 60 14
NUMBER F_SPBOSCA1 11
BEGIN
@@ -182,31 +182,84 @@ FIELD SPBOIMP[7]
PICTURE "."
END
+NUMBER F_BOLLIES 11
+BEGIN
+PROMPT 2 10 "Bollo per esenzioni "
+FIELD BOLLIES
+PICTURE "."
+END
+
ENDPAGE
-PAGE "Gestione omaggi" 1 1 60 14
+PAGE "Automatismi" 1 1 60 14
-STRING F_TIPORIGAOM 4
+STRING F_OMTRIGA 4
BEGIN
- PROMPT 2 2 "Tipo riga per omaggi "
+ PROMPT 2 2 "Tipo riga omaggi "
FIELD TROMAGGI
FLAGS "U"
USE %TRI SELECT S7=="O"
- INPUT CODTAB F_TIPORIGAOM
+ INPUT CODTAB F_OMTRIGA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
- OUTPUT F_TIPORIGAOM CODTAB
- OUTPUT F_DESCRRIGAOM S0
+ OUTPUT F_OMTRIGA CODTAB
+ OUTPUT F_OMDRIGA S0
CHECKTYPE REQUIRED
END
-STRING F_DESCRRIGAOM 50
+STRING F_OMDRIGA 50
BEGIN
- PROMPT 23 3 ""
+ PROMPT 25 3 ""
USE %TRI KEY 2 SELECT S7=="O"
- INPUT S0 F_DESCRRIGAOM
- COPY DISPLAY F_TIPORIGAOM
- COPY OUTPUT F_TIPORIGAOM
+ INPUT S0 F_OMDRIGA
+ COPY DISPLAY F_OMTRIGA
+ COPY OUTPUT F_OMTRIGA
+END
+
+STRING F_ESTRIGA 4
+BEGIN
+ PROMPT 2 4 "Tipo riga esenzioni "
+ FLAGS "U"
+ USE %TRI SELECT S7=="D"
+ FIELD TRESENZ
+ INPUT CODTAB F_ESTRIGA
+ DISPLAY "Codice" CODTAB
+ DISPLAY "Descrizione@50" S0
+ OUTPUT F_ESTRIGA CODTAB
+ OUTPUT F_ESDRIGA S0
+ CHECKTYPE REQUIRED
+END
+
+STRING F_ESDRIGA 50
+BEGIN
+ PROMPT 25 5 ""
+ USE %TRI KEY 2 SELECT S7=="D"
+ INPUT S0 F_ESDRIGA
+ COPY DISPLAY F_ESTRIGA
+ COPY OUTPUT F_ESTRIGA
+END
+
+STRING F_SCTRIGA 4
+BEGIN
+ PROMPT 2 6 "Tipo riga sconti testa "
+ FLAGS "U"
+ USE %TRI SELECT S7=="C"
+ FIELD TRSCONTI
+ INPUT CODTAB F_SCTRIGA
+ DISPLAY "Codice" CODTAB
+ DISPLAY "Descrizione@50" S0
+ OUTPUT F_SCTRIGA CODTAB
+ OUTPUT F_SCDRIGA S0
+ CHECKTYPE REQUIRED
+END
+
+STRING F_SCDRIGA 50
+BEGIN
+ PROMPT 25 7 ""
+ USE %TRI KEY 2 SELECT S7=="C"
+ INPUT S0 F_SCDRIGA
+ COPY DISPLAY F_SCTRIGA
+ COPY OUTPUT F_SCTRIGA
END
ENDPAGE
diff --git a/ve/ve0300.cpp b/ve/ve0300.cpp
index 3b8474b23..926e672eb 100755
--- a/ve/ve0300.cpp
+++ b/ve/ve0300.cpp
@@ -1059,34 +1059,34 @@ void TMask_generator::intestazione_pagina( )
_m->group( 5 );
_m->end( );
+ _m->control( T_STRINGA, DLG_NULL, 4 );
+ _m->begin( );
+ _m->prompt( 2, 3, "Esercizio " );
+ _m->group( 9 );
+ _m->flag( "D" );
+ _m->end( );
+
_m->control( T_NUMERO, DLG_NULL, 6 );
_m->begin( );
- _m->prompt( 2, 3, "Doc.: nr. " );
+ _m->prompt( 24, 3, "Numero doc. " );
_m->group( 6 );
_m->flag( "D" );
_m->end( );
_m->control( T_DATA, DLG_NULL );
_m->begin( );
- _m->prompt( 24, 3, "Data " );
+ _m->prompt( 46, 3, "Data " );
_m->group( 7 );
_m->flag( "D" );
_m->end( );
_m->control( T_NUMERO, DLG_NULL, 1 );
_m->begin( );
- _m->prompt( 50, 3, "Stato " );
+ _m->prompt( 67, 3, "Stato " );
_m->group( 8 );
_m->flag( "D" );
_m->end( );
- _m->control( T_STRINGA, DLG_NULL, 4 );
- _m->begin( );
- _m->prompt( 66, 3, "Es. " );
- _m->group( 9 );
- _m->flag( "D" );
- _m->end( );
-
_m->control( T_STRINGA, DLG_NULL, 6 );
_m->begin( );
if ( _pro->get( "TIPOCF", "MAIN" ) == "C" )
@@ -1247,9 +1247,17 @@ void TMask_generator::genera( const TString& profilo )
_m->message( "CO,5@" );
_m->end( );
+ _m->control( T_STRINGA, F_ANNO, 4 );
+ _m->begin( );
+ _m->prompt( 2, 3, "Esercizio " );
+ _m->field( "ANNO" );
+ _m->flag( "GD" );
+ _m->message( "CO,9@" );
+ _m->end( );
+
_m->control( T_NUMERO, F_NDOC, 6 );
_m->begin( );
- _m->prompt( 2, 3, "Doc.: nr. " );
+ _m->prompt( 24, 3, "Numero doc. " );
_m->field( "NDOC" );
_m->message( "CO,6@" );
_m->flag( "GDR" );
@@ -1257,28 +1265,20 @@ void TMask_generator::genera( const TString& profilo )
_m->control( T_DATA, F_DATADOC );
_m->begin( );
- _m->prompt( 24, 3, "Data " );
+ _m->prompt( 46, 3, "Data " );
_m->field( "DATADOC" );
- _m->message( "CO,7@" );
+ _m->message( format("CO,7@|CO,%d", F_DATACAMBIO1) );
_m->flag( "A" );
_m->end( );
_m->control( T_NUMERO, F_STATO, 1 );
_m->begin( );
- _m->prompt( 50, 3, "Stato " );
+ _m->prompt( 67, 3, "Stato " );
_m->field( "STATO" );
_m->message( "CO,8@" );
_m->flag( "DG" );
_m->end( );
- _m->control( T_STRINGA, F_ANNO, 4 );
- _m->begin( );
- _m->prompt( 66, 3, "Es. " );
- _m->field( "ANNO" );
- _m->flag( "GD" );
- _m->message( "CO,9@" );
- _m->end( );
-
_m->control( T_STRINGA, F_CODCF, 6 );
_m->begin( );
if ( _pro->get( "TIPOCF", "MAIN" ) == "C" )
diff --git a/ve/ve0300b.dat b/ve/ve0300b.dat
index 63c8e88ce..6bff337d6 100755
--- a/ve/ve0300b.dat
+++ b/ve/ve0300b.dat
@@ -2,7 +2,11 @@ STATORIGA|2|1|Stato|1
TIPORIGA|2|2|Tipo riga|2
CODMAG[1,3]|2|3|Mag. |3
CODMAG[4,5]|2|2|Dep.|2
-CODART|2|30|Cod. Art.|30
+CODART|2|20|Cod. Art.|20
+CODG1|2|9|Cod.G.1|9
+CODG2|2|9|Cod.G.2|9
+CODG3|2|9|Cod.G.3|9
+CODG4|2|9|Cod.G.4|9
DESCR|2|50|Descrizione|50
UMQTA|2|2|UM|2
QTA|3|1103|Qta|11
diff --git a/ve/ve0300c.ini b/ve/ve0300c.ini
index 81c69ebfd..2a8e40520 100755
--- a/ve/ve0300c.ini
+++ b/ve/ve0300c.ini
@@ -90,7 +90,7 @@ HEIGHT=1
HEIGHT=1
[2500]
-HEIGHT=1
+HEIGHT=7
[2700]
HEIGHT=1
diff --git a/ve/ve1100.cpp b/ve/ve1100.cpp
index 119029927..46abed7b3 100755
--- a/ve/ve1100.cpp
+++ b/ve/ve1100.cpp
@@ -76,6 +76,7 @@ class TDocumento_form : public TForm
TRelation &_firmrel; // relazione di gestione dei dati della ditta corrente
TString _module; // codice del modulo di carta associato a questo al form
TCliFor *_cliente; // oggetto per le informazioni sul cliente
+ TCond_vendita * _condv;
TString_array _exclude_array; // array di coppie tipo/articolo da escludere dalla stampa
TDocumentoEsteso * _doc; // Documento da stampare
bool _valid, _cli_loaded; // flag che indica se il form e' valido | se l'oggetto cliente è già stato caricato
@@ -173,7 +174,8 @@ TDocumento_form::TDocumento_form(TRectype&/*TDocumentoEsteso**/ doc, TRelation&
_cli_loaded= FALSE;
_is_lista = FALSE;
- _doc = new TDocumentoEsteso(doc); // istanzia TDocumentoEsteso
+ _condv = new TCond_vendita(_cliente);
+ _doc = new TDocumentoEsteso(doc, _condv); // istanzia TDocumentoEsteso
_docfile = new TDocisamfile(_doc);
_rdocfile = new TRDocisamfile(_doc);
relation()->replace(_docfile,0);
@@ -750,16 +752,11 @@ bool TDocumento_form::validate(TForm_item &cf, TToken_string &s) {
TLocalisamfile &rdoc= (cursor())->file(LF_RIGHEDOC);
TString descrizione = rdoc.get("DESCR");
const bool desclunga = rdoc.get_bool("DESCLUNGA");
- if (desclunga) {
- TTextfile t;
- rdoc.get_memo("DESCEST",t);
- const long l = t.lines();
- for (long i = 0; i
+#endif
+
TSpesa_prest::TSpesa_prest(const char* codice, char tipo)
: TRectype(LF_TAB)
{
@@ -177,6 +181,7 @@ bool note_hndl( TMask_field& f, KEY key )
if (key == K_TAB && (f.focusdirty() || !m.is_running()))
{
TTable & note = (TTable &) ((TEdit_field &) f).browse()->cursor()->file();
+ note.setkey(1);
const TString16 cod(f.get());
if (cod != note.get("CODTAB"))
@@ -263,6 +268,17 @@ HIDDEN bool codart_handler( TMask_field& f, KEY key )
{
TMask& row_mask = f.mask();
+ if (f.to_check(key, TRUE))
+ {
+ if (f.get().not_empty())
+ row_mask.enable(FR_LIV1);
+ else
+ {
+ row_mask.reset(FR_LIV1);
+ row_mask.disable(FR_LIV1);
+ }
+ row_mask.field(FR_LIV1).on_hit();
+ }
if (key == K_TAB && (f.focusdirty() || row_mask.get(FR_DESCR).empty()))
{
TDocumento_mask & mask = (TDocumento_mask &) row_mask.get_sheet()->mask();
@@ -293,8 +309,8 @@ HIDDEN bool codart_handler( TMask_field& f, KEY key )
if (anamag.read() == NOERR)
f.set(codart);
}
- }
-
+ }
+
if (anamag.good())
{
const TString16 lingua = mask.get(F_CODLIN);
@@ -338,6 +354,24 @@ HIDDEN bool codart_handler( TMask_field& f, KEY key )
return TRUE;
}
+HIDDEN bool liv_handler( TMask_field& f, KEY key )
+{
+ if (f.to_check(key, TRUE))
+ {
+ TMask& row_mask = f.mask();
+ TMask_field & next = row_mask.field(f.dlg() + 1);
+ if (f.get().not_empty())
+ next.enable();
+ else
+ {
+ next.reset();
+ next.disable();
+ }
+ next.on_hit();
+ }
+ return TRUE;
+}
+
HIDDEN bool umart_handler( TMask_field& f, KEY key )
{
// Se qualcuno cerca di modificare la maschera
@@ -598,21 +632,18 @@ real TDocumento::spese_incasso(real & imp, int ndec, TTipo_importo t) const
if (cambio == ZERO)
cambio = 1.0;
-// if (netto == FALSE)
-// {
- static TString16 codiva;
- static long firm = -1;
- long new_firm = main_app().get_firm();
+ static TString16 codiva;
+ static long firm = -1;
+ long new_firm = main_app().get_firm();
- if (firm != new_firm)
- {
- TConfig conf(CONFIG_DITTA);
+ if (firm != new_firm)
+ {
+ TConfig conf(CONFIG_DITTA);
- codiva = conf.get("SPINCODIVA", "ve");
- firm = new_firm;
- }
- real iva_spese(iva(imp_spese, TRiga_documento::iva(codiva), ndec));
-// }
+ codiva = conf.get("SPINCODIVA", "ve");
+ firm = new_firm;
+ }
+ real iva_spese(iva(imp_spese, TRiga_documento::iva(codiva), ndec));
if (t == _lordo)
imp_spese += iva_spese;
else
@@ -728,22 +759,18 @@ real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const
break;
}
}
-// if (netto == FALSE)
-// {
- static TString16 codiva;
- static long firm = -1;
- long new_firm = main_app().get_firm();
+ static TString16 codiva;
+ static long firm = -1;
+ long new_firm = main_app().get_firm();
- if (firm != new_firm)
- {
- TConfig conf(CONFIG_DITTA);
+ if (firm != new_firm)
+ {
+ TConfig conf(CONFIG_DITTA);
- codiva = conf.get("SPBOCODIVA", "ve");
- firm = new_firm;
- }
- iva_bolli = iva(tot_bolli, TRiga_documento::iva(codiva), ndec);
-// tot_bolli += iva_bolli;
-// }
+ codiva = conf.get("SPBOCODIVA", "ve");
+ firm = new_firm;
+ }
+ iva_bolli = iva(tot_bolli, TRiga_documento::iva(codiva), ndec);
importo += (tot_bolli + iva_bolli - old_bolli);
}
if (t == _lordo)
@@ -983,7 +1010,6 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st
real & val = stack.peek_real();
if (_row)
-// val = _row->iva(ndec);
val = _row->imposta();
else
val = ZERO;
@@ -1063,14 +1089,14 @@ TObject* TExpr_documento::dup() const
// Formula generica
///////////////////////////////////////////////////////////
-TFormula_documento::TFormula_documento(TTipo_formula tipo, const char* codice)
+TFormula_documento::TFormula_documento(TTipo_formula tipo, const char* codice, const char * expr, bool numexpr)
: TRectype(LF_TABCOM), _expr(NULL)
{
_tab = tipo == _documento ? "FRD" : "FRR";
settab(_tab);
_tab.insert("%");
if (codice && *codice)
- read(codice);
+ read(codice, expr, numexpr);
}
TFormula_documento::TFormula_documento(const TRectype& rec)
@@ -1086,7 +1112,7 @@ TFormula_documento::~TFormula_documento()
if (_expr) delete _expr;
}
-int TFormula_documento::read(const char* codice)
+int TFormula_documento::read(const char* codice, const char * expr, bool numexpr)
{
if (_expr != NULL)
{
@@ -1094,11 +1120,21 @@ int TFormula_documento::read(const char* codice)
_expr = NULL;
}
- TTable t(_tab);
-
put("CODTAB", codice);
- int err = TRectype::read(t);
+ int err = NOERR;
+
+ if (expr && *expr)
+ {
+ put("S1", expr);
+ put("B0", numexpr ? "X" : "");
+ }
+ else
+ {
+ TTable t(_tab);
+
+ err = TRectype::read(t);
+ }
if (err == NOERR)
{
@@ -1163,6 +1199,12 @@ void TTipo_documento::read_formule()
_formule = profile.get("CAMPICALC", "MAIN");
_formule.add(profile.get("CALCOLI", "MAIN"));
_totale = profile.get("TOTALE", "MAIN");
+ if (_totale.empty())
+ {
+ _totale = "TOTDOC";
+ if (_formule.find(_totale) < 0)
+ _formule.add("TOTDOC=IMPONIBILI()+IMPOSTE()");
+ }
_totale_netto = "_";
_totale_netto << _totale;
if (_totale.not_empty() && _formule.find(_totale) < 0)
@@ -1171,12 +1213,24 @@ void TTipo_documento::read_formule()
_totale.cut(0);
}
_basesconto = profile.get("BASESCONTO", "MAIN");
+ if (_basesconto.empty())
+ {
+ _basesconto = "BASESCONTO";
+ if (_formule.find(_basesconto) < 0)
+ _formule.add("BASESCONTO=SOMMA(\"IMPONIBILE()\", \"(TIPO() != 'S') && (TIPO() != 'C')\")");
+ }
if (_basesconto.not_empty() && _formule.find(_basesconto) < 0)
{
error_box("Campo sconto documento (%s) sconosciuto nel tipo documento %s", (const char *) _basesconto, (const char *) codice());
_basesconto.cut(0);
}
_spese = profile.get("SPESE", "MAIN");
+ if (_spese.empty())
+ {
+ _spese = "SPESE";
+ if (_formule.find(_spese) < 0)
+ _formule.add("SPESE=SOMMA(\"IMPONIBILE()\", \"TIPO() != 'S'\")");
+ }
if (_spese.not_empty() && _formule.find(_spese) < 0)
{
error_box("Campo spese (%s) sconosciuto nel tipo documento %s", (const char *) _spese, (const char *) codice());
@@ -1188,13 +1242,20 @@ TFormula_documento * TTipo_documento::succ_formula(bool restart)
{
if (restart)
_formule.restart();
- const TString16 formula(_formule.get());
+ const TString formula(_formule.get());
if (formula.not_empty())
- {
+ {
+ char *expr = NULL;
+ const int p = formula.find("=");
+ if (p > 0)
+ {
+ expr = (char *) (const char *) formula + p;
+ *expr = '\0'; expr++;
+ }
TFormula_documento * o = (TFormula_documento*)_formule_documento.objptr(formula);
if (o == NULL)
{
- o = new TFormula_documento(_documento, formula);
+ o = new TFormula_documento(_documento, formula, expr);
_formule_documento.add(formula, o);
}
return o;
@@ -1256,6 +1317,12 @@ void TTipo_riga_documento::read_formule()
_formule = profile.get("CAMPICALC", "MAIN");
_formule.add(profile.get("CALCOLI", "MAIN"));
_imponibile = profile.get("IMPONIBILE", "MAIN");
+ if (_imponibile.empty())
+ {
+ _imponibile = "IMPONIBILE";
+ if (_formule.find(_imponibile) < 0)
+ _formule.add("IMPONIBILE=PREZZO()");
+ }
if (_imponibile.not_empty() && _formule.find(_imponibile) < 0)
{
error_box("Campo imponibile (%s) sconosciuto nel tipo riga %s", (const char *) _imponibile, (const char *) codice());
@@ -1267,13 +1334,20 @@ TFormula_documento * TTipo_riga_documento::succ_formula(bool restart)
{
if (restart)
_formule.restart();
- const TString16 formula(_formule.get());
+ const TString formula(_formule.get());
if (formula.not_empty())
{
+ char *expr = NULL;
+ const int p = formula.find("=");
+ if (p > 0)
+ {
+ expr = (char *) (const char *) formula + p;
+ *expr = '\0'; expr++;
+ }
TFormula_documento * o = (TFormula_documento*)_formule_riga.objptr(formula);
if (o == NULL)
{
- o = new TFormula_documento(_riga, formula);
+ o = new TFormula_documento(_riga, formula, expr);
_formule_riga.add(formula, o);
}
return o;
@@ -1286,7 +1360,7 @@ TVariable_mask * TTipo_riga_documento::mask()
{
if (mask_loaded())
return _mask;
- _mask = new TVariable_mask(mask_name());
+ _mask = new TVariable_mask(mask_name());
TFilename proname(profile_name());
proname.ext( "ini" );
@@ -1321,6 +1395,9 @@ TVariable_mask * TTipo_riga_documento::mask()
if (num == LF_ANAMAG)
{
_mask->set_handler( FR_CODART, codart_handler );
+ _mask->set_handler( FR_LIV1, liv_handler );
+ _mask->set_handler( FR_LIV2, liv_handler );
+ _mask->set_handler( FR_LIV3, liv_handler );
_mask->set_handler( FR_UMQTA, umart_handler );
_mask->set_handler( FR_DESCR, descr_handler );
_mask->set_handler( FR_QTA, qta_handler );
@@ -1625,8 +1702,20 @@ real TRiga_documento::imponibile() const
{
const TString16 field(tipo().imponibile());
- if (field.not_empty())
- return get_real(field);
+ if (field.not_empty())
+ {
+ if (tipo().tipo() == RIGA_OMAGGI && _iva_calc)
+ {
+ TDocumento_variable_field * f = (TDocumento_variable_field *) variable_field(field);
+ CHECKS(f, "Field UNKNOWN : ", field);
+ f->set_dirty(TRUE);
+ const real r = get_real(field);
+ f->set_dirty(TRUE);
+ return r;
+ }
+ else
+ return get_real(field);
+ }
else
return importo(TRUE, FALSE, doc().in_valuta() ? 3 : 0);
}
@@ -1706,7 +1795,11 @@ void TRiga_documento::autosave(TSheet_field & f)
codmag.left_just(3);
codmag << row.get( f.cid2index(FR_CODDEP ));
put( "CODMAG", codmag);
- put( "CODART", row.get( f.cid2index(FR_CODART )) );
+ put( "CODART", row.get( f.cid2index(FR_CODART )) );
+ put( "LIVELLO",row.get( f.cid2index(FR_LIV1 ))); // da modificare
+ put( "LIVELLO",row.get( f.cid2index(FR_LIV2 )));
+ put( "LIVELLO",row.get( f.cid2index(FR_LIV3 )));
+ put( "LIVELLO",row.get( f.cid2index(FR_LIV4 )));
TString s(row.get(f.cid2index(FR_DESCR)));
int split_pos = s.find('\n');
@@ -1754,6 +1847,7 @@ void TRiga_documento::autoload(TSheet_field & f)
const int num = numero() - 1;
TToken_string & row = f.row(num);
+ row.cut(0);
row.add( get( "STATORIGA" ), f.cid2index(FR_STATORIGA ));
row.add( get( "TIPORIGA" ), f.cid2index(FR_TIPORIGA ));
@@ -1761,6 +1855,10 @@ void TRiga_documento::autoload(TSheet_field & f)
row.add( codmag.left(3), f.cid2index(FR_CODMAG ));
row.add( codmag.mid(3), f.cid2index(FR_CODDEP ));
row.add( get( "CODART" ), f.cid2index(FR_CODART ));
+ row.add( get( "LIVELLO" ), f.cid2index(FR_LIV1 )); // da modificare
+ row.add( get( "LIVELLO" ), f.cid2index(FR_LIV2 ));
+ row.add( get( "LIVELLO" ), f.cid2index(FR_LIV3 ));
+ row.add( get( "LIVELLO" ), f.cid2index(FR_LIV4 ));
TString s(get("DESCR"));
if (get_bool("DESCLUNGA"))
s << get("DESCEST");
@@ -1908,6 +2006,21 @@ void TDocumento::copy_data(TRectype& dst, const TRectype& src)
if (nriga > 0)
dst.put("NRIGA", nriga);
}
+
+void TDocumento::copy_contents(const TDocumento & src)
+{
+ copy_data(head(), src.head());
+ destroy_rows();
+ const int rows = src.physical_rows();
+
+ for (int i = 0; i < rows ; i++)
+ {
+ const TRiga_documento & s = src[i];
+ TRiga_documento & r = new_row(s.tipo().codice());
+
+ copy_data(r, s);
+ }
+}
TRiga_documento& TDocumento::insert_row(int row, const char *tipo)
{
@@ -1953,6 +2066,8 @@ int TDocumento::read(const TRectype& rec)
_rows.set_key(key); // ok
}
set_riga_sconto();
+ if (is_fattura())
+ set_riga_esenzione();
return err;
}
@@ -1993,18 +2108,14 @@ void TDocumento::set_riga_sconto()
{
if (_sconto == NULL)
{
- static TString _tipo_riga;
- static long firm = -1;
- long new_firm = main_app().get_firm();
-
- if (firm != new_firm)
+ static TString _tipo_riga_sc;
+ if (_tipo_riga_sc.empty())
{
- TConfig conf(CONFIG_DITTA);
+ TConfig conf(CONFIG_STUDIO);
- _tipo_riga = conf.get("SCOTRIGA", "ve");
- firm = new_firm;
+ _tipo_riga_sc = conf.get("TRSCONTI", "ve");
}
- _sconto = new TRiga_documento(this, _tipo_riga);
+ _sconto = new TRiga_documento(this, _tipo_riga_sc);
_sconto->put("DESCR","Sconto");
}
_sconto->put("SCONTO", sconto);
@@ -2012,7 +2123,61 @@ void TDocumento::set_riga_sconto()
}
void TDocumento::set_riga_esenzione()
-{
+{
+ TCliFor & c = condv().clifo();
+ const char tipo = get_char("TIPOCF");
+ const long cod = get_long("CODCF");
+ const TString80 occ(get("OCFPI"));
+ c.load(tipo, cod, occ);
+ const TIVA codes(c.get(LF_CFVEN, CLI_ASSFIS));
+ const TString16 v_esenzione(c.get(LF_CFVEN, CLI_VSPROT));
+ const TString16 v_data_esenzione(c.get(LF_CFVEN, CLI_VSDATAREG));
+// const TString16 ufficio_IVA; ??
+ const TString16 n_registrazione(c.get(LF_CFVEN, CLI_NSPROT));
+ const TString16 n_data_registrazione(c.get(LF_CFVEN, CLI_NSDATAREG));
+ bool esente = codes.tipo().not_empty() && v_esenzione.not_empty() &&
+ v_data_esenzione.not_empty() && n_registrazione.not_empty() &&
+ n_data_registrazione.not_empty();
+
+ if (esente)
+ {
+ esente = FALSE;
+ const TString16 codiva(codes.codice());
+ for (int i = physical_rows(); !esente && i > 0; i--)
+ esente = codiva == row(i).get("CODIVA");
+ }
+
+ if (!esente)
+ {
+ if(_esenzione != NULL)
+ delete _esenzione;
+ _esenzione = NULL;
+ }
+ else
+ {
+ static TString _tipo_riga_es;
+ static real _bollo_es;
+ if (_tipo_riga_es.empty())
+ {
+ TConfig conf(CONFIG_STUDIO);
+
+ _tipo_riga_es = conf.get("TRESENZ", "ve");
+ _bollo_es = (real)conf.get("BOLLIES", "ve");
+ }
+ if (_esenzione == NULL)
+ _esenzione = new TRiga_documento(this, _tipo_riga_es);
+ TString d(256); d.format("Fattura non imponibile come da vostra dichiarazion");
+
+ _esenzione->put( "DESCR", d);
+
+ /* rilasciata dall' ufficio IVA di %s*/
+ d.format("e n. %s del %s da noi annotata al n. %s il %s. Marca da bollo da Lit. %s sull' originale.",
+ (const char *) v_esenzione, (const char *) v_data_esenzione,
+ /*(const char *) ufficio_IVA, */(const char *) n_registrazione,
+ (const char *) n_data_registrazione, _bollo_es.string("."));
+ _esenzione->put("DESCLUNGA", "X");
+ _esenzione->put("DESCEST", d);
+ }
}
void TDocumento::dirty_fields()
@@ -2168,7 +2333,7 @@ bool TDocumento::raggruppabile(const TDocumento& doc, TToken_string& campi) cons
void TDocumento::set_fields(TAuto_variable_rectype & rec)
{
- if (get("TIPODOC").not_empty())
+ if (tipo_valido())
{
TTipo_documento & tipo_doc = (TTipo_documento &) tipo();
const TString16 tot_doc(tipo_doc.totale_doc());
@@ -2361,9 +2526,23 @@ void TDocumento::zero(const char * fieldname)
void TDocumento::zero(char c)
{
reset_fields(*this);
- TAuto_variable_rectype::zero(c);
+ TAuto_variable_rectype::zero(c);
+ destroy_rows();
}
+TDocumento & TDocumento::operator =(const TDocumento & d)
+{
+ zero();
+ operator=((TRectype &)d);
+ _rows = d._rows;
+ set_riga_sconto();
+ if (is_fattura())
+ set_riga_esenzione();
+ set_relation(d._rel);
+ set_condv(d._condv);
+ return *this;
+}
+
TRectype & TDocumento::operator =(const TRectype & r)
{
TRectype::operator=(r);
@@ -2454,7 +2633,6 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old,
const int nrow = sh->insert(-1, FALSE);
riga.autoload(*sh);
sh->check_row(nrow);
-// sh->post_insert(nrow);
}
}
}
@@ -2745,6 +2923,114 @@ int TElaborazione::read(const char* cod)
return err;
}
+///////////////////////////////////////////////////////////
+// TEsterna
+///////////////////////////////////////////////////////////
+
+TEsterna::TEsterna(const char* cod)
+ : TElaborazione(cod)
+{
+}
+
+bool TEsterna::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
+ const TDate& data_elab)
+{
+ CHECK(doc_in.items() == 1, "Si deve specificare uno e un solo documento in entrata");
+ CHECK(doc_out.items() == 1, "Si deve specificare uno e un solo documento in uscita");
+ TFilename name; name.temp("ext");
+ {
+ TConfig c(name);
+ TDocumento & d = doc_in[0];
+ int nfields = d.items();
+ TString par; par.format("%d,0", LF_DOC);
+
+ for (int i = 0; i < nfields; i++)
+ {
+ const TString16 fname(d.fieldname(i));
+ TFieldref f(fname, LF_DOC);
+
+ f.write(c, par, d.get(fname));
+ }
+ for (TVariable_field * v = d.first_variable_field(); v ; v = d.succ_variable_field())
+ c.set(v->name(), v->get(), par);
+ const int rows = d.physical_rows();
+ if (rows > 0)
+ {
+ nfields = d[0].items();
+
+ for (int r = 0; r < rows; r++)
+ {
+ TRiga_documento row = d[r];
+
+ par.format("%d,%d", LF_RIGHEDOC, r + 1);
+ for (int i = 0; i < nfields; i++)
+ {
+ const TString16 fname(row.fieldname(i));
+ TFieldref f(fname, LF_RIGHEDOC);
+
+ f.write(c, par, row.get(fname));
+ }
+ }
+ }
+ }
+ TString command_line(applicazione_esterna()); command_line << " -i " << name;
+ TExternal_app app(command_line);
+ if (app.run() == 0)
+ {
+ TConfig c(name);
+ TDocumento & d = doc_out[0];
+ int nfields = d.items();
+ TString par; par.format("%d,0", LF_DOC);
+
+ for (int i = 0; i < nfields; i++)
+ {
+ const TString16 fname(d.fieldname(i));
+ TFieldref f(fname, LF_DOC);
+
+ d.put(fname, f.read(c, par));
+ }
+ for (TVariable_field * v = d.first_variable_field(); v ; v = d.succ_variable_field())
+ v->put(c.get(v->name(), par));
+
+ TString_array p;
+
+ c.list_paragraphs(p);
+ nfields = d[0].items();
+ d.destroy_rows();
+ int r = 1 ;
+ par.format("%d,%d", LF_RIGHEDOC, r);
+ while (p.find(par) >= 0)
+ {
+ TRiga_documento row = d.new_row();
+ for (int i = 0; i < nfields; i++)
+ {
+ const TString16 fname(row.fieldname(i));
+ TFieldref f(fname, LF_RIGHEDOC);
+
+ row.put(fname, f.read(c, par));
+ }
+ r++;
+ par.format("%d,%d", LF_RIGHEDOC, r);
+ }
+ }
+ return TRUE;
+}
+
+///////////////////////////////////////////////////////////
+// TConsegna ordini
+///////////////////////////////////////////////////////////
+
+TConsegna_ordini::TConsegna_ordini(const char* cod)
+ : TElaborazione(cod)
+{
+}
+
+bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
+ const TDate& data_elab)
+{
+ return TRUE;
+}
+
///////////////////////////////////////////////////////////
// TFatturazione bolle
///////////////////////////////////////////////////////////
@@ -2948,3 +3234,142 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do
return ok;
}
+///////////////////////////////////////////////////////////
+// TContabilizzazione
+///////////////////////////////////////////////////////////
+
+TContabilizzazione::TContabilizzazione(const char* cod)
+ : TElaborazione(cod)
+{
+}
+
+bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
+ const TDate& data_elab)
+{
+ CHECK(doc_in.items() == 1, "Si deve specificare uno e un solo documento in entrata");
+ CHECK(doc_out.items() == 1, "Si deve specificare uno e un solo documento in uscita");
+ return TRUE;
+}
+///////////////////////////////////////////////////////////
+// TCopia_documento
+///////////////////////////////////////////////////////////
+
+TCopia_documento::TCopia_documento(const char* cod)
+ : TElaborazione(cod)
+{
+}
+
+bool TCopia_documento::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
+ const TDate& data_elab)
+{
+ CHECK(doc_in.items() == 1, "Si deve specificare uno e un solo documento in entrata");
+ CHECK(doc_out.items() == 1, "Si deve specificare uno e un solo documento in uscita");
+ TDocumento & doc_src = doc_in[0];
+ TDocumento & doc_dest = doc_out[0];
+
+ doc_dest.copy_contents(doc_src);
+ return TRUE;
+}
+
+
+///////////////////////////////////////////////////////////
+// TGenerazione_effetti
+///////////////////////////////////////////////////////////
+
+TGenerazione_effetti::TGenerazione_effetti(const char* cod)
+ : TElaborazione(cod)
+{
+}
+
+bool TGenerazione_effetti::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
+ const TDate& data_elab)
+{
+ CHECK(doc_in.items() == 1, "Si deve specificare uno e un solo documento in entrata");
+ CHECK(doc_out.items() == 1, "Si deve specificare uno e un solo documento in uscita");
+ return TRUE;
+}
+
+///////////////////////////////////////////////////////////
+// TLista_elaborazioni
+///////////////////////////////////////////////////////////
+
+void TLista_elaborazioni::read()
+{
+ if (_elab == NULL)
+ {
+ _elab = new TAssoc_array();
+
+ TTable eld("%ELD");
+
+ for (int err = eld.first(); err == NOERR; err = eld.next())
+ {
+ TElaborazione * el = NULL;
+ switch (eld.curr().get_int("I0"))
+ {
+ case _esterna :
+ el = new TEsterna(eld.curr());
+ break;
+ case _consegna_ordini:
+ el = new TConsegna_ordini(eld.curr());
+ break;
+ case _fatturazione_bolle :
+ el = new TFatturazione_bolle(eld.curr());
+ break;
+ case _contabilizzazione :
+ el = new TContabilizzazione(eld.curr());
+ break;
+ case _copia_documento :
+ el = new TCopia_documento(eld.curr());
+ break;
+ case _generazione_effetti :
+ el = new TGenerazione_effetti(eld.curr());
+ break;
+ default :
+ break;
+ }
+ _elab->add(el->codice(), el);
+ }
+ }
+}
+
+int TLista_elaborazioni::select(TString_array & result, bool interattivo, bool insert_mode, const char * tipo_iniziale, const char * stato_iniziale, const char * tipo_finale, const char * stato_finale)
+{
+ read();
+ _elab->restart();
+ result.destroy();
+ for (TElaborazione * el = (TElaborazione *)_elab->get(); el ; el = (TElaborazione *) _elab->get())
+ {
+ bool ok = TRUE;
+ if (tipo_iniziale && stato_iniziale)
+ {
+ bool found = FALSE;
+ for (int i = 0; !found && i < 5; i++)
+ found = el->tipo_iniziale(i) == tipo_iniziale && el->stato_iniziale(i) == *stato_iniziale;
+ ok = found;
+ }
+ ok &= (tipo_finale && stato_finale && el->tipo_finale() == tipo_finale && el->stato_finale() == *stato_finale);
+ if (ok && (!interattivo || interattivo == el->interattivo()) &&
+ (!insert_mode || insert_mode == el->insert_mode()))
+ result.add(el->codice());
+ }
+ return result.items();
+}
+
+TElaborazione & TLista_elaborazioni::operator [](const char * key) const
+{
+ ((TLista_elaborazioni *)this)->read();
+ return (TElaborazione &) (*_elab)[key];
+}
+
+void TLista_elaborazioni::update()
+{
+ delete _elab; _elab = NULL;
+ read();
+
+}
+
+TLista_elaborazioni::~TLista_elaborazioni()
+{
+ if (_elab)
+ delete _elab;
+}
diff --git a/ve/velib01.h b/ve/velib01.h
index 2efda772f..af55b7f7b 100755
--- a/ve/velib01.h
+++ b/ve/velib01.h
@@ -160,10 +160,10 @@ class TFormula_documento : public TRectype
TExpr_documento * _expr;
protected:
- int read(const char* codice);
+ int read(const char* codice, const char* expr = NULL, bool numexpr = TRUE);
public:
- TObject* dup() const { return new TFormula_documento(_tab == "%FRD" ? _documento : _riga, codice()); }
+ TObject* dup() const { return new TFormula_documento(_tab == "%FRD" ? _documento : _riga, codice(), NULL, TRUE); }
public:
const TString& codice() const { return get("CODTAB");}
@@ -174,7 +174,7 @@ public:
const TString& expr_string() const { return get("S1"); }
TTypeexp expr_type() const { return get_bool("B0") ? _numexpr : _strexpr;}
- TFormula_documento(TTipo_formula tipo = _documento, const char* codice = NULL);
+ TFormula_documento(TTipo_formula tipo = _documento, const char* codice = NULL, const char* expr = NULL, bool numexpr = TRUE);
TFormula_documento(const TRectype& rec);
virtual ~TFormula_documento();
};
@@ -182,7 +182,8 @@ public:
class TTipo_documento : public TRectype
{
-
+ enum { _altro, _fattura, _bolla, _ordine};
+
static TAssoc_array _formule_documento;
TToken_string _formule;
TString16 _imponibile;
@@ -203,8 +204,14 @@ public:
const TString& profile_name() const { return get("S4");}
const TString& mask_name() const { return get("S4");}
const TString& causale() const { return get("S6"); }
+ int tipo() const { return get_int("I1"); }
const TString& codice() const { return get("CODTAB");}
+ bool is_generic() const { return tipo() == _altro; }
+ bool is_fattura() const { return tipo() == _fattura; }
+ bool is_bolla() const { return tipo() == _bolla; }
+ bool is_ordine() const { return tipo() == _ordine; }
+
const TString& descrizione() const { return get("S0"); }
const TString& riferimento() const { return get("S1"); }
const TString& imponibile() const { return _imponibile;}
@@ -361,12 +368,14 @@ public:
void set_condv(TCond_vendita * condv) { _condv = condv; }
void set_relation(TRelation * rel) { _rel = rel; }
+ virtual TDocumento & operator =(const TDocumento & d);
virtual TRectype & operator =(const TRectype & r);
virtual TRectype & operator =(const char * r);
virtual void zero(const char * fieldname);
virtual void zero(char c = '\0');
-
- int rows() const { return _rows.rows() + ((_sconto != NULL) ? 1 : 0) + ((_esenzione != NULL) ? 1 : 0); }
+
+ int physical_rows() const { return _rows.rows(); }
+ int rows() const { return physical_rows() + ((_sconto != NULL) ? 1 : 0) + ((_esenzione != NULL) ? 1 : 0); }
const TRiga_documento& operator[](int index) const { return (const TRiga_documento&)((TDocumento *)this)->row(index); }
TRiga_documento& operator[](int index) { return (TRiga_documento&)row(index); }
@@ -389,7 +398,8 @@ public:
TDate data() const { return get_date("DATADOC"); }
const bool in_valuta() const;
const TString& valuta() const { return get("CODVAL"); }
- const real cambio() { return get_real("CAMBIO"); }
+ const real cambio() const { return get_real("CAMBIO"); }
+ bool tipo_valido() const { return get("TIPODOC").not_empty(); }
const TTipo_documento& tipo() const;
void set_tipo(const char * tipo) { head().put("TIPODOC", tipo);}
@@ -401,6 +411,7 @@ public:
static void set_key(TRectype& rec, char provv, int anno, const char* codnum, long numdoc);
static void copy_data(TRectype& dst, const TRectype& src);
+ void copy_contents(const TDocumento & src);
void reset_fields(TAuto_variable_rectype & rec) { rec.remove_field(); }
void set_fields(TAuto_variable_rectype & rec);
@@ -421,6 +432,12 @@ public:
void update_spese_aut(TString_array & spese, bool preserve_old = FALSE, TSheet_field * sh = NULL);
+ bool is_generic() const { return tipo_valido() && tipo().is_generic(); }
+ bool is_fattura() const { return tipo_valido() && tipo().is_fattura(); }
+ bool is_bolla() const { return tipo_valido() && tipo().is_bolla(); }
+ bool is_ordine() const { return tipo_valido() && tipo().is_ordine(); }
+
+
TDocumento ();
TDocumento(char provv, int anno, const char* codnum, long numdoc,
TCond_vendita * condv = NULL, TRelation * rel = NULL);
@@ -539,6 +556,8 @@ class TLista_fornitori : public TLista_clifo
protected:
virtual char tipo() const { return 'F'; }
};
+
+enum TTipo_elaborazione {_esterna, _consegna_ordini, _fatturazione_bolle, _contabilizzazione, _copia_documento, _generazione_effetti };
class TElaborazione : public TRectype
{
@@ -547,6 +566,7 @@ protected:
public:
const TString& codice() const { return get("CODTAB"); }
+ const TTipo_elaborazione tipo() const { return (TTipo_elaborazione) get_int("I0"); }
bool doc_uguale(int u) const { return get("S1")[u] == 'X'; }
bool riga_uguale(int u) const { return get("S1")[40+u] == 'X'; }
@@ -554,9 +574,17 @@ public:
bool gestione_riferimenti() const { return get_bool("B1"); }
bool riferimenti_in_testa() const { return get_bool("B2"); }
bool ignora_descrizioni() const { return get_bool("B3"); }
+ bool interattivo() const { return get_bool("B5"); }
+ bool insert_mode() const { return get_bool("B6"); }
+
+ const TString& tipo_iniziale(int i) const { return get("S8").mid(i*4, 4); }
+ const char stato_iniziale(int i) const { return get("S9")[i]; }
+ const TString& tipo_finale() const { return get("S8"); }
+ const TString& stato_finale() const { return get("S9"); }
char tipo_numerazione() const { return get_bool("B4") ? 'P' : 'D'; }
const TString& codice_numerazione_finale() const { return get("S6"); }
+ const TString & applicazione_esterna() const { return get("S5"); }
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab) pure;
@@ -566,6 +594,28 @@ public:
virtual ~TElaborazione() { }
};
+class TEsterna : public TElaborazione
+{
+public:
+ virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
+ const TDate& data_elab);
+
+ TEsterna(const char* cod);
+ TEsterna(const TRectype& rec) : TElaborazione(rec) { }
+ virtual ~TEsterna() { }
+};
+
+class TConsegna_ordini : public TElaborazione
+{
+public:
+ virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
+ const TDate& data_elab);
+
+ TConsegna_ordini(const char* cod);
+ TConsegna_ordini(const TRectype& rec) : TElaborazione(rec) { }
+ virtual ~TConsegna_ordini() { }
+};
+
class TFatturazione_bolle : public TElaborazione
{
TToken_string _cod_desc;
@@ -579,7 +629,57 @@ public:
void stati_validi(TToken_string& stati) const;
TFatturazione_bolle(const char* cod);
+ TFatturazione_bolle(const TRectype& rec) : TElaborazione(rec) { }
virtual ~TFatturazione_bolle() { }
};
+class TContabilizzazione : public TElaborazione
+{
+public:
+ virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
+ const TDate& data_elab);
+
+ TContabilizzazione(const char* cod);
+ TContabilizzazione(const TRectype& rec) : TElaborazione(rec) { }
+ virtual ~TContabilizzazione() { }
+};
+
+class TCopia_documento : public TElaborazione
+{
+public:
+ virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
+ const TDate& data_elab);
+
+ TCopia_documento(const char* cod);
+ TCopia_documento(const TRectype& rec) : TElaborazione(rec) { }
+ virtual ~TCopia_documento() { }
+};
+
+
+class TGenerazione_effetti : public TElaborazione
+{
+public:
+ virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
+ const TDate& data_elab);
+
+ TGenerazione_effetti(const char* cod);
+ TGenerazione_effetti(const TRectype& rec) : TElaborazione(rec) { }
+ virtual ~TGenerazione_effetti() { }
+};
+
+class TLista_elaborazioni : public TObject
+{
+ TAssoc_array * _elab;
+
+protected:
+ void read();
+
+public:
+ TElaborazione & operator [](const char * key) const;
+ int select(TString_array & result, bool interattivo, bool insert_mode, const char * tipo_iniziale = NULL, const char * stato_iniziale = NULL, const char * tipo_finale = NULL, const char * stato_finale = NULL);
+ void update();
+ TLista_elaborazioni() : _elab(NULL) {}
+ virtual ~TLista_elaborazioni();
+};
+
#endif
diff --git a/ve/velib02.cpp b/ve/velib02.cpp
index 1451a1d7d..37e28f3c6 100755
--- a/ve/velib02.cpp
+++ b/ve/velib02.cpp
@@ -313,8 +313,8 @@ const char* TDocumentoEsteso::get_head_info(const TString & what)
return (const char*) rt;
}
-TDocumentoEsteso::TDocumentoEsteso(const TRectype& rec, TCliFor *cli)
- : TDocumento(rec), _sum_filter(-1), _sum_selected(FALSE), _scadenze_current(-1)
+TDocumentoEsteso::TDocumentoEsteso(const TRectype& rec, TCond_vendita * condv)
+ : TDocumento(rec, condv), _sum_filter(-1), _sum_selected(FALSE), _scadenze_current(-1)
{
_iva = new TTable("%IVA");
// Inizializza i parametri di default
@@ -323,8 +323,8 @@ TDocumentoEsteso::TDocumentoEsteso(const TRectype& rec, TCliFor *cli)
_parm.imp_lit = 0; _parm.imp_val = 3;
}
-TDocumentoEsteso::TDocumentoEsteso(const TRectype& rec, dec_parm & parm, TCliFor *cli)
- : TDocumento(rec), _sum_filter(-1), _sum_selected(FALSE), _scadenze_current(-1)
+TDocumentoEsteso::TDocumentoEsteso(const TRectype& rec, dec_parm & parm, TCond_vendita * condv)
+ : TDocumento(rec, condv), _sum_filter(-1), _sum_selected(FALSE), _scadenze_current(-1)
{
_parm = parm;
_iva = new TTable("%IVA");
diff --git a/ve/velib02.h b/ve/velib02.h
index f07424e5d..86040f8d9 100755
--- a/ve/velib02.h
+++ b/ve/velib02.h
@@ -138,8 +138,8 @@ public:
// Funzioni per settare i parametri
void set_decimals(dec_parm & parm) { _parm = parm ; }
void set_condv(TCliFor * cli); // Cambia le condizioni di vendita
- TDocumentoEsteso (const TRectype & rec, dec_parm & parm, TCliFor * cli = NULL) ;
- TDocumentoEsteso (const TRectype & rec, TCliFor * cli = NULL) ;
+ TDocumentoEsteso (const TRectype & rec, dec_parm & parm, TCond_vendita * condv = NULL) ;
+ TDocumentoEsteso (const TRectype & rec, TCond_vendita * condv = NULL) ;
TDocumentoEsteso () ;
~TDocumentoEsteso();
};
diff --git a/ve/verig.h b/ve/verig.h
index 66666aae6..b422f22d4 100755
--- a/ve/verig.h
+++ b/ve/verig.h
@@ -12,37 +12,41 @@
#define FR_CODSPQ 105
#define FR_CODSPP 105
#define FR_CODPRS 105
+#define FR_LIV1 106
+#define FR_LIV2 107
+#define FR_LIV3 108
+#define FR_LIV4 109
// DESCR DESCRART DESCRSPV DESCPSPQ DESCRSPP DESCRPRS alternativi definirne uno solo
-#define FR_DESCR 106
-#define FR_DESCRART 106
-#define FR_DESCRSPV 106
-#define FR_DESCRSPQ 106
-#define FR_DESCRSPP 106
-#define FR_DESCRPRS 106
+#define FR_DESCR 110
+#define FR_DESCRART 110
+#define FR_DESCRSPV 110
+#define FR_DESCRSPQ 110
+#define FR_DESCRSPP 110
+#define FR_DESCRPRS 110
// UMQTA UMQTASP UMQTAPR alternativi definirne uno solo
-#define FR_UMQTA 107
-#define FR_UMQTASP 107
+#define FR_UMQTA 111
+#define FR_UMQTASP 111
// QTA PERCSP alternativi definirne uno solo
-#define FR_QTA 108
-#define FR_PERCSP 108
+#define FR_QTA 112
+#define FR_PERCSP 112
// PREZZO VALORE alternativi definirne uno solo
-#define FR_PREZZO 109
-#define FR_VALORE 109
+#define FR_PREZZO 113
+#define FR_VALORE 113
-#define FR_QTAEVASA 110
-#define FR_RIGAEVASA 111
-#define FR_TARA 112
-#define FR_PNETTO 113
-#define FR_NCOLLI 114
-#define FR_DAEVADERE 115
-#define FR_SCONTO 116
-#define FR_PERCPROV 117
-#define FR_IMPFISUN 118
-#define FR_IMPFISSO 119
-#define FR_CODIVA 120
-#define FR_ADDIVA 121
-#define FR_ASPBENI 122
-#define FR_END 123
+#define FR_QTAEVASA 114
+#define FR_RIGAEVASA 115
+#define FR_TARA 116
+#define FR_PNETTO 117
+#define FR_NCOLLI 118
+#define FR_DAEVADERE 119
+#define FR_SCONTO 120
+#define FR_PERCPROV 121
+#define FR_IMPFISUN 122
+#define FR_IMPFISSO 123
+#define FR_CODIVA 124
+#define FR_ADDIVA 125
+#define FR_ASPBENI 126
+#define FR_END 127
#define MAX_COLUMNS FR_END-FR_STATORIGA
#define FR_DESMAG 150
diff --git a/ve/verig.uml b/ve/verig.uml
index 29f0e191d..864f2eecd 100755
--- a/ve/verig.uml
+++ b/ve/verig.uml
@@ -150,7 +150,7 @@ ENDIF
ENDIF
IFDEF(F_CODART)
-ST FR_CODART 20
+STRING FR_CODART 20
BEGIN
IFDEF(X_CODART)
PROMPT X_CODART Y_CODART PR_CODART
@@ -172,6 +172,89 @@ ENDIF
FIELD CODART
ADD RUN ve2 -3
END
+
+STRING FR_LIV1 10
+BEGIN
+IFDEF(X_LIV1)
+ PROMPT X_LIV1 Y_LIV1 ""
+ELSEIF
+ PROMPT 37 6 ""
+ FLAGS "U"
+ USE GCG
+ JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1]
+ INPUT CODTAB[1,1] "1"
+ INPUT CODTAB[2,] FR_LIV1
+ DISPLAY "Livello@20" 500@->S0
+ DISPLAY "Gruppo@10" CODTAB[2,]
+ DISPLAY "Descrizione@30" S0
+ OUTPUT FR_LIV1 CODTAB[2,]
+ MESSAGE EMPTY RESET,FR_LIV2|RESET,FR_LIV3|RESET,FR_LIV4
+ MESSAGE ENABLE,FR_LIV2
+ CHECKTYPE NORMAL
+ENDIF
+END
+
+STRING FR_LIV2 6
+BEGIN
+IFDEF(X_LIV2)
+ PROMPT X_LIV2 Y_LIV2 ""
+ELSEIF
+ PROMPT 50 6 ""
+ENDIF
+ FLAGS "U"
+ USE GCG
+ JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1]
+ INPUT CODTAB[1,1] "2"
+ INPUT CODTAB[2,] FR_LIV2
+ DISPLAY "Livello@20" 500@->S0
+ DISPLAY "Gruppo@10" CODTAB[2,]
+ DISPLAY "Descrizione@30" S0
+ OUTPUT FR_LIV2 CODTAB[2,]
+ MESSAGE EMPTY RESET,FR_LIV3|RESET,FR_LIV4
+ MESSAGE ENABLE,FR_LIV3
+ CHECKTYPE NORMAL
+END
+
+STRING FR_LIV3 6
+BEGIN
+IFDEF(X_LIV3)
+ PROMPT X_LIV3 Y_LIV3 ""
+ELSEIF
+ PROMPT 59 6 ""
+ENDIF
+ FLAGS "U"
+ USE GCG
+ JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1]
+ INPUT CODTAB[1,1] "3"
+ INPUT CODTAB[2,] FR_LIV3
+ DISPLAY "Livello@20" 500@->S0
+ DISPLAY "Gruppo@10" CODTAB[2,]
+ DISPLAY "Descrizione@30" S0
+ OUTPUT FR_LIV3 CODTAB[2,]
+ MESSAGE EMPTY RESET,FR_LIV4
+ MESSAGE ENABLE,FR_LIV4
+ CHECKTYPE NORMAL
+END
+
+STRING FR_LIV4 6
+BEGIN
+IFDEF(X_LIV4)
+ PROMPT X_LIV4 Y_LIV4 ""
+ELSEIF
+ PROMPT 67 6 ""
+ENDIF
+ FLAGS "U"
+ USE GCG
+ JOIN FCG ALIAS 500 INTO CODTAB==CODTAB[1,1]
+ INPUT CODTAB[1,1] "4"
+ INPUT CODTAB[2,] FR_LIV4
+ DISPLAY "Livello@20" 500@->S0
+ DISPLAY "Gruppo@10" CODTAB[2,]
+ DISPLAY "Descrizione@30" S0
+ OUTPUT FR_LIV4 CODTAB[2,]
+ CHECKTYPE NORMAL
+END
+
ENDIF
IFDEF(F_CODSPV)
diff --git a/ve/verig01.ini b/ve/verig01.ini
index c7eafc59e..bfe1d70cc 100755
--- a/ve/verig01.ini
+++ b/ve/verig01.ini
@@ -3,7 +3,6 @@
CALCOLI=IMPLN|IMPN|IMPNN|IMPNS|IMPOSTA|PREZZOLN|PREZZOLS|PREZZONN|PROVVR|SCONTOR
CAMPICALC=
IMPONIBILE=IMPNS
-IMPOSTA=IMPOSTA
[HANDLERS]
NHANDLER = 0
diff --git a/ve/verig02.ini b/ve/verig02.ini
index 661c2fce4..1459b5923 100755
--- a/ve/verig02.ini
+++ b/ve/verig02.ini
@@ -3,7 +3,6 @@
CALCOLI=IMPLN|IMPN|IMPNN|IMPNS|IMPOSTA|PREZZOLN|PREZZOLS|PREZZONN|PREZZONS|SCONTOR
CAMPICALC=
IMPONIBILE=IMPNS
-IMPOSTA=IMPOSTA
[HANDLERS]
NHANDLER = 0
diff --git a/ve/verig03.ini b/ve/verig03.ini
index ddbf40f0f..74c106a8e 100755
--- a/ve/verig03.ini
+++ b/ve/verig03.ini
@@ -3,7 +3,6 @@
CALCOLI=IMPLN|IMPN|IMPNN|IMPNS|IMPOSTA|PREZZOLN|PREZZOLS|PREZZONN|PREZZONS|SCONTOR
CAMPICALC=
IMPONIBILE=IMPNS
-IMPOSTA=IMPOSTA
[HANDLERS]
NHANDLER = 0
diff --git a/ve/verig04.ini b/ve/verig04.ini
index d956eb419..50a282132 100755
--- a/ve/verig04.ini
+++ b/ve/verig04.ini
@@ -3,7 +3,6 @@
CALCOLI=IMPLN|IMPN|IMPNN|IMPOSTA|PREZZOLN
CAMPICALC=
IMPONIBILE=IMPNN
-IMPOSTA=IMPOSTA
[HANDLERS]
NHANDLER = 0
diff --git a/ve/verig05.ini b/ve/verig05.ini
index f49937996..503184af1 100755
--- a/ve/verig05.ini
+++ b/ve/verig05.ini
@@ -3,7 +3,6 @@
CALCOLI=
CAMPICALC=
IMPONIBILE=
-IMPOSTA=
[HANDLERS]
NHANDLER = 0
diff --git a/ve/verig06.ini b/ve/verig06.ini
index f4075c851..a3c576d56 100755
--- a/ve/verig06.ini
+++ b/ve/verig06.ini
@@ -3,7 +3,6 @@
CALCOLI=IMPLN|IMPN|IMPNN|IMPNS|IMPOSTA|PREZZOLN|PREZZOLS|PREZZONN|PREZZONS|SCONTOR
CAMPICALC=
IMPONIBILE=IMPNS
-IMPOSTA=IMPOSTA
[HANDLERS]
NHANDLER = 0
diff --git a/ve/verig07.ini b/ve/verig07.ini
index f6eaad10d..7f92dd6ca 100755
--- a/ve/verig07.ini
+++ b/ve/verig07.ini
@@ -3,7 +3,6 @@
CALCOLI=IMPLN|IMPN|IMPNN|IMPOSTA
CAMPICALC=
IMPONIBILE=IMPNN
-IMPOSTA=IMPOSTA
[HANDLERS]
NHANDLER = 0
diff --git a/ve/verig08.ini b/ve/verig08.ini
index 3768bd687..6ad045a75 100755
--- a/ve/verig08.ini
+++ b/ve/verig08.ini
@@ -3,7 +3,6 @@
CALCOLI=IMPLN|IMPN|IMPNN|IMPOSTA
CAMPICALC=
IMPONIBILE=IMPNN
-IMPOSTA=IMPOSTA
[HANDLERS]
NHANDLER = 0
diff --git a/ve/verig09.ini b/ve/verig09.ini
index 30aef7cd4..86cdf6190 100755
--- a/ve/verig09.ini
+++ b/ve/verig09.ini
@@ -3,7 +3,6 @@
CALCOLI=IMPLN|IMPN|IMPNN|IMPOSTA|PREZZOLN|PREZZONN|PREZZONS
CAMPICALC=
IMPONIBILE=IMPNN
-IMPOSTA=IMPOSTA
[HANDLERS]
NHANDLER = 0
diff --git a/ve/verig09.uml b/ve/verig09.uml
index dc28a5d93..51e8b9126 100755
--- a/ve/verig09.uml
+++ b/ve/verig09.uml
@@ -1,30 +1,30 @@
-#include "verigdef.h"
-
-#define FULL_SCREEN
-// else
-// #define MASK_WIDTH 60
-// #define MASK_HEIGHT 14
-//
-#define MASK_TITLE1 "Omaggio"
-
-
-DEFINE_FIELD(CODMAG)
-// F_POS(CODMAG, 2, 3, "Magazzino ")
-// F_FLG(CODMAG, "U")
-// F_CHK(CODMAG, REQUIRED)
-DEFINE_FIELD(DESMAG)
-DEFINE_FIELD(CODDEP)
-DEFINE_FIELD(DESDEP)
-DEFINE_FIELD(CODART)
-DEFINE_FIELD(DESCRART)
-DEFINE_FIELD(UMQTA)
-DEFINE_FIELD(QTA)
-DEFINE_FIELD(PREZZO)
-DEFINE_FIELD(CODIVA)
-F_POS(CODIVA, 2, 11,"Cod. IVA " )
-DEFINE_FIELD(DESIVA)
-F_POS(DESIVA, 22, 11,"" )
-
-#include "verig.uml"
-
-
\ No newline at end of file
+#include "verigdef.h"
+
+#define FULL_SCREEN
+// else
+// #define MASK_WIDTH 60
+// #define MASK_HEIGHT 14
+//
+#define MASK_TITLE1 "Omaggio"
+
+
+DEFINE_FIELD(CODMAG)
+// F_POS(CODMAG, 2, 3, "Magazzino ")
+// F_FLG(CODMAG, "U")
+// F_CHK(CODMAG, REQUIRED)
+DEFINE_FIELD(DESMAG)
+DEFINE_FIELD(CODDEP)
+DEFINE_FIELD(DESDEP)
+DEFINE_FIELD(CODART)
+DEFINE_FIELD(DESCRART)
+DEFINE_FIELD(UMQTA)
+DEFINE_FIELD(QTA)
+DEFINE_FIELD(PREZZO)
+DEFINE_FIELD(CODIVA)
+F_POS(CODIVA, 2, 11,"Cod. IVA " )
+DEFINE_FIELD(DESIVA)
+F_POS(DESIVA, 22, 11,"" )
+DEFINE_FIELD(ADDIVA)
+
+#include "verig.uml"
+