Patch level : 10.0 patch 244

Files correlati     : ve0
Ricompilazione Demo : [ ]
Commento            :
Aggiunto il gruppo di testata delle lavanderie (4041)


git-svn-id: svn://10.65.10.50/trunk@18304 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2009-02-20 14:21:07 +00:00
parent b434396504
commit 501dbfa92a
3 changed files with 441 additions and 204 deletions

View File

@ -260,6 +260,7 @@ public:
// Attiva la generazione della maschera // Attiva la generazione della maschera
void genera( const TString& profilo); void genera( const TString& profilo);
void genera_testata_1();
// Genera l'intestazione di una pagina ( non la prima ) // Genera l'intestazione di una pagina ( non la prima )
void intestazione_pagina( const char* def_title = TR("Parametri")); void intestazione_pagina( const char* def_title = TR("Parametri"));
@ -414,6 +415,7 @@ public:
void present( bool p ) { _present = p; } void present( bool p ) { _present = p; }
bool present( ) const { return _present; } bool present( ) const { return _present; }
TArray& campi( ) { return _fields; } TArray& campi( ) { return _fields; }
const bool is_testata() const;
virtual TObject* dup() const; virtual TObject* dup() const;
TGruppo ( int i ); TGruppo ( int i );
@ -509,6 +511,17 @@ void TGruppo::add( TField * field )
field->grp(this); field->grp(this);
} }
const bool TGruppo::is_testata() const
{
FOR_EACH_ARRAY_ITEM(_fields, i, o)
{
TField* campo = (TField*) o;
if(campo->id() == F_STATO)
return true;
}
return false;
}
TGruppo::TGruppo( int i ) TGruppo::TGruppo( int i )
{ {
_id = i; _id = i;
@ -619,6 +632,7 @@ static void genera_gruppo( const TObject& gruppo )
grp.present(FALSE); grp.present(FALSE);
if (_mask_generator == NULL) if (_mask_generator == NULL)
_mask_generator = &(grp.generatore()); _mask_generator = &(grp.generatore());
grp.campi().for_each(verifica_campo); grp.campi().for_each(verifica_campo);
do_events(); do_events();
if (grp.present()) if (grp.present())
@ -654,7 +668,7 @@ void TGruppo::genera( )
// Passa alla pagina successiva // Passa alla pagina successiva
maschera( ).end( ); maschera( ).end( );
generatore( ).intestazione_pagina( ); generatore( ).intestazione_pagina( );
//maschera( ).line( MASK_FIRST_LINE ); maschera( ).line( MASK_FIRST_LINE );
oldlinea = MASK_FIRST_LINE; oldlinea = MASK_FIRST_LINE;
} }
_fields.for_each( genera_campo ); _fields.for_each( genera_campo );
@ -1215,127 +1229,12 @@ void TMask_generator::genera_sheet(int line, bool show_list, bool genera_disp)
_m->_sheet_generated = true; _m->_sheet_generated = true;
} }
void TMask_generator::genera( const TString& profilo ) void TMask_generator::genera_testata_1()
{ {
if( profilo == "-all" || profilo[0] == '*')
{
TString_array profiles;
{
TAssoc_array profiles_array;
TRelation rel("%TIP");
TCursor t( &rel );
long count = t.items();
for( t = 0; t.pos( ) < count; ++t )
{
const TString profile_name(t.curr().get("S4"));
TFilename profile(profile_name);
profile.ext("ini");
if (fexist(profile) && !profiles_array.is_key(profile_name))
profiles_array.add(profile_name);
}
profiles_array.get_keys(profiles);
}
TProgind bar( profiles.items(), "Generazione automatica profili", FALSE, TRUE);
const int items = profiles.items();
for (int i = 0; i < items; i++)
{
const TString &profile = profiles.row(i);
genera(profile);
bar.addstatus(1);
}
}
else
{
int i, last;
TString temp_s; TString temp_s;
TFilename proname( profilo );
// All'inizio il gruppo h 'chiuso'
_groupopen = FALSE;
// Forza l'estensione al profilo
proname.ext( "ini" );
// Se il file di profilo non esiste, esci con un errore fatale
if (!fexist( proname))
{
error_box( "Il profilo %s non esiste!", ( const char * )profilo);
return;
}
_pro = new TConfig( proname );
const char tipo_cf = _pro->get_char("TIPOCF", "MAIN"); const char tipo_cf = _pro->get_char("TIPOCF", "MAIN");
TFilename _mskname(profilo); _m->control( T_CORNICE, DLG_NULL, 7806);
_mskname.ext( "msk" );
do_events();
// Mi serve per ordinare i gruppi a seconda del documento
TAssoc_array grouporder;
_m = new TMaschera( _mskname );
// Definizione della toolbar
_m->outline( "TOOLBAR \"\" 0 0 0 2" );
_m->control( T_BOTTONE, DLG_SAVEREC, 1002 );
_m->begin( );
_m->prompt( -15, -1, "~Registra" );
_m->message( "EXIT,20082" );
_m->picture(BMP_SAVEREC);
_m->picture(BMP_SAVERECDN);
_m->end( );
_m->control( T_BOTTONE, DLG_DELREC, 1002 );
_m->begin( );
_m->prompt( -25, -1, "~Elimina" );
_m->message( "EXIT,127" );
_m->end( );
_m->control( T_BOTTONE, DLG_ELABORA, 1002 );
_m->begin( );
_m->prompt( -35, -1, "E~labora" );
_m->picture(BMP_ELABORA);
_m->end( );
_m->control( T_BOTTONE, DLG_PRINT, 1002 );
_m->begin( );
_m->prompt( -45, -1 );
_m->message( "EXIT,20082" );
_m->end( );
_m->control( T_BOTTONE, DLG_CONFERMA, 1002 );
_m->begin( );
_m->prompt( -45, -1, "~Conferma");
_m->picture(BMP_OK);
_m->flag("D");
_m->end( );
_m->control( T_BOTTONE, DLG_CANCEL, 1002 );
_m->begin( );
_m->prompt( -55, -1 );
_m->message( "EXIT,27" );
_m->end( );
// End della toolbar
_m->end( );
do_events();
// Header della prima pagina
const TString80 title(_pro->get("Title", "MAIN", _m->page(), TR("Testata")));
_m->pagina( _m->page( ), title);
_m->control( T_CORNICE, DLG_NULL, 7807);
_m->begin( ); _m->begin( );
_m->prompt( 1, 0, "" ); _m->prompt( 1, 0, "" );
_m->end( ); _m->end( );
@ -1466,23 +1365,6 @@ void TMask_generator::genera( const TString& profilo )
_m->message( "CO,10@" ); _m->message( "CO,10@" );
_m->end( ); _m->end( );
_m->control( T_STRINGA, F_RICALT, 30 );
_m->begin( );
_m->prompt( 22, 4, "" );
_m->warning( "Cliente assente" );
_m->help( "Codice mnemonico del cliente del documento" );
_m->group( 1 );
_m->use( LF_CLIFO, 6 );
temp_s.format( "TIPOCF \"%c\"~RICALT %d", tipo_cf, F_RICALT);
_m->input( temp_s );
_m->display( "\"Mnemonico@30\" RICALT~\"Codice\" CODCF~\"Ragione Sociale@50\" RAGSOC~\"Partita IVA@12\" PAIV~\"Sospeso\" SOSPESO" );
temp_s.format( "%d RICALT~%d CODCF~%d RAGSOC", F_RICALT, F_CODCF, F_RAGSOC );
_m->output( temp_s );
_m->check( S_NORMALE );
temp_s.format( "ADD RU cg0 -1 %c", tipo_cf);
_m->outline( temp_s );
_m->end( );
_m->control( T_STRINGA, F_RAGSOC, 50 ); _m->control( T_STRINGA, F_RAGSOC, 50 );
_m->begin( ); _m->begin( );
if ( tipo_cf == 'C' ) if ( tipo_cf == 'C' )
@ -1495,7 +1377,7 @@ void TMask_generator::genera( const TString& profilo )
_m->warning( "Fornitore assente" ); _m->warning( "Fornitore assente" );
_m->help( "Ragione sociale del fornitore del documento" ); _m->help( "Ragione sociale del fornitore del documento" );
} }
_m->prompt( 2, 5, "Ragione Sociale " ); _m->prompt( 24, 4, "" );
_m->group( 1 ); _m->group( 1 );
_m->use( LF_CLIFO, 2 ); _m->use( LF_CLIFO, 2 );
temp_s.format( "TIPOCF \"%c\"~RAGSOC %d", tipo_cf, F_RAGSOC ); temp_s.format( "TIPOCF \"%c\"~RAGSOC %d", tipo_cf, F_RAGSOC );
@ -1508,19 +1390,134 @@ void TMask_generator::genera( const TString& profilo )
_m->outline( temp_s ); _m->outline( temp_s );
_m->message( "CO,11@" ); _m->message( "CO,11@" );
_m->end( ); _m->end( );
_m->line( MASK_FIRST_LINE+1 ); // La prima pagina ha un'intestazione più lunga _m->line( MASK_FIRST_LINE );
}
// Generazione void TMask_generator::genera( const TString& profilo )
{
if( profilo == "-all" || profilo[0] == '*')
{
TString_array profiles;
// Scorro l'array dei gruppi, e ne creo una copia ordinata {
// con solo i gruppi visibili TAssoc_array profiles_array;
TRelation rel("%TIP");
TCursor t( &rel );
long count = t.items();
for( t = 0; t.pos( ) < count; ++t )
{
const TString profile_name(t.curr().get("S4"));
TFilename profile(profile_name);
profile.ext("ini");
if (fexist(profile) && !profiles_array.is_key(profile_name))
profiles_array.add(profile_name);
}
profiles_array.get_keys(profiles);
}
TProgind bar( profiles.items(), "Generazione automatica profili", FALSE, TRUE);
const int items = profiles.items();
for (int i = 0; i < items; i++)
{
const TString &profile = profiles.row(i);
genera(profile);
bar.addstatus(1);
}
}
else
{
int i, last;
TString temp_s;
TFilename proname( profilo );
// All'inizio il gruppo h 'chiuso'
_groupopen = FALSE;
// Forza l'estensione al profilo
proname.ext( "ini" );
// Se il file di profilo non esiste, esci con un errore fatale
if (!fexist( proname))
{
error_box( "Il profilo %s non esiste!", ( const char * )profilo);
return;
}
_pro = new TConfig( proname );
const char tipo_cf = _pro->get_char("TIPOCF", "MAIN");
TFilename _mskname(profilo);
_mskname.ext( "msk" );
do_events();
// Mi serve per ordinare i gruppi a seconda del documento
TAssoc_array grouporder;
_m = new TMaschera( _mskname );
// Definizione della toolbar
_m->outline( "TOOLBAR \"\" 0 0 0 2" );
_m->control( T_BOTTONE, DLG_SAVEREC, 1002 );
_m->begin( );
_m->prompt( -15, -1, "~Registra" );
_m->message( "EXIT,20082" );
_m->picture(BMP_SAVEREC);
_m->picture(BMP_SAVERECDN);
_m->end( );
_m->control( T_BOTTONE, DLG_DELREC, 1002 );
_m->begin( );
_m->prompt( -25, -1, "~Elimina" );
_m->message( "EXIT,127" );
_m->end( );
_m->control( T_BOTTONE, DLG_ELABORA, 1002 );
_m->begin( );
_m->prompt( -35, -1, "E~labora" );
_m->picture(BMP_ELABORA);
_m->end( );
_m->control( T_BOTTONE, DLG_PRINT, 1002 );
_m->begin( );
_m->prompt( -45, -1 );
_m->message( "EXIT,20082" );
_m->end( );
_m->control( T_BOTTONE, DLG_CONFERMA, 1002 );
_m->begin( );
_m->prompt( -45, -1, "~Conferma");
_m->picture(BMP_OK);
_m->flag("D");
_m->end( );
_m->control( T_BOTTONE, DLG_CANCEL, 1002 );
_m->begin( );
_m->prompt( -55, -1 );
_m->message( "EXIT,27" );
_m->end( );
// End della toolbar
_m->end( );
do_events();
// Header della prima pagina
const TString80 title(_pro->get("Title", "MAIN", _m->page(), TR("Testata")));
_m->pagina( _m->page( ), title);
TArray sortedgroups; TArray sortedgroups;
TString16 chiave, chiavegruppo; TString16 chiave, chiavegruppo;
last = _pro->get_int( "NGROUPS", "ORDINEGRUPPI" ); last = _pro->get_int( "NGROUPS", "ORDINEGRUPPI" );
for( i = 1; i <= last; i ++ ) for( i = 1; i <= last; i ++ )
{ {
do_events();
chiave.format( "%d", i ); chiave.format( "%d", i );
const TString key(_pro->get( chiave, "ORDINEGRUPPI" )); const TString key(_pro->get( chiave, "ORDINEGRUPPI" ));
@ -1537,11 +1534,23 @@ void TMask_generator::genera( const TString& profilo )
} }
} }
// Generazione
// Scorro l'array dei gruppi, e ne creo una copia ordinata
// con solo i gruppi visibili
TString80 message; TString80 message;
_m->_sheet_generated = false; _m->_sheet_generated = false;
message.format("Generazione profilo : %s", (const char *)profilo); message.format("Generazione profilo : %s", (const char *)profilo);
_bar = new TProgind(sortedgroups.items(), message, FALSE, TRUE); _bar = new TProgind(sortedgroups.items(), message, FALSE, TRUE);
TGruppo* gruppo1 = (TGruppo*)sortedgroups.objptr(0);
if (gruppo1->is_testata())
_m->line(0);
else
genera_testata_1();
sortedgroups.for_each( genera_gruppo ); sortedgroups.for_each( genera_gruppo );
delete _bar; _bar = NULL; delete _bar; _bar = NULL;
_m->end( ); _m->end( );

