1995-12-04 17:41:06 +00:00
|
|
|
|
#include <xvt.h>
|
|
|
|
|
|
|
|
|
|
#ifndef __CHECKS_H
|
|
|
|
|
#include <checks.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef __CONFAPP_H
|
|
|
|
|
#include <confapp.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
2008-11-03 16:45:40 +00:00
|
|
|
|
#ifndef __MSKSHEET_H
|
|
|
|
|
#include <msksheet.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef __RELATION_H
|
|
|
|
|
#include <relation.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
1995-12-04 17:41:06 +00:00
|
|
|
|
#ifndef __TABUTIL_H
|
|
|
|
|
#include <tabutil.h>
|
1997-06-03 10:29:42 +00:00
|
|
|
|
#endif
|
1995-12-04 17:41:06 +00:00
|
|
|
|
|
1996-09-17 11:16:56 +00:00
|
|
|
|
#include "veconf.h"
|
|
|
|
|
|
2008-10-29 16:37:56 +00:00
|
|
|
|
#define SINTASSI "Usage: VE0 -2 -[1|2|3|4|5|6|7|8]"
|
1995-12-04 17:41:06 +00:00
|
|
|
|
|
|
|
|
|
class TConf_vendite : public TConfig_application
|
1997-06-03 10:29:42 +00:00
|
|
|
|
{
|
2008-10-29 16:37:56 +00:00
|
|
|
|
int _current;
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
1997-03-15 11:06:33 +00:00
|
|
|
|
static bool check_fields(TMask_field& f, KEY k);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
static bool check_fields_iva(TMask_field& f, KEY k);
|
2005-09-19 12:45:16 +00:00
|
|
|
|
|
|
|
|
|
virtual const char * extra_modules() const {return "dt";}
|
|
|
|
|
|
1995-12-04 17:41:06 +00:00
|
|
|
|
public:
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
1995-12-04 17:41:06 +00:00
|
|
|
|
virtual bool preprocess_config (TMask& mask, TConfig& config);
|
|
|
|
|
virtual bool postprocess_config (TMask& mask, TConfig& config);
|
|
|
|
|
virtual bool user_create( );
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
1995-12-04 17:41:06 +00:00
|
|
|
|
TConf_vendite() : TConfig_application( CONFIG_DITTA ){ }
|
|
|
|
|
virtual ~TConf_vendite( ){ }
|
|
|
|
|
};
|
|
|
|
|
|
1997-03-15 11:06:33 +00:00
|
|
|
|
bool TConf_vendite::check_fields(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (k == K_TAB && f.focusdirty())
|
|
|
|
|
{
|
|
|
|
|
TString fld(f.get());
|
|
|
|
|
TMask& m = f.mask();
|
|
|
|
|
TToken_string t;
|
|
|
|
|
if (fld == "-") return TRUE;
|
|
|
|
|
for (short i=F_RICERCACR1;i<=F_RICERCAAN4;i++)
|
|
|
|
|
{
|
|
|
|
|
if (f.dlg() == i) continue;
|
|
|
|
|
t.add(m.get(i));
|
|
|
|
|
}
|
2008-10-29 16:37:56 +00:00
|
|
|
|
if (t.find(fld) >= 0)
|
1997-03-15 11:06:33 +00:00
|
|
|
|
return f.error_box("Immettere un gruppo di ricerca non ancora indicato nella sequenza");
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
bool TConf_vendite::check_fields_iva(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (k == K_ENTER)
|
|
|
|
|
{
|
|
|
|
|
TMask& m = f.mask();
|
|
|
|
|
|
|
|
|
|
real tot = ZERO;
|
|
|
|
|
|
|
|
|
|
for (short i = F_EX_PERCIVA1; i <= F_EX_PERCIVA5; i+=2)
|
|
|
|
|
tot += m.get_real(i);
|
|
|
|
|
|
|
|
|
|
if (tot != ZERO && tot != 100.0)
|
|
|
|
|
return f.error_box("La somma delle percentuali di esclusione deve dare 100 oppure 0.");
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1995-12-04 17:41:06 +00:00
|
|
|
|
bool TConf_vendite::preprocess_config (TMask& mask, TConfig& config)
|
1997-06-03 10:29:42 +00:00
|
|
|
|
{
|
1995-12-04 17:41:06 +00:00
|
|
|
|
disable_menu_item(M_FILE_NEW);
|
2008-10-29 16:37:56 +00:00
|
|
|
|
|
|
|
|
|
switch (_current)
|
1996-09-17 11:16:56 +00:00
|
|
|
|
{
|
2008-10-29 16:37:56 +00:00
|
|
|
|
|
|
|
|
|
case 5: // solo per configurazione "e"
|
1996-09-17 11:16:56 +00:00
|
|
|
|
{
|
2008-10-29 16:37:56 +00:00
|
|
|
|
TToken_string ric(config.get("RICERCACR"));
|
|
|
|
|
TString ana_items("AR|GM|SM|RF");
|
|
|
|
|
int nor_order = 0, ana_order = 0;
|
|
|
|
|
TString it;
|
|
|
|
|
mask.set_handler(F_RICERCACR1,check_fields);
|
|
|
|
|
mask.set_handler(F_RICERCACR2,check_fields);
|
|
|
|
|
mask.set_handler(F_RICERCACR3,check_fields);
|
|
|
|
|
mask.set_handler(F_RICERCACR4,check_fields);
|
|
|
|
|
mask.set_handler(F_RICERCACR5,check_fields);
|
|
|
|
|
mask.set_handler(F_RICERCAAN1,check_fields);
|
|
|
|
|
mask.set_handler(F_RICERCAAN2,check_fields);
|
|
|
|
|
mask.set_handler(F_RICERCAAN3,check_fields);
|
|
|
|
|
mask.set_handler(F_RICERCAAN4,check_fields);
|
|
|
|
|
for (it = ric.get();it.not_empty();it = ric.get())
|
1996-09-17 11:16:56 +00:00
|
|
|
|
{
|
2008-10-29 16:37:56 +00:00
|
|
|
|
if (ana_items.find(it) >= 0)
|
1996-09-19 11:12:20 +00:00
|
|
|
|
{
|
2008-10-29 16:37:56 +00:00
|
|
|
|
mask.set(F_RICERCAAN1+ana_order,it);
|
|
|
|
|
if (ana_order==0) // Se e' la prima volta...
|
|
|
|
|
{
|
|
|
|
|
mask.set(F_RICERCACR1+nor_order,"AN");
|
|
|
|
|
nor_order++;
|
|
|
|
|
}
|
|
|
|
|
ana_order++;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
mask.set(F_RICERCACR1+nor_order,it);
|
1996-09-19 11:12:20 +00:00
|
|
|
|
nor_order++;
|
|
|
|
|
}
|
1996-09-17 11:16:56 +00:00
|
|
|
|
}
|
2008-10-29 16:37:56 +00:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 6: // solo per configurazione "f"
|
1996-09-17 11:16:56 +00:00
|
|
|
|
{
|
2008-10-29 16:37:56 +00:00
|
|
|
|
mask.set_handler(F_EX_PERCIVA1,check_fields_iva); // Basta su uno che controlla tutti all'uscita della maschera
|
1996-09-17 11:16:56 +00:00
|
|
|
|
}
|
2008-10-29 16:37:56 +00:00
|
|
|
|
break;
|
2008-11-03 16:45:40 +00:00
|
|
|
|
case 8:
|
|
|
|
|
{
|
|
|
|
|
TSheet_field& sf = mask.sfield(F_DOCS); //prende lo sheet..
|
|
|
|
|
const TMask& sm = sf.sheet_mask(); //..poi la maschera di sheet..
|
|
|
|
|
bool found = true;
|
|
|
|
|
for (int r = 0; found; r++) //finch<63> ci sono valori c'<27> speranza!..
|
|
|
|
|
{ //Ovvero legge i valori finch<63> ce ne sono e non sono nulli aggiornando i..
|
|
|
|
|
FOR_EACH_MASK_FIELD(sm, j, f) //..campi dello sheet
|
|
|
|
|
{
|
|
|
|
|
const TFieldref* fr = f->field();
|
|
|
|
|
if (fr != NULL)
|
|
|
|
|
{
|
|
|
|
|
const TString& value = get_config()->get(fr->name(), NULL, r);
|
|
|
|
|
if (value.empty() && f->dlg() == 101)
|
|
|
|
|
{
|
|
|
|
|
found = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sf.row(r).add(value, sf.cid2index(f->dlg()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sf.check_row(sf.items() - 1); //metodo per ricaricare le descrizioni delle numerazioni
|
|
|
|
|
} //FOR_EACH_MASK_FIELD
|
|
|
|
|
} //for(int r=0...
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
2008-10-29 16:37:56 +00:00
|
|
|
|
default:
|
|
|
|
|
break;
|
1996-09-17 11:16:56 +00:00
|
|
|
|
}
|
2008-10-29 16:37:56 +00:00
|
|
|
|
return true;
|
1995-12-04 17:41:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-02-14 17:13:09 +00:00
|
|
|
|
|
1995-12-04 17:41:06 +00:00
|
|
|
|
bool TConf_vendite::postprocess_config (TMask& mask, TConfig& config)
|
1997-06-03 10:29:42 +00:00
|
|
|
|
{
|
1995-12-04 17:41:06 +00:00
|
|
|
|
enable_menu_item(M_FILE_NEW);
|
2008-10-29 16:37:56 +00:00
|
|
|
|
|
|
|
|
|
switch (_current)
|
1996-09-17 11:16:56 +00:00
|
|
|
|
{
|
2008-10-29 16:37:56 +00:00
|
|
|
|
|
|
|
|
|
case 5: // solo per configurazione "e"
|
|
|
|
|
{
|
|
|
|
|
TToken_string ric;
|
|
|
|
|
TString r;
|
|
|
|
|
const KEY k = mask.last_key();
|
|
|
|
|
bool tosave = k == K_ENTER || k == K_SAVE;
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
2008-10-29 16:37:56 +00:00
|
|
|
|
if (!tosave && mask.dirty())
|
|
|
|
|
tosave = yesno_box("Modifiche non registrate. Salvare?");
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
2008-10-29 16:37:56 +00:00
|
|
|
|
if (!tosave)
|
|
|
|
|
return FALSE;
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
2008-10-29 16:37:56 +00:00
|
|
|
|
for (short i=F_RICERCACR1;i<=F_RICERCACR5;i++)
|
|
|
|
|
{
|
|
|
|
|
r = mask.get(i);
|
|
|
|
|
if (r == "-") continue;
|
|
|
|
|
if (r == "AN")
|
|
|
|
|
for (short j=F_RICERCAAN1;j<=F_RICERCAAN4;j++)
|
|
|
|
|
{
|
|
|
|
|
r = mask.get(j);
|
|
|
|
|
if (r == "-") continue;
|
|
|
|
|
ric.add(r);
|
|
|
|
|
}
|
|
|
|
|
else
|
1996-09-19 11:12:20 +00:00
|
|
|
|
ric.add(r);
|
2008-10-29 16:37:56 +00:00
|
|
|
|
}
|
|
|
|
|
config.set("RICERCACR",ric);
|
1996-09-17 11:16:56 +00:00
|
|
|
|
}
|
2008-10-29 16:37:56 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2008-11-03 16:45:40 +00:00
|
|
|
|
case 8: //ve0200h.uml (fido bau!)
|
2008-10-29 16:37:56 +00:00
|
|
|
|
{
|
2008-11-03 16:45:40 +00:00
|
|
|
|
//sporco trucco perch<63> la postprocess_config salverebbe tutto in ogni modo (vedi file confapp.cpp e rabbrividisci!)..
|
|
|
|
|
//..mentre qui si vuole salvare solo in caso di CONFERMA da parte dell'utonto
|
|
|
|
|
const KEY k = mask.last_key();
|
|
|
|
|
bool tosave = k == K_ENTER || k == K_SAVE;
|
|
|
|
|
if (tosave)
|
|
|
|
|
{
|
|
|
|
|
TSheet_field& sf = mask.sfield(F_DOCS); //prende lo sheet..
|
|
|
|
|
const TMask& sm = sf.sheet_mask(); //..poi la maschera di sheet..
|
|
|
|
|
FOR_EACH_SHEET_ROW(sf, j, row) //per ogni riga dello sheet deve salvare SOLO i campi che hanno un field
|
|
|
|
|
{
|
|
|
|
|
short id = 101;
|
|
|
|
|
FOR_EACH_TOKEN((*row), tok)
|
|
|
|
|
{
|
|
|
|
|
const TFieldref* fr = sm.field(id++).field(); //settatore dei valori sul .ini
|
|
|
|
|
if (fr != NULL)
|
|
|
|
|
config.set(fr->name(), tok, NULL, true, j);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//gestione della eliminazione: finito il giro sulle righe presenti (FOR_EACH_SHEET_ROW) ogni altro campo presente..
|
|
|
|
|
//..eventualmente sul config risulta di troppo e viene giustamente accoppato
|
|
|
|
|
const TFieldref* fr = sm.field(101).field();
|
|
|
|
|
config.remove(fr->name(), sf.items());
|
|
|
|
|
}
|
2008-10-29 16:37:56 +00:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
break;
|
1996-09-17 11:16:56 +00:00
|
|
|
|
}
|
2008-10-29 16:37:56 +00:00
|
|
|
|
return true;
|
1995-12-04 17:41:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool TConf_vendite::user_create( )
|
|
|
|
|
{
|
|
|
|
|
TString16 arg( argv(2) );
|
|
|
|
|
if( arg[ 0 ] != '-' )
|
1997-06-03 10:29:42 +00:00
|
|
|
|
fatal_box( SINTASSI );
|
2008-10-29 16:37:56 +00:00
|
|
|
|
|
|
|
|
|
_current = arg[1] - '0';
|
|
|
|
|
|
|
|
|
|
TConfig conf(_current == 6 ? CONFIG_STUDIO : CONFIG_DITTA );
|
|
|
|
|
if (_current == 6)
|
|
|
|
|
set_config(CONFIG_STUDIO);
|
|
|
|
|
|
1996-09-17 11:16:56 +00:00
|
|
|
|
switch( _current )
|
1995-12-04 17:41:06 +00:00
|
|
|
|
{
|
2008-10-29 16:37:56 +00:00
|
|
|
|
case 1:
|
1996-09-17 11:16:56 +00:00
|
|
|
|
conf.set( "EdMask", "ve0200a", "ve" );
|
1995-12-04 17:41:06 +00:00
|
|
|
|
break;
|
2008-10-29 16:37:56 +00:00
|
|
|
|
case 2:
|
1996-09-17 11:16:56 +00:00
|
|
|
|
conf.set( "EdMask", "ve0200b", "ve" );
|
1995-12-04 17:41:06 +00:00
|
|
|
|
break;
|
2008-10-29 16:37:56 +00:00
|
|
|
|
case 3:
|
1996-09-17 11:16:56 +00:00
|
|
|
|
conf.set( "EdMask", "ve0200c", "ve" );
|
1995-12-04 17:41:06 +00:00
|
|
|
|
break;
|
2008-10-29 16:37:56 +00:00
|
|
|
|
case 4:
|
1996-09-17 11:16:56 +00:00
|
|
|
|
conf.set( "EdMask", "ve0200d", "ve" );
|
1995-12-04 17:41:06 +00:00
|
|
|
|
break;
|
2008-10-29 16:37:56 +00:00
|
|
|
|
case 5:
|
1996-09-17 11:16:56 +00:00
|
|
|
|
conf.set( "EdMask", "ve0200e", "ve" );
|
|
|
|
|
break;
|
2008-10-29 16:37:56 +00:00
|
|
|
|
case 6:
|
1996-09-17 11:16:56 +00:00
|
|
|
|
conf.set( "EdMask", "ve0200f", "ve" );
|
1995-12-04 17:41:06 +00:00
|
|
|
|
break;
|
2008-10-29 16:37:56 +00:00
|
|
|
|
case 7:
|
1999-04-06 15:34:39 +00:00
|
|
|
|
conf.set( "EdMask", "ve0200g", "ve" );
|
|
|
|
|
break;
|
2008-10-29 16:37:56 +00:00
|
|
|
|
case 8:
|
|
|
|
|
conf.set( "EdMask", "ve0200h", "ve");
|
|
|
|
|
break;
|
1995-12-04 17:41:06 +00:00
|
|
|
|
default:
|
|
|
|
|
fatal_box( SINTASSI );
|
2008-10-29 16:37:56 +00:00
|
|
|
|
return false;
|
1995-12-04 17:41:06 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
2008-10-29 16:37:56 +00:00
|
|
|
|
return true;
|
1997-06-03 10:29:42 +00:00
|
|
|
|
}
|
1995-12-04 17:41:06 +00:00
|
|
|
|
|
1999-04-06 15:34:39 +00:00
|
|
|
|
int ve0200(int argc, char* argv[])
|
1995-12-04 17:41:06 +00:00
|
|
|
|
{
|
|
|
|
|
TConf_vendite appc;
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
1995-12-04 17:41:06 +00:00
|
|
|
|
if( argc < 3 )
|
|
|
|
|
fatal_box( SINTASSI );
|
|
|
|
|
appc.run(argc, argv, "Parametri gestione vendite");
|
|
|
|
|
return 0;
|
1997-06-03 10:29:42 +00:00
|
|
|
|
}
|