View File

@ -49,6 +49,7 @@
#include "veuml.h" #include "veuml.h"
#include "veuml1.h" #include "veuml1.h"
#include "veuml3.h"
#include "veini.h" #include "veini.h"
[OCCASEDIT] [OCCASEDIT]
@ -84,20 +85,6 @@ DISPLAY="Codice Fiscale@16" COFI~"Ragione sociale@50" RAGSOC~"Codice" CODCF~"Ind
OUTPUT=@F_CODCF OUTPUT=@F_CODCF
SIZE=16 SIZE=16
[RICALT]
// il campo e' letto nel file 20 clifo
GROUP=100
X=2
Y=0
MSKID=F_RICALT
TYPE=T_STRINGA
PROMPT="Ric. alt."
USE=LF_CLIFO KE 6
INPUT=TIPOCF F_TIPOCF SELECT~RICALT F_RICALT
DISPLAY="Ricerca Altrenativa@30" RICALT~"Ragione sociale@50" RAGSOC~"Codice" CODCF~"Indrizzo@35" INDCF
OUTPUT=@F_CODCF
SIZE=30
[STATOPAIV] [STATOPAIV]
// il campo e' letto nel file 20 clifo // il campo e' letto nel file 20 clifo
GROUP=100 GROUP=100
@ -940,7 +927,7 @@ TYPE=T_NUMERO
PROMPT="Stato " PROMPT="Stato "
SIZE=3 SIZE=3
FLAG=Z FLAG=Z
USE=@F_STATOCF USE=%STA
INPUT=CODTAB F_STATOSP INPUT=CODTAB F_STATOSP
OUTPUT=F_DESSTATOSP S0 OUTPUT=F_DESSTATOSP S0
SPECIAL=CH SEARCH SPECIAL=CH SEARCH
@ -963,7 +950,7 @@ TYPE=T_STRINGA
PROMPT="Comune " PROMPT="Comune "
SIZE=4 SIZE=4
FLAG=U FLAG=U
USE=@F_COMCF USE=LF_COMUNI
INPUT=STATO F_STATOSP~COM F_COMSP INPUT=STATO F_STATOSP~COM F_COMSP
OUTPUT=F_DENCOMSP DENCOM~F_PROVCOMSP PROVCOM OUTPUT=F_DENCOMSP DENCOM~F_PROVCOMSP PROVCOM
SPECIAL=CH SEARCH SPECIAL=CH SEARCH
@ -1689,13 +1676,242 @@ SPECIAL=CH NORMAL
[DESCRMAGC] [DESCRMAGC]
GROUP=2900 GROUP=2900
X=25 X=2
Y=1 Y=1
MSKID=F_DESCRMAGC MSKID=F_DESCRMAGC
TYPE=T_STRINGA TYPE=T_STRINGA
PROMPT="" PROMPT=""
SIZE=50 SIZE=50
[LVGROUP]
GROUP=4041
X=1
Y=0
MSKID=F_LVGROUP
TYPE=T_CORNICE
SIZE=7907
PROMPT=""
[LVCODNUM]
GROUP=4041
X=2
Y=1
FIELDNAME=CODNUM
MSKID=F_CODNUM
TYPE=T_STRINGA
SIZE=4
PROMPT="Cod. Num. "
FLAG=GDU
USE=%NUM
INPUT=CODTAB F_CODNUM
DISPLAY="Codice" CODTAB~"Descrizione@50" S0
OUTPUT=F_DESNUM S0
SPECIAL=CH NORMAL~ME CO,2@
[LVDESNUM]
GROUP=4041
X=18
Y=1
MSKID=F_DESNUM
TYPE=T_STRINGA
SIZE=45
PROMPT=""
FLAG=GD
SPECIAL=ME CO,3@
[LVSTATO]
GROUP=4041
X=71
Y=1
FIELDNAME=STATO
MSKID=F_STATO
TYPE=T_STRINGA
SIZE=1
PROMPT="Stato "
FLAG=GD
USE=%STD
INPUT=CODTAB F_STATO
DISPLAY="Codice" CODTAB~"Descrizione@50" S0
OUTPUT=F_STATO CODTAB
SPECIAL=CH NORMAL~ME CO,8@
[LVPROVV]
GROUP=4041
X=200
Y=1
FIELDNAME=PROVV
MSKID=F_PROVV
TYPE=T_STRINGA
SIZE=1
PROMPT="Provvisorio/Definitivo"
FLAG=D
[LVTIPODOC]
GROUP=4041
X=2
Y=2
FIELDNAME=TIPODOC
MSKID=F_TIPODOC
TYPE=T_STRINGA
SIZE=4
PROMPT="Tipo Doc. "
FLAG=GDU
USE=%TIP
INPUT=CODTAB F_TIPODOC
DISPLAY="Codice" CODTAB~"Descrizione@50" S0
OUTPUT=F_DESTIPODOC S0
SPECIAL=CH NORMAL~ME CO,4@
[LVDESTIPODOC]
GROUP=4041
X=18
Y=2
MSKID=F_DESTIPODOC
TYPE=T_STRINGA
SIZE=45
PROMPT=""
FLAG=GD
SPECIAL=ME CO,5@
[LVNDOC]
GROUP=4041
X=64
Y=2
FIELDNAME=NDOC
MSKID=F_NDOC
TYPE=T_NUMERO
SIZE=4
PROMPT="Num. Doc. "
FLAG=GDR
SPECIAL=ME CO,6@
[LVANNO]
GROUP=4041
X=2
Y=3
FIELDNAME=ANNO
MSKID=F_ANNO
TYPE=T_STRINGA
SIZE=4
PROMPT="Esercizio "
FLAG=GD
SPECIAL=ME CO,9@
[LVDATADOC]
GROUP=4041
X=18
Y=3
FIELDNAME=DATADOC
MSKID=F_DATADOC
TYPE=T_DATA
SPECIAL=ME CO,7@
[LVGIORNO]
GROUP=4041
X=34
Y=3
MSKID=F_LVGIORNO
TYPE=T_STRINGA
PROMPT =""
SIZE=9
FLAG=D
[LVSETTIMANA]
GROUP=4041
X=44
Y=3
MSKID=F_LVSETTIMANA
TYPE=T_STRINGA
PROMPT="Settimana "
SIZE=1
FLAG=D
[LVTIPOCF]
GROUP=4041
X=200
Y=4
FIELDNAME=TIPOCF
MSKID=F_TIPOCF
TYPE=T_LISTA
ITEMS=C|Cliente
SIZE=9
PROMPT=""
FLAG=D
[LVCODCF]
GROUP=4041
X=2
Y=4
FIELDNAME=CODCF
MSKID=F_CODCF
TYPE=T_STRINGA
SIZE=6
PROMPT="Cliente "
FLAG=R
USE=LF_CLIFO
INPUT=TIPOCF "C"~CODCF F_CODCF
DISPLAY="Codice" CODCF~"Mnemonico" RICALT~"Ragione Sociale@50" RAGSOC
OUTPUT=F_CODCF CODCF~F_RAGSOC RAGSOC~F_LVRICALT RICALT
SPECIAL=CH REQUIRED~ADD RU cg0 -1 "C"~ME CO,10@
[LVRICALT]
GROUP=4041
X=23
Y=4
MSKID=F_LVRICALT
TYPE=T_STRINGA
SIZE=30
PROMPT=""
USE=LF_CLIFO KE 6
INPUT=TIPOCF "C"~RICALT F_LVRICALT
DISPLAY="Mnemonico" RICALT~"Codice" CODCF~"Ragione Sociale@50" RAGSOC
OUTPUT=@F_CODCF
[LVCODCONT]
GROUP=4041
X=66
Y=4
FIELDNAME=CODCONT
MSKID=F_LVCODCONT
TYPE=T_NUMERO
PROMPT="Contratto "
SIZE=2
FLAG=D
[LVRAGSOC]
GROUP=4041
X=2
Y=5
MSKID=F_RAGSOC
TYPE=T_STRINGA
SIZE=50
PROMPT="Ragione Sociale "
USE=LF_CLIFO KE 2
INPUT=TIPOCF "C"~RAGSOC F_RAGSOC
DISPLAY="Ragione Sociale@50" RAGSOC~"Codice" CODCF~"Mnemonico" RICALT
OUTPUT=@F_CODCF
SPECIAL=CH REQUIRED~ADD RU cg0 -1 "C"~ME CO,11@
[LVCODCAU]
GROUP=4041
X=2
Y=7
MSKID=F_LVCODCAU
TYPE=T_STRINGA
PROMPT="Causale "
SIZE=5
FLAG=DU
[LVDESCAU]
GROUP=4041
X=19
Y=7
MSKID=F_LVDESCAU
TYPE=T_STRINGA
PROMPT=""
SIZE=50
FLAG=DU
[BLANK] [BLANK]
GROUP=4000 GROUP=4000
X=100 X=100
@ -1704,4 +1920,3 @@ MSKID=F_BLANK
TYPE=T_STRINGA TYPE=T_STRINGA
PROMPT="" PROMPT=""
SIZE=1 SIZE=1

13
ve/veuml3.h Executable file
View File

@ -0,0 +1,13 @@
#ifndef __VEUML3_H
#define __VEUML3_H
// campi del gruppo lavanderie (4041)
#define F_LVGROUP 800
#define F_LVRICALT 801
#define F_LVGIORNO 802
#define F_LVSETTIMANA 803
#define F_LVCODCONT 804
#define F_LVCODCAU 805
#define F_LVDESCAU 806
#endif // __VEUML3_H