1997-06-09 13:10:38 +00:00
# include "velib.h"
2000-05-05 15:25:49 +00:00
# include "ve2400.h"
2007-06-21 14:20:08 +00:00
# include "ve2401.h"
1998-05-04 09:54:49 +00:00
2005-04-21 16:40:40 +00:00
# include "../ca/calib01.h"
1995-08-07 07:59:09 +00:00
2006-12-13 16:22:33 +00:00
# include <modaut.h>
# include <relapp.h>
# include <tabutil.h>
# include <urldefid.h>
2005-02-17 18:13:12 +00:00
//---------------------------------------------------
// MASCHERA ANAGRAFICA MAGAZZINO
//---------------------------------------------------
2004-11-30 22:02:59 +00:00
class TMask_anamag : public TMask
{
2006-12-13 16:22:33 +00:00
TRelation * _rel ; // relazione principale
1997-05-23 14:48:37 +00:00
2006-12-13 16:22:33 +00:00
TCodgiac_livelli * livelli_giac ; // oggetto handler per i livelli di giacenza
TCodart_livelli * livelli_art ; // oggetto handler per i livelli di anagraficca
int last_annogiac , last_annosto ;
2003-05-05 14:32:23 +00:00
2006-12-13 16:22:33 +00:00
int _type_cod , _altype_cod ;
TString4 _ean8_pref ;
TString8 _ean13_pref ;
bool _ean8_cin ;
2003-05-05 14:32:23 +00:00
TString16 _generated_code ;
1997-06-27 15:10:03 +00:00
2006-12-13 16:22:33 +00:00
TString4 _um_principale ;
1999-04-06 15:34:39 +00:00
TMagazzini * _magazzini ;
TEsercizi_contabili * _esercizi_contabili ;
1997-08-22 09:27:37 +00:00
1997-06-27 15:10:03 +00:00
static bool handle_codice ( TMask_field & , KEY ) ; // handler del campo codice articolo
static bool handle_anno ( TMask_field & , KEY ) ; // handler del campo anno delle giacenze
static bool handle_stoanno ( TMask_field & , KEY ) ; // handler del campo anno delle giacenze
2000-10-03 13:45:12 +00:00
static bool handle_stoanno_row ( TMask_field & , KEY ) ; // handler del campo anno delle giacenze sulle righe
1997-05-23 14:46:41 +00:00
static bool handle_sheet_um ( TMask_field & , KEY ) ; // handler dello sheet delle unit<69> di misura
1997-06-27 16:45:59 +00:00
static bool notify_sheet_um ( TSheet_field & s , int r , KEY k ) ; // notify dello sheet delle unit<69> di misura
1997-05-23 14:46:41 +00:00
static bool handle_sheet_deslin ( TMask_field & , KEY ) ; // handler dello sheet delle descrizioni in lingua
static bool handle_sheet_cod ( TMask_field & , KEY ) ; // handler dello sheet dei codici alternativi
2006-12-13 16:22:33 +00:00
static bool notify_sheet_cod ( TSheet_field & s , int r , KEY k ) ; // notify dello sheet delle unit<69> di misura
2003-05-05 14:32:23 +00:00
static bool handle_codcorr ( TMask_field & , KEY ) ; // handler dello sheet dei codici alternativi
1997-07-25 08:56:42 +00:00
static bool notify_sheet_giac ( TSheet_field & s , int r , KEY k ) ; // notify delle giacenze
1997-05-23 14:46:41 +00:00
static bool handle_sheetgiac ( TMask_field & , KEY ) ; // handler dello sheet giacenze
1997-06-27 16:45:59 +00:00
static bool notify_sheet_sto ( TSheet_field & s , int r , KEY k ) ; // notify dello storico
1997-05-23 14:48:37 +00:00
static bool handle_sheetstomag ( TMask_field & , KEY ) ; // handler dello sheet storico giacenze
1997-05-23 14:46:41 +00:00
static bool handle_sheet_um_um ( TMask_field & , KEY ) ; // handler del campo UM dello sheet delle unit<69> di misura
static bool handle_sheet_um_price ( TMask_field & , KEY ) ; // handler del campo PREZZO e PREZZO_LORDO dello sheet delle unit<69> di misura
2002-02-26 16:20:19 +00:00
static bool handle_sheet_giac_codmag ( TMask_field & , KEY ) ; // handler
1998-11-04 18:04:26 +00:00
static bool handle_sheet_giac_valgiac ( TMask_field & , KEY ) ; // handler
1999-04-06 15:34:39 +00:00
static bool handle_sheet_stomag_stoval ( TMask_field & , KEY ) ; // handler
1998-11-04 18:04:26 +00:00
static bool handle_autoinsert_livgiac ( TMask_field & , KEY ) ; // handler del campo
2005-02-17 18:13:12 +00:00
static bool handle_classdog2 ( TMask_field & , KEY ) ; // handler del secondo sottocampo della classe doganale
1997-05-23 14:48:37 +00:00
1997-06-27 15:10:03 +00:00
static void sheetgiac_get ( TSheet_field & fld_righe , int item ) ;
static void sheetgiac_put ( TSheet_field & fld_righe , int item ) ;
static void sheetsto_get ( TSheet_field & fld_righe , int item ) ;
static void sheetsto_put ( TSheet_field & fld_righe , int item ) ;
1997-06-10 12:53:19 +00:00
1997-06-27 15:10:03 +00:00
void clear_info_sto ( ) ;
bool info_sto_dirty ( ) ;
1997-06-27 16:45:59 +00:00
int add_totali_storico ( TString & codmag ) ;
bool remove_totali_storico ( TString & codmag ) ;
void update_totali_storico ( TString & codmag ) ;
2006-12-15 10:44:40 +00:00
bool check_totali_storico ( ) ;
void create_user_fields ( ) ;
2003-05-05 14:32:23 +00:00
1997-05-23 14:46:41 +00:00
public :
2006-12-13 16:22:33 +00:00
bool generate_code ( int _type = 0 ) ;
2001-05-02 13:40:49 +00:00
void update_ordc_ordf ( ) ;
1999-04-06 15:34:39 +00:00
void set_parametered_fields ( ) ;
1997-08-18 15:19:39 +00:00
void ricalcola_giacenze ( ) ;
2005-02-17 18:13:12 +00:00
TCodart_livelli * get_livelli_art ( ) const { return livelli_art ; }
1997-08-20 09:39:42 +00:00
2006-12-13 16:22:33 +00:00
const TString & generated_code ( ) { return _generated_code ; }
2005-05-09 11:07:31 +00:00
TString & um_principale ( ) { return _um_principale ; }
TMagazzini & magazzini ( ) { return * _magazzini ; }
2006-12-13 16:22:33 +00:00
1999-04-06 15:34:39 +00:00
TEsercizi_contabili & esercizi_contabili ( ) { return * _esercizi_contabili ; }
1997-05-23 14:46:41 +00:00
1999-04-06 15:34:39 +00:00
TMask_anamag ( TRelation * rel ) ;
1997-06-27 16:45:59 +00:00
virtual ~ TMask_anamag ( ) ;
1997-05-23 14:46:41 +00:00
} ;
2005-02-17 18:13:12 +00:00
//--------------------------------------------
// APPLICAZIONE
//--------------------------------------------
2001-05-02 13:40:49 +00:00
class TAnagrafica_magazzino : public TRelation_application
{
1998-11-04 18:04:26 +00:00
TMask_anamag * _msk ; // maschera principale
TRelation * _rel ; // relazione principale di un solo file (anagrafiche di magazzino)
protected :
virtual bool user_create ( ) ;
virtual bool user_destroy ( ) ;
virtual TMask * get_mask ( int ) { return _msk ; }
2006-12-13 16:22:33 +00:00
virtual bool changing_mask ( int ) { return false ; }
2002-05-08 16:25:49 +00:00
virtual void init_query_mode ( TMask & ) ;
virtual void init_insert_mode ( TMask & ) ;
virtual void init_modify_mode ( TMask & ) ;
1999-04-06 15:34:39 +00:00
virtual void on_firm_change ( ) ;
2001-05-02 13:40:49 +00:00
bool search_on_file ( const char * key , int file , int nkey , const char * field ) ;
virtual bool protected_record ( TRectype & ) ;
1998-11-04 18:04:26 +00:00
virtual int read ( TMask & m ) ;
1999-04-06 15:34:39 +00:00
void load_um ( TMask & m ) ;
1998-11-04 18:04:26 +00:00
virtual bool remove ( ) ;
virtual int write ( const TMask & m ) ;
virtual int rewrite ( const TMask & m ) ;
2001-05-02 13:40:49 +00:00
virtual void ini2sheet ( TConfig & ini , TSheet_field & sheet ) ;
virtual void sheet2ini ( TSheet_field & sheet , TConfig & ini ) ;
2002-05-08 16:25:49 +00:00
static bool handle_copia ( TMask_field & , KEY ) ; // handler della copia articolo
1998-11-04 18:04:26 +00:00
public :
2002-05-08 16:25:49 +00:00
virtual TRelation * get_relation ( ) const { return _rel ; }
1998-11-04 18:04:26 +00:00
// @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
2006-12-13 16:22:33 +00:00
virtual bool check_autorization ( ) const { return false ; }
1999-04-06 15:34:39 +00:00
TAnagrafica_magazzino ( ) { _rel = NULL ; _msk = NULL ; }
1998-11-04 18:04:26 +00:00
virtual ~ TAnagrafica_magazzino ( ) { }
} ;
inline TAnagrafica_magazzino & app ( ) { return ( TAnagrafica_magazzino & ) main_app ( ) ; }
2005-02-17 18:13:12 +00:00
//-------------------------------------------------------------------------------------------------
// METODI DELLA MASCHERA
//-------------------------------------------------------------------------------------------------
//------------------------------------------
//gestione codice articolo multilivello
//------------------------------------------
static bool handle_subcodice ( TMask_field & fld , KEY k )
{
TMask & mask = fld . mask ( ) ;
if ( k = = K_TAB & & ( fld . focusdirty ( ) | | ! mask . is_running ( ) ) ) //c'e' qualcosa nel campo
{
//quale e' l'ultimo campo valido per codart in multilevel?
short id_last = fld . dlg ( ) ;
while ( id_last < = F_LIVART9 & & mask . id2pos ( id_last + 1 ) > 0 )
id_last + + ;
if ( fld . empty ( ) )
{
//gira su tutti i campi di livart esistenti e successivi al livello corrente
for ( short id = fld . dlg ( ) + 1 ; id < = id_last ; id + + )
{
mask . set ( id , " " ) ;
mask . disable ( id ) ;
}
}
else
{
const int pos = mask . id2pos ( fld . dlg ( ) + 1 ) ;
if ( pos > 0 )
{
TMask_field & next_fld = mask . fld ( pos ) ;
next_fld . enable ( ) ;
}
}
//riempie in automatico il campo codice complessivo
TString80 stringone ;
bool completo = true ;
for ( short id = F_LIVART1 ; id < = id_last ; id + + )
{
const TString & val = mask . get ( id ) ;
if ( val . blank ( ) )
{
completo = false ;
break ;
}
stringone < < val ;
}
mask . set ( F_CODART , stringone , fld . dlg ( ) = = id_last ? 0x3 : 0x0 ) ;
}
return true ;
}
2005-03-03 15:42:04 +00:00
void create_browse1 ( TEdit_field & kfld , int level , short key_id , short des_id , const TCodart_livelli & cal , const bool chktyp )
2005-02-17 18:13:12 +00:00
{
TFilename tmp ; tmp . temp ( ) ;
ofstream out ( tmp ) ;
out < < " USE GCA " < < endl ; //usa la tabella dei livelli articolo
const short id = key_id + level - 1 ;
const TString & prompt = cal . name ( level ) ;
const TString & picture = cal . picture ( level ) ;
out < < " IN CODTAB[1,1] \" " < < level < < " \" " < < endl ;
out < < " IN CODTAB[2,0] " < < id < < endl ;
out < < " DI \" " < < prompt ;
const int length = cal . code_length ( level ) ;
if ( length > prompt . len ( ) )
out < < ' @ ' < < length ;
out < < " \" CODTAB[2,0] " < < endl ;
out < < " DI \" " < < TR ( " Descrizione " ) < < " @50 \" S0 " < < endl ;
out < < " OU " < < id < < " CODTAB[2,0] " < < endl ;
out < < " OU " < < ( des_id + level - 1 ) < < " S0 " < < endl ;
2005-03-03 15:42:04 +00:00
if ( chktyp )
{
if ( level = = 1 )
out < < " CH RE " < < endl ;
else
out < < " CH NO " < < endl ;
}
2005-02-17 18:13:12 +00:00
out < < " EN " < < endl ;
out . close ( ) ;
TScanner scan ( tmp ) ;
while ( scan . pop ( ) ! = " EN " )
kfld . parse_item ( scan ) ;
xvt_fsys_removefile ( tmp ) ;
}
2005-03-03 15:42:04 +00:00
void create_browse2 ( TEdit_field & kfld , int level , short key_id , short des_id , const TCodart_livelli & cal , const bool chktyp )
2005-02-17 18:13:12 +00:00
{
TFilename tmp ; tmp . temp ( ) ;
ofstream out ( tmp ) ;
out < < " USE GCA KE 2 SELECT CODTAB[1,1]==' " < < level < < " ' " < < endl ; //cerca per descrizione
const short id = des_id + level - 1 ;
out < < " IN S0 " < < id < < endl ;
out < < " DI \" " < < TR ( " Descrizione " ) < < " @50 \" S0 " < < endl ;
const TString & prompt = cal . name ( level ) ;
out < < " DI \" " < < prompt ;
const int length = cal . code_length ( level ) ;
if ( length > prompt . len ( ) )
out < < ' @ ' < < length ;
out < < " \" CODTAB[2,0] " < < endl ;
out < < " CO OU " < < ( key_id + level - 1 ) < < endl ;
2005-03-03 15:42:04 +00:00
if ( chktyp )
out < < " CH NO " < < endl ;
2005-02-17 18:13:12 +00:00
out < < " EN " < < endl ;
out . close ( ) ;
TScanner scan ( tmp ) ;
while ( scan . pop ( ) ! = " EN " )
kfld . parse_item ( scan ) ;
xvt_fsys_removefile ( tmp ) ;
}
2005-03-03 15:42:04 +00:00
int create_fields ( TMask & msk , int x , int y , short key_id , short des_id , const TCodart_livelli & cal , const bool chktyp )
2005-02-17 18:13:12 +00:00
{
const int last_level = cal . last_level ( ) ;
2007-06-21 14:20:08 +00:00
2005-02-17 18:13:12 +00:00
int tab0 = x ;
int i ;
for ( i = 1 ; i < = last_level ; i + + ) //cicla su tutti i livelli del codart abilitati
{
// codice livello articolo
const short kid = key_id + i - 1 ;
const TString & picture = cal . picture ( i ) ;
TString4 flags = " BU " ;
if ( picture [ 0 ] = = ' 0 ' )
flags < < ' Z ' ;
TEdit_field & kfld = msk . add_string ( kid , 0 , " " , tab0 , y , picture . len ( ) , flags ) ;
kfld . set_key ( 1 ) ;
2005-03-03 15:42:04 +00:00
create_browse1 ( kfld , i , key_id , des_id , cal , chktyp ) ;
2005-02-17 18:13:12 +00:00
kfld . set_handler ( handle_subcodice ) ;
tab0 + = picture . len ( ) + 3 ;
}
for ( i = 1 ; i < = last_level ; i + + )
{
// descrizione livello articolo
const short did = des_id + i - 1 ;
TEdit_field & dfld = msk . add_string ( did , 0 , " " , 200 , y , 50 , " " , 50 ) ;
dfld . set_key ( 1 ) ;
2005-03-03 15:42:04 +00:00
create_browse2 ( dfld , i , key_id , des_id , cal , chktyp ) ;
2005-02-17 18:13:12 +00:00
}
return cal . last_level ( ) ;
}
1999-04-06 15:34:39 +00:00
void TMask_anamag : : set_parametered_fields ( )
1997-05-23 14:46:41 +00:00
{
2005-02-17 18:13:12 +00:00
// abilitazioni parametriche
1999-04-06 15:34:39 +00:00
if ( livelli_giac )
delete livelli_giac ;
if ( livelli_art )
delete livelli_art ;
if ( _esercizi_contabili )
delete _esercizi_contabili ;
if ( _magazzini )
delete _magazzini ;
_esercizi_contabili = new TEsercizi_contabili ;
_magazzini = new TMagazzini ;
1997-06-27 15:10:03 +00:00
// imposta il puntatore al gestore livelli giacenze
1997-07-25 08:56:42 +00:00
livelli_giac = new TCodgiac_livelli ( ) ;
livelli_art = new TCodart_livelli ( ) ;
1997-06-27 15:10:03 +00:00
// imposta il valore dell'anno per le giacenze
last_annogiac = - 1 ;
last_annosto = - 1 ;
1997-05-23 14:46:41 +00:00
1997-06-27 15:10:03 +00:00
// Abilita la pagina delle giacenze
1999-04-06 15:34:39 +00:00
const bool gestmag = app ( ) . has_module ( MGAUT ) & & magazzini ( ) . gestmag ( ) ;
2000-10-03 13:45:12 +00:00
if ( gestmag )
{
// sheet giacenze
set_handler ( F_ANNO , handle_anno ) ;
set_handler ( F_SHEETGIAC , handle_sheetgiac ) ;
2002-02-26 16:20:19 +00:00
TSheet_field & sgiac = sfield ( F_SHEETGIAC ) ;
sgiac . set_userget ( sheetgiac_get ) ;
sgiac . set_userput ( sheetgiac_put ) ;
sgiac . sheet_mask ( ) . set_handler ( F_CODMAG , handle_sheet_giac_codmag ) ;
sgiac . sheet_mask ( ) . set_handler ( F_VALGIAC , handle_sheet_giac_valgiac ) ;
2000-10-03 13:45:12 +00:00
// sheet storico
set_handler ( F_SHEETSTOMAG , handle_sheetstomag ) ;
sfield ( F_SHEETSTOMAG ) . set_notify ( notify_sheet_sto ) ;
sfield ( F_SHEETSTOMAG ) . set_userget ( sheetsto_get ) ;
sfield ( F_SHEETSTOMAG ) . set_userput ( sheetsto_put ) ;
TMask & stomask = sfield ( F_SHEETSTOMAG ) . sheet_mask ( ) ;
stomask . set_handler ( F_STOVAL , handle_sheet_stomag_stoval ) ;
stomask . set_handler ( F_STOANNOES , handle_stoanno_row ) ;
1999-04-06 15:34:39 +00:00
2000-10-03 13:45:12 +00:00
set_handler ( F_STOANNO , handle_stoanno ) ;
}
2004-11-30 22:02:59 +00:00
set_handler ( F_CLASSDOG2 , handle_classdog2 ) ;
1999-04-06 15:34:39 +00:00
// setta i campi della maschera per la pagina giacenze
2006-12-13 16:22:33 +00:00
TSheet_field & fld_stomag = sfield ( F_SHEETSTOMAG ) ;
TSheet_field & fld_giac = sfield ( F_SHEETGIAC ) ;
fld_giac . set_notify ( notify_sheet_giac ) ;
TSheet_field & fld_cod = sfield ( F_SHEETCOD ) ;
1999-04-06 15:34:39 +00:00
// disabilita le colonne quando non sono utilizzati i livelli di giacenza
2006-12-13 16:22:33 +00:00
for ( int i = 0 ; i < 4 ; i + + )
1997-06-27 15:10:03 +00:00
{
1999-04-06 15:34:39 +00:00
livelli_giac - > set_sheetcolumn ( fld_giac , F_LIV1 + i , i + 1 ) ;
2006-12-13 16:22:33 +00:00
livelli_giac - > set_sheetcolumn ( fld_cod , FS_LIV1 + i , i + 1 ) ;
1999-04-06 15:34:39 +00:00
if ( livelli_giac - > autoinsert ( i + 1 ) )
1997-06-27 15:10:03 +00:00
{
1999-04-06 15:34:39 +00:00
// codice autoinseribile
2006-12-13 16:22:33 +00:00
TMask_field & campo_liv = fld_giac . sheet_mask ( ) . field ( F_LIV1 + i ) ;
1999-04-06 15:34:39 +00:00
campo_liv . check_type ( CHECK_SEARCH ) ;
campo_liv . set_handler ( gestmag ? handle_autoinsert_livgiac : NULL ) ;
2006-12-13 16:22:33 +00:00
TMask_field & campo_liv_cod = fld_cod . sheet_mask ( ) . field ( FS_LIV1 + i ) ;
campo_liv_cod . check_type ( CHECK_SEARCH ) ;
1997-06-27 15:10:03 +00:00
}
1999-04-06 15:34:39 +00:00
}
2003-05-29 07:44:09 +00:00
/*
1999-04-06 15:34:39 +00:00
// disabilita la colonna numero distinte
2003-05-29 07:44:09 +00:00
if ( FALSE )
{
1999-04-06 15:34:39 +00:00
fld_giac . delete_column ( fld_giac . cid2index ( F_NDIST ) ) ;
fld_giac . sheet_mask ( ) . field ( F_NDIST ) . enable ( FALSE ) ;
}
2003-05-29 07:44:09 +00:00
*/
1999-04-06 15:34:39 +00:00
// abilita la gestione delle ubicazioni (manuale/su tabella)
2003-05-29 07:44:09 +00:00
const bool ubi = gestmag & & magazzini ( ) . gestubi_man ( ) ;
fld_giac . sheet_mask ( ) . field ( F_UBICAZ ) . show ( ! ubi ) ;
fld_giac . sheet_mask ( ) . field ( F_UBICAZD ) . show ( ! ubi ) ;
fld_giac . sheet_mask ( ) . field ( F_UBICAZ2 ) . show ( ubi ) ;
1999-04-06 15:34:39 +00:00
// abilita la gestione del monomagazzino
2003-05-29 07:44:09 +00:00
const bool mm = gestmag & & magazzini ( ) . gestmultimag ( ) ;
fld_giac . sheet_mask ( ) . field ( F_DESMAG ) . enable ( mm ) ;
fld_giac . enable_column ( fld_giac . cid2index ( F_CODMAG ) , mm ) ;
fld_giac . enable_column ( fld_giac . cid2index ( F_CODDEP ) , gestmag & & magazzini ( ) . gestdep ( ) ) ;
fld_stomag . enable_column ( fld_stomag . cid2index ( F_STOCODMAG ) , mm ) ;
1999-04-06 15:34:39 +00:00
enable_page ( PAGE_GIACENZE , gestmag ) ;
enable_page ( PAGE_STORICO , gestmag ) ;
2006-12-13 16:22:33 +00:00
// abilita la visualizzazione dei campi per la vendita al dettaglio
const bool dettaglio = app ( ) . has_module ( VDAUT ) ;
show ( - G_VD , dettaglio ) ;
1997-06-27 15:10:03 +00:00
// abilita la visualizzazione dei campi distinti per i livelli articolo
2003-05-05 14:32:23 +00:00
set_handler ( F_CODART , handle_codice ) ;
1997-05-23 14:46:41 +00:00
}
2005-04-21 16:40:40 +00:00
void TMask_anamag : : create_user_fields ( )
1999-04-06 15:34:39 +00:00
{
2005-04-21 16:40:40 +00:00
TConfig c ( CONFIG_DITTA , " ve " ) ;
2002-05-08 16:25:49 +00:00
2005-04-21 16:40:40 +00:00
_type_cod = c . get_int ( " GEN_EAN " ) ;
2006-12-13 16:22:33 +00:00
_altype_cod = c . get_int ( " ALT_EAN " ) ;
2005-04-21 16:40:40 +00:00
_ean8_pref = c . get ( " EAN8 " ) ;
_ean13_pref = c . get ( " EAN13 " ) ;
2006-12-13 16:22:33 +00:00
_ean8_cin = c . get_bool ( " EAN8CIN " ) ;
_ean13_pref = c . get ( " EAN13 " ) ;
1999-04-06 15:34:39 +00:00
2005-04-21 16:40:40 +00:00
bool disable_user_page = true ;
2006-12-13 16:22:33 +00:00
1999-04-06 15:34:39 +00:00
TString80 prompt ;
for ( int i = 1 ; i < = 10 ; i + + )
{
if ( c . get_bool ( " CHK_USER " , " ve " , i ) )
{
TEditable_field * f = NULL ;
prompt = c . get ( " PROMPT_USER " , " ve " , i ) ;
prompt . rpad ( 20 ) ;
const char type = c . get_char ( " TYPE_USER " , " ve " , i ) ;
if ( type = = ' S ' )
f = & add_string ( F_USER1 + i - 1 , PAGE_USER , prompt , 2 , 3 + i , c . get_int ( " LEN_USER " , " ve " , i ) ) ;
else
if ( type = = ' N ' )
{
f = & add_number ( F_USER1 + i - 1 , PAGE_USER , prompt , 2 , 3 + i , c . get_int ( " LEN_USER " , " ve " , i ) ) ;
( ( TReal_field * ) f ) - > set_decimals ( c . get_int ( " DEC_USER " , " ve " , i ) ) ;
}
else
if ( type = = ' D ' )
f = & add_date ( F_USER1 + i - 1 , PAGE_USER , prompt , 2 , 3 + i ) ;
else
if ( type = = ' I ' )
f = & add_currency ( F_USER1 + i - 1 , PAGE_USER , prompt , 2 , 3 + i , c . get_int ( " LEN_USER " , " ve " , i ) ) ;
else
if ( type = = ' X ' )
f = & add_boolean ( F_USER1 + i - 1 , PAGE_USER , prompt , 2 , 3 + i ) ;
if ( f ! = NULL )
2007-06-21 14:20:08 +00:00
{
TString8 u ; u . format ( " USER%d " , i ) ;
f - > set_field ( u ) ;
}
2005-04-21 16:40:40 +00:00
disable_user_page = false ;
1999-04-06 15:34:39 +00:00
}
}
2006-12-13 16:22:33 +00:00
1999-04-06 15:34:39 +00:00
if ( disable_user_page )
2005-02-17 18:13:12 +00:00
disable_page ( PAGE_USER ) ;
2005-04-21 16:40:40 +00:00
}
// costruttore della maschera anagrafica di magazzino
TMask_anamag : : TMask_anamag ( TRelation * rel ) : TMask ( " ve2400 " )
{
_rel = rel ;
// sheet unit<69> di misura
set_handler ( F_SHEETUM , handle_sheet_um ) ;
TSheet_field & f = sfield ( F_SHEETUM ) ;
f . set_notify ( notify_sheet_um ) ;
TMask & fm = f . sheet_mask ( ) ;
fm . set_handler ( FS_CODUM , handle_sheet_um_um ) ;
fm . set_handler ( FS_PREZZO , handle_sheet_um_price ) ;
fm . set_handler ( FS_PREZZO_LORDO , handle_sheet_um_price ) ;
TRecord_array * um = new TRecord_array ( LF_UMART , " NRIGA " ) ;
f . set_lines_record ( * um ) ;
// sheet descrizioni in lingua
set_handler ( F_SHEETDESLIN , handle_sheet_deslin ) ;
// sheet codici corrispondenti
set_handler ( F_SHEETCOD , handle_sheet_cod ) ;
TSheet_field & fc = sfield ( F_SHEETCOD ) ;
TMask & fmc = fc . sheet_mask ( ) ;
fmc . set_handler ( FS_CODARTALT , handle_codcorr ) ;
livelli_giac = NULL ;
livelli_art = NULL ;
_esercizi_contabili = NULL ;
_magazzini = NULL ;
set_parametered_fields ( ) ;
ca_create_fields ( * this , 1 , LF_PCONANA , 1 , 7 , F_CONTOPCIA , F_DESCRCONTOPCIA , 0 , ANAMAG_CONTOINDA ) ;
ca_create_fields ( * this , 1 , LF_PCONANA , 1 , 13 , F_CONTOPCIV , F_DESCRCONTOPCIV , 0 , ANAMAG_CONTOINDV ) ;
create_user_fields ( ) ;
2005-02-17 18:13:12 +00:00
2007-06-21 14:20:08 +00:00
if ( livelli_art - > enabled ( ) )
2005-03-03 15:42:04 +00:00
{
create_fields ( * this , 1 , 1 , F_LIVART1 , F_DESLIVART1 , * livelli_art , true ) ;
first_focus ( F_LIVART1 ) ;
}
else
2007-06-21 14:20:08 +00:00
{
if ( advanced_codart_enabled ( ) )
{
TButton_field & bu = add_button ( F_ADVANCED , 0 , PR ( " Codice guidato " ) , 1 , 1 , 20 ) ;
bu . set_handler ( advanced_codart_handler ) ;
}
2005-03-03 15:42:04 +00:00
first_focus ( F_CODART ) ;
2007-06-21 14:20:08 +00:00
}
1999-04-06 15:34:39 +00:00
}
1997-06-10 12:53:19 +00:00
void TMask_anamag : : sheetsto_put ( TSheet_field & sheet_sto , int item )
{
1997-06-27 15:10:03 +00:00
if ( item > 1 ) return ;
TMask_anamag & m = ( TMask_anamag & ) sheet_sto . mask ( ) ;
TRectype & first_rec = sheet_sto . record ( ) - > row ( 1 , TRUE ) ;
first_rec . put ( STOMAG_ULTCOS1 , m . get_real ( F_STOULTCOS1 ) ) ;
first_rec . put ( STOMAG_ULTCOS2 , m . get_real ( F_STOULTCOS2 ) ) ;
first_rec . put ( STOMAG_COSTSTD , m . get_real ( F_STOCOSTOSTD ) ) ;
first_rec . put ( STOMAG_COSTOMEDIO , m . get_real ( F_STOCOSTOMEDIO ) ) ;
first_rec . put ( STOMAG_CATVEN , m . get ( F_STOCATVEN ) ) ;
first_rec . put ( STOMAG_CODLISTINO , m . get ( F_STOCODLIST ) ) ;
first_rec . put ( STOMAG_PRZLIST , m . get ( F_STOPREZZOLIST ) ) ;
1997-06-10 12:53:19 +00:00
}
void TMask_anamag : : sheetsto_get ( TSheet_field & sheet_sto , int item )
{
1997-06-27 15:10:03 +00:00
TMask_anamag & m = ( TMask_anamag & ) sheet_sto . mask ( ) ;
1997-07-25 08:56:42 +00:00
if ( item > 1 ) return ;
1997-06-27 15:10:03 +00:00
TRectype & first_rec = sheet_sto . record ( ) - > row ( 1 , TRUE ) ;
m . set ( F_STOULTCOS1 , first_rec . get_real ( STOMAG_ULTCOS1 ) ) ;
m . set ( F_STOULTCOS2 , first_rec . get_real ( STOMAG_ULTCOS2 ) ) ;
m . set ( F_STOCOSTOSTD , first_rec . get_real ( STOMAG_COSTSTD ) ) ;
m . set ( F_STOCOSTOMEDIO , first_rec . get_real ( STOMAG_COSTOMEDIO ) ) ;
m . set ( F_STOCATVEN , first_rec . get ( STOMAG_CATVEN ) ) ;
m . set ( F_STOCODLIST , first_rec . get ( STOMAG_CODLISTINO ) ) ;
m . set ( F_STOPREZZOLIST , first_rec . get ( STOMAG_PRZLIST ) ) ;
1997-06-10 12:53:19 +00:00
}
bool TMask_anamag : : info_sto_dirty ( )
{
1997-06-27 15:10:03 +00:00
return
1997-06-27 16:45:59 +00:00
field ( F_STOULTCOS1 ) . focusdirty ( ) | |
field ( F_STOULTCOS2 ) . focusdirty ( ) | |
field ( F_STOCOSTOSTD ) . focusdirty ( ) | |
field ( F_STOCOSTOMEDIO ) . focusdirty ( ) | |
field ( F_STOCATVEN ) . focusdirty ( ) | |
field ( F_STOCODLIST ) . focusdirty ( ) | |
field ( F_STOPREZZOLIST ) . focusdirty ( ) ;
1997-06-10 12:53:19 +00:00
}
void TMask_anamag : : clear_info_sto ( )
{
1997-06-27 15:10:03 +00:00
reset ( F_STOULTCOS1 ) ;
reset ( F_STOULTCOS2 ) ;
reset ( F_STOCOSTOSTD ) ;
reset ( F_STOCOSTOMEDIO ) ;
reset ( F_STOCATVEN ) ;
reset ( F_STOCODLIST ) ;
reset ( F_STOPREZZOLIST ) ;
1997-06-10 12:53:19 +00:00
}
1997-05-23 14:46:41 +00:00
TMask_anamag : : ~ TMask_anamag ( )
{
1999-04-06 15:34:39 +00:00
if ( livelli_art )
delete livelli_art ;
if ( livelli_giac )
delete livelli_giac ;
if ( _esercizi_contabili )
delete _esercizi_contabili ;
if ( _magazzini )
delete _magazzini ;
1997-05-23 14:46:41 +00:00
}
1998-11-04 18:04:26 +00:00
bool TMask_anamag : : handle_autoinsert_livgiac ( TMask_field & fld , KEY k )
{
1999-04-06 15:34:39 +00:00
if ( k = = K_TAB & & fld . focusdirty ( ) & & ! fld . empty ( ) )
1998-11-04 18:04:26 +00:00
{
TMask_anamag & mask = ( TMask_anamag & ) fld . mask ( ) . get_sheet ( ) - > mask ( ) ;
const int levnum = fld . dlg ( ) - F_LIV1 + 1 ;
return mask . livelli_giac - > autoinsert ( levnum , fld ) ;
}
return TRUE ;
}
1997-05-23 14:52:38 +00:00
// HANDLER DEL CODICE: controlla la corrispondenza al formato previsto
2003-05-05 14:32:23 +00:00
bool TMask_anamag : : generate_code ( int type )
{
2006-12-13 16:22:33 +00:00
if ( type < = 0 )
2003-05-05 14:32:23 +00:00
type = _type_cod ;
2006-12-13 16:22:33 +00:00
if ( type < = 0 )
return false ;
2003-05-05 14:32:23 +00:00
TString cod ( 20 ) ;
long progr = 0 ;
if ( type = = 8 )
{
if ( _ean8_pref . empty ( ) )
2006-12-13 16:22:33 +00:00
return false ;
2003-05-05 14:32:23 +00:00
cod = _ean8_pref ;
cod < < " 999 " ;
if ( _type_cod ! = 0 )
{
2006-12-13 16:22:33 +00:00
TLocalisamfile anamag ( LF_ANAMAG ) ;
2003-05-05 14:32:23 +00:00
anamag . put ( ANAMAG_CODART , cod ) ;
2006-12-13 16:22:33 +00:00
2003-05-05 14:32:23 +00:00
if ( anamag . read ( _isgteq ) ! = _isemptyfile )
{
cod = anamag . get ( ANAMAG_CODART ) ;
if ( _ean8_pref < cod . left ( 4 ) )
{
anamag . prev ( ) ;
cod = anamag . get ( ANAMAG_CODART ) ;
}
if ( _ean8_pref = = cod . left ( 4 ) )
progr = atol ( cod . right ( 3 ) ) ;
}
}
else
{
TLocalisamfile codcorr ( LF_CODCORR ) ;
codcorr . setkey ( 2 ) ;
codcorr . put ( CODCORR_CODARTALT , cod ) ;
if ( codcorr . read ( _isgteq ) ! = _isemptyfile )
{
cod = codcorr . get ( CODCORR_CODARTALT ) ;
if ( _ean8_pref < cod . left ( 4 ) )
{
codcorr . prev ( ) ;
cod = codcorr . get ( CODCORR_CODARTALT ) ;
}
if ( _ean8_pref = = cod . left ( 4 ) )
2006-12-13 16:22:33 +00:00
{
if ( _ean8_cin )
progr = atol ( cod . mid ( 4 , 3 ) ) ;
else
progr = atol ( cod . right ( 3 ) ) ;
}
2003-05-05 14:32:23 +00:00
}
}
progr + + ;
2006-12-13 16:22:33 +00:00
if ( progr < 1000 )
{
_generated_code . format ( " %4s%03ld " , ( const char * ) _ean8_pref , progr ) ;
if ( _ean8_cin )
{
int icin = ( _generated_code [ 6 ] + _generated_code [ 4 ] + _generated_code [ 2 ] + _generated_code [ 0 ] - 4 * ' 0 ' ) * 3 ;
icin + = _generated_code [ 5 ] + _generated_code [ 3 ] + _generated_code [ 1 ] - 3 * ' 0 ' ;
const char cin = ' 0 ' + ( 10 - ( icin % 10 ) ) % 10 ;
_generated_code < < cin ;
}
}
else
return error_box ( FR ( " Sono gia' stati generati 1000 codici sul prefisso %s " ) , ( const char * ) _ean8_pref ) ;
2003-05-05 14:32:23 +00:00
}
else
{
if ( _ean13_pref . empty ( ) )
2006-12-13 16:22:33 +00:00
return false ;
2003-05-05 14:32:23 +00:00
cod = _ean13_pref ;
cod < < " 999999 " ;
if ( _type_cod ! = 0 )
{
2006-12-13 16:22:33 +00:00
TLocalisamfile anamag ( LF_ANAMAG ) ;
2003-05-05 14:32:23 +00:00
anamag . put ( ANAMAG_CODART , cod ) ;
if ( anamag . read ( _isgteq ) ! = _isemptyfile )
{
cod = anamag . get ( ANAMAG_CODART ) ;
if ( _ean13_pref < cod . left ( 6 ) )
{
anamag . prev ( ) ;
cod = anamag . get ( ANAMAG_CODART ) ;
}
if ( _ean13_pref = = cod . left ( 6 ) )
progr = atol ( cod . right ( 6 ) ) ;
}
}
else
{
TLocalisamfile codcorr ( LF_CODCORR ) ;
codcorr . setkey ( 2 ) ;
codcorr . put ( CODCORR_CODARTALT , cod ) ;
if ( codcorr . read ( _isgteq ) ! = _isemptyfile )
{
cod = codcorr . get ( CODCORR_CODARTALT ) ;
if ( _ean13_pref < cod . left ( 6 ) )
{
codcorr . prev ( ) ;
cod = codcorr . get ( CODCORR_CODARTALT ) ;
}
if ( _ean13_pref = = cod . left ( 6 ) )
progr = atol ( cod . right ( 6 ) ) ;
}
}
progr + + ;
_generated_code . format ( " %s%06ld " , ( const char * ) _ean13_pref , progr ) ;
}
2006-12-13 16:22:33 +00:00
return true ;
2003-05-05 14:32:23 +00:00
}
1997-05-23 14:46:41 +00:00
bool TMask_anamag : : handle_codice ( TMask_field & fld , KEY k )
{
TMask_anamag & mask = ( TMask_anamag & ) fld . mask ( ) ;
2003-05-05 14:32:23 +00:00
if ( k = = K_TAB & & ! fld . get ( ) . blank ( ) & & mask . livelli_art - > enabled ( ) )
{
2006-12-13 16:22:33 +00:00
TString80 codepart ;
1997-06-27 15:10:03 +00:00
int l ;
2005-02-17 18:13:12 +00:00
//ciclo di riempimento dei sottocodici articolo nella maschera
for ( l = 1 ; l < = mask . livelli_art - > last_level ( ) ; l + + )
{
const TString pezzo_di_codice = mask . livelli_art - > unpack_grpcode ( fld . get ( ) , l ) ;
mask . set ( F_LIVART1 + l - 1 , pezzo_di_codice ) ; //scrive nei campi del codice a livelli i pezzi
//del codart completo
}
//ciclo di controllo dei sottocodici (devono esistere nella tabella GCA, tutti tranne l'ultimo)
for ( l = 1 ; l < mask . livelli_art - > last_level ( ) ; l + + )
{
const TString pezzo_di_codice = mask . livelli_art - > unpack_grpcode ( fld . get ( ) , l ) ;
mask . set ( F_LIVART1 + l - 1 , pezzo_di_codice ) ;
codepart . cut ( 0 ) < < l < < pezzo_di_codice ;
if ( cache ( ) . get ( " GCA " , codepart ) . empty ( ) )
{
1997-06-27 15:10:03 +00:00
fld . error_box ( " '%s' non appartiene a '%s' " , ( const char * ) codepart . mid ( 1 ) , ( const char * ) mask . livelli_art - > name ( l ) ) ;
return ( FALSE ) ;
}
}
codepart = mask . livelli_art - > unpack_grpcode ( fld . get ( ) , mask . livelli_art - > last_level ( ) ) ;
2005-02-17 18:13:12 +00:00
if ( codepart . blank ( ) )
{
/* Controllo casuale che va migliorato per gestire i sottocodici opzionali
1997-06-27 15:10:03 +00:00
fld . error_box ( " Il codice articolo non pu<70> essere vuoto " ) ;
return ( FALSE ) ;
2005-02-17 18:13:12 +00:00
*/
return true ;
1997-06-27 15:10:03 +00:00
}
2005-02-17 18:13:12 +00:00
if ( ! mask . livelli_art - > fit_to_format ( codepart ) )
{
1997-07-25 08:56:42 +00:00
fld . error_box ( " Il codice articolo non corrisponde al formato previsto \n ('%s' ?? '%s') " , ( const char * ) codepart , ( const char * ) mask . livelli_art - > code_format ( ) ) ;
1997-06-27 15:10:03 +00:00
return ( FALSE ) ;
}
1997-05-23 14:46:41 +00:00
}
2003-05-05 14:32:23 +00:00
if ( k = = K_F8 )
{
if ( mask . generate_code ( ) )
{
fld . set ( mask . generated_code ( ) ) ;
mask . stop_run ( K_INS ) ;
}
}
1997-05-23 14:46:41 +00:00
return ( TRUE ) ;
}
bool TMask_anamag : : handle_anno ( TMask_field & fld , KEY k )
{
1997-06-27 15:10:03 +00:00
if ( k = = K_TAB )
1997-05-23 14:46:41 +00:00
{
2002-05-08 16:25:49 +00:00
TMask_anamag & mask = ( TMask_anamag & ) fld . mask ( ) ;
2001-05-02 13:40:49 +00:00
TSheet_field & fld_giac = mask . sfield ( F_SHEETGIAC ) ;
1997-06-27 15:10:03 +00:00
1997-06-27 16:45:59 +00:00
if ( mask . get ( F_ANNO ) . empty ( ) )
{
1997-08-22 09:27:37 +00:00
mask . set ( F_ANNORIF , mask . esercizi_contabili ( ) . last ( ) ) ;
1997-06-27 16:45:59 +00:00
mask . set ( F_ANNO , mask . get ( F_ANNORIF ) ) ;
}
2003-09-24 10:27:20 +00:00
if ( mask . last_annogiac > 0 & & mask . last_annogiac ! = fld . mask ( ) . get_int ( F_ANNO ) )
{
if ( fld_giac . dirty ( ) & & handle_sheetgiac ( fld_giac , K_ENTER ) )
{
if ( fld . yesno_box ( " Salvare le righe di giacenza per l'anno %d " , mask . last_annogiac ) )
{
1997-06-27 15:10:03 +00:00
fld_giac . autosave ( * mask . _rel ) ;
fld_giac . record ( ) - > rewrite ( ) ;
}
}
mask . field ( F_ANNORIF ) . set ( fld . get ( ) ) ;
// rilegge le giacenze relative a quell'anno ed aggiorna il layout
fld_giac . record ( ) - > read ( * fld_giac . putkey ( * mask . _rel ) ) ;
fld_giac . autoload ( * mask . _rel ) ;
fld_giac . force_update ( ) ;
2000-05-05 15:25:49 +00:00
mask . update_ordc_ordf ( ) ; //chiamata del metodo successivo
1997-06-27 15:10:03 +00:00
}
mask . last_annogiac = mask . get_int ( F_ANNO ) ;
1997-05-23 14:48:37 +00:00
}
return ( TRUE ) ;
}
2000-05-05 15:25:49 +00:00
void TMask_anamag : : update_ordc_ordf ( )
{
real ordc , ordf ;
const TDate oggi ( TODAY ) ;
int es_corr = esercizi_contabili ( ) . date2esc ( oggi ) ; // setta l'esercizio corrente (data come intero)
int es_pred = esercizi_contabili ( ) . pred ( es_corr ) ; // " " precedente "
TRecord_array arr ( LF_MAG , MAG_NRIGA ) ;
TRectype rec ( LF_MAG ) ; // crea un record vuoto di LF_MAG
for ( int j = 0 ; j < 2 ; j + + )
{
const int anno = j ! = 0 ? es_pred : es_corr ;
if ( anno = = get_int ( F_ANNORIF ) )
{
TSheet_field & fld_giac = sfield ( F_SHEETGIAC ) ;
const int pos_ordc = fld_giac . cid2index ( F_ORDC ) ;
const int pos_ordf = fld_giac . cid2index ( F_ORDF ) ;
FOR_EACH_SHEET_ROW ( fld_giac , i , row )
{
ordc + = real ( row - > get ( pos_ordc ) ) ;
ordf + = real ( row - > get ( pos_ordf ) ) ;
}
}
else
{
rec . put ( MAG_ANNOES , anno ) ; // riempio il record campione
rec . put ( MAG_CODART , get ( F_CODART ) ) ;
arr . read ( rec ) ;
for ( int i = arr . last_row ( ) ; i > 0 ; i = arr . pred_row ( i ) )
{
ordc + = arr [ i ] . get_real ( MAG_ORDC ) ;
ordf + = arr [ i ] . get_real ( MAG_ORDF ) ;
}
}
}
set ( F_TOT_ORD_CLI , ordc ) ;
set ( F_TOT_ORD_FOR , ordf ) ;
}
1997-05-23 14:48:37 +00:00
bool TMask_anamag : : handle_stoanno ( TMask_field & fld , KEY k )
{
2004-11-30 22:02:59 +00:00
static bool in_handler = FALSE ;
2001-05-02 13:40:49 +00:00
if ( k = = K_TAB & & fld . focusdirty ( ) & & ! in_handler )
{
in_handler = TRUE ;
1999-10-22 10:00:18 +00:00
TMask_anamag & mask = ( TMask_anamag & ) fld . mask ( ) ;
TSheet_field & fld_stomag = mask . sfield ( F_SHEETSTOMAG ) ;
1997-06-27 15:10:03 +00:00
2001-05-02 13:40:49 +00:00
if ( mask . last_annosto > 0 & & mask . last_annosto ! = fld . mask ( ) . get_int ( F_STOANNO ) )
1997-06-27 15:10:03 +00:00
{
1999-10-22 10:00:18 +00:00
if ( ( fld_stomag . dirty ( ) | | mask . info_sto_dirty ( ) ) & &
1997-06-27 15:10:03 +00:00
fld_stomag . items ( ) > 0 )
{
2003-06-27 15:01:34 +00:00
if ( fld . yesno_box ( " Salvare lo storico per l'anno %d " , mask . last_annosto ) & &
1999-10-22 10:00:18 +00:00
handle_sheetstomag ( fld_stomag , K_ENTER ) )
{
1997-06-27 15:10:03 +00:00
fld_stomag . autosave ( * mask . _rel ) ;
fld_stomag . record ( ) - > write ( TRUE ) ;
}
2001-05-02 13:40:49 +00:00
}
}
1997-06-27 15:10:03 +00:00
// rilegge lo storico relativo a quell'anno ed aggiorna il layout
2001-05-02 13:40:49 +00:00
mask . field ( F_STOANNORIF ) . set ( fld . get ( ) ) ;
mask . clear_info_sto ( ) ;
fld_stomag . record ( ) - > read ( * fld_stomag . putkey ( * mask . _rel ) ) ;
fld_stomag . autoload ( * mask . _rel ) ;
handle_sheetstomag ( fld_stomag , K_SPACE ) ;
fld_stomag . force_update ( ) ;
mask . last_annosto = mask . get_int ( F_STOANNORIF ) ;
2000-10-03 13:45:12 +00:00
if ( fld . focusdirty ( ) )
TEsercizi_contabili : : update ( ) ;
2001-05-02 13:40:49 +00:00
in_handler = FALSE ;
1997-05-23 14:46:41 +00:00
}
2000-10-03 13:45:12 +00:00
1999-10-22 10:00:18 +00:00
return TRUE ;
1997-05-23 14:46:41 +00:00
}
2000-10-03 13:45:12 +00:00
bool TMask_anamag : : handle_stoanno_row ( TMask_field & fld , KEY k )
{
if ( k = = K_TAB & & fld . focusdirty ( ) )
TEsercizi_contabili : : update ( ) ;
return TRUE ;
}
1997-05-23 14:46:41 +00:00
bool TMask_anamag : : handle_sheet_um ( TMask_field & fld , KEY k )
{
1997-06-27 16:45:59 +00:00
TSheet_field & f = ( TSheet_field & ) fld ; // typecast del campo al suo sheet corrispondente
TMask_anamag & m = ( TMask_anamag & ) ( fld . mask ( ) ) ;
2003-07-22 13:22:11 +00:00
if ( k = = K_ENTER & & ! m . query_mode ( ) )
1997-05-23 14:46:41 +00:00
{
const int items = f . items ( ) ;
if ( items > 0 )
{
1999-04-06 15:34:39 +00:00
const char * codum = f . cell ( 0 , f . cid2index ( FS_CODUM ) ) ;
2003-07-22 13:22:11 +00:00
if ( * codum < = ' ' )
1999-04-06 15:34:39 +00:00
return error_box ( " La prima unit<69> di misura deve essere specificata " ) ;
1997-05-23 14:46:41 +00:00
TAssoc_array v ; // istanzia l'hash table per il controllo di univocit<69>
for ( int i = 0 ; i < items ; i + + )
{
1997-07-25 08:56:42 +00:00
const TString16 um ( f . cell ( i , f . cid2index ( FS_CODUM ) ) ) ;
// aggiunge all'hash table l'elemento della riga corrente e controlla che non esista gi<67>
1997-05-23 14:46:41 +00:00
if ( v . add ( um ) )
1997-07-25 08:56:42 +00:00
return error_box ( " Le unit<69> di misura devono essere diverse tra loro " ) ;
1997-05-23 14:46:41 +00:00
}
}
2004-04-28 22:04:10 +00:00
if ( ! m . um_principale ( ) . blank ( ) & & m . um_principale ( ) ! = f . cell ( 0 , f . cid2index ( FS_CODUM ) ) )
{
int i ;
for ( i = 0 ; i < f . items ( ) ; i + + )
1997-08-18 15:19:39 +00:00
{
1997-08-22 09:27:37 +00:00
if ( m . um_principale ( ) = = f . cell ( i , f . cid2index ( FS_CODUM ) ) )
1997-08-18 15:19:39 +00:00
break ;
}
2004-04-28 22:04:10 +00:00
if ( i > = f . items ( ) )
return error_box ( " L'unit<69> di misura '%s' deve essere presente in tabella " , ( const char * ) m . um_principale ( ) ) ;
1997-08-18 15:19:39 +00:00
}
2003-07-22 13:22:11 +00:00
}
2004-04-28 22:04:10 +00:00
else
if ( k = = K_SPACE )
m . um_principale ( ) = f . cell ( 0 , f . cid2index ( FS_CODUM ) ) ;
1997-06-27 16:45:59 +00:00
2006-12-13 16:22:33 +00:00
return true ;
1997-05-23 14:46:41 +00:00
}
1997-07-25 08:56:42 +00:00
bool TMask_anamag : : notify_sheet_um ( TSheet_field & fld_um , int r , KEY k )
1997-05-23 14:46:41 +00:00
{
2004-04-28 22:04:10 +00:00
if ( k = = K_TAB )
{
1997-07-25 08:56:42 +00:00
fld_um . sheet_mask ( ) . enable ( DLG_DELREC , r > 0 ) ;
2004-04-28 22:04:10 +00:00
if ( r = = 0 )
{
1997-07-25 08:56:42 +00:00
if ( fld_um . items ( ) = = 0 )
( ( TToken_string & ) fld_um . row ( 0 ) ) = " |1 " ; // aggiunge una riga allo sheet
else
( ( TToken_string & ) fld_um . row ( 0 ) ) . add ( " 1 " , fld_um . cid2index ( FS_FCUM ) ) ; // forza la prima unita' di misura a 1
fld_um . disable_cell ( 0 , fld_um . cid2index ( FS_FCUM ) ) ; // mette in sola lettura il secondo campo della prima riga (il fattore di conversione della prima U.M. <20> fisso a 1)
fld_um . force_update ( 0 ) ;
}
}
1997-05-23 14:46:41 +00:00
return TRUE ;
}
1997-06-27 16:45:59 +00:00
1997-05-23 14:46:41 +00:00
bool TMask_anamag : : handle_sheet_deslin ( TMask_field & fld , KEY k )
{
if ( k = = K_ENTER )
{
TSheet_field & f = ( TSheet_field & ) fld ; // typecast del campo al suo sheet corrispondente
const int items = f . items ( ) ;
if ( items > 0 )
{
TAssoc_array v ; // istanzia l'hash table per il controllo di univocit<69>
for ( int i = 0 ; i < items ; i + + )
{
const TString16 codlin ( f . cell ( i , 0 ) ) ;
1997-07-25 08:56:42 +00:00
if ( codlin . blank ( ) )
1997-05-23 14:46:41 +00:00
return error_box ( " I codici lingua non possono essere vuoti " ) ;
if ( v . add ( codlin ) )
return error_box ( " I codici lingua devono essere diversi tra loro " ) ; // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista gi<67>
}
}
}
return TRUE ;
}
bool TMask_anamag : : handle_sheet_cod ( TMask_field & fld , KEY k )
{
if ( k = = K_ENTER )
{
TSheet_field & f = ( TSheet_field & ) fld ; // typecast del campo al suo sheet corrispondente
const int items = f . items ( ) ;
if ( items > 0 )
{
TMask & m = fld . mask ( ) ; // prende la maschere d'origine del campo
TAssoc_array v ; // istanzia l'hash table per il controllo di univocit<69>
1999-10-22 10:00:18 +00:00
TString80 codart = m . get ( F_CODART ) ;
v . add ( codart ) ; // aggiunge all'hash table il codice articolo originale
1997-05-23 14:46:41 +00:00
for ( int i = 0 ; i < items ; i + + )
{
1999-10-22 10:00:18 +00:00
codart = f . cell ( i , 0 ) ;
1997-07-25 08:56:42 +00:00
if ( codart . blank ( ) )
1997-05-23 14:46:41 +00:00
return error_box ( " I codici alternativi non possono essere vuoti " ) ;
if ( v . add ( codart ) )
return error_box ( " I codici alternativi devono essere diversi tra loro e dal codice dell'articolo " ) ; // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista gi<67>
}
}
}
return TRUE ;
}
2003-05-05 14:32:23 +00:00
bool TMask_anamag : : handle_codcorr ( TMask_field & fld , KEY k )
{
if ( k = = K_F8 )
{
TMask & m = fld . mask ( ) ; // prende la maschere d'origine del campo
TMask_anamag & mask = ( TMask_anamag & ) m . get_sheet ( ) - > mask ( ) ;
char val = fld . mask ( ) . get ( FS_TIPO ) [ 0 ] ;
int type = val = = ' 8 ' ? 8 : ( val = = ' 1 ' ? 13 : 0 ) ;
if ( type > 0 & & mask . generate_code ( type ) )
fld . set ( mask . generated_code ( ) ) ;
}
return TRUE ;
}
2006-12-13 16:22:33 +00:00
bool TMask_anamag : : notify_sheet_cod ( TSheet_field & s , int r , KEY k )
{
switch ( k )
{
case K_CTRL + K_INS :
if ( s . items ( ) = = 1 ) // Genero la prima riga in base ai parametri dei codici alternativi
{
TMask_anamag & mask = ( TMask_anamag & ) s . mask ( ) ;
if ( mask . _altype_cod > 0 & & mask . generate_code ( mask . _altype_cod ) )
{
TToken_string & row = s . row ( 0 ) ;
row = mask . generated_code ( ) ;
row . add ( mask . _altype_cod ) ;
}
}
break ;
case K_ENTER :
{
const TString & codice = s . row ( s . selected ( ) ) . get ( s . cid2index ( FS_CODARTALT ) ) ;
const TRectype & anamag = cache ( ) . get ( LF_ANAMAG , codice ) ;
const TMask_anamag & mask = ( TMask_anamag & ) s . mask ( ) ;
const TString80 codart ( mask . get ( F_CODART ) ) ;
if ( ! anamag . empty ( ) )
return s . error_box ( " Il codice %s <20> gi<67> un articolo di magazzino " , ( const char * ) codice ) ;
else
{
TLocalisamfile codcorr ( LF_CODCORR ) ;
codcorr . setkey ( 2 ) ;
codcorr . put ( CODCORR_CODARTALT , codice ) ;
if ( codcorr . read ( _isgteq ) = = NOERR & & codcorr . get ( CODCORR_CODARTALT ) = = codice )
{
if ( codcorr . get ( CODCORR_CODART ) ! = codart )
return s . error_box ( " Il codice %s <20> gi<67> un codice corrispondente " , ( const char * ) codice ) ;
}
}
TSheet_field & f = mask . sfield ( F_SHEETUM ) ;
const int items = f . items ( ) ;
const TString4 um ( s . row ( s . selected ( ) ) . get ( s . cid2index ( FS_CODUMCORR ) ) ) ;
bool um_ok = false ;
if ( items > 0 )
{
for ( int i = 0 ; ! um_ok & & i < items ; i + + )
{
const TString4 umrow ( f . cell ( i , f . cid2index ( FS_CODUM ) ) ) ;
um_ok = ( um = = umrow ) ;
}
}
if ( ! um_ok )
return s . error_box ( " L'unit<69> di misura '%s' non e' prevista per l'articolo %s " , ( const char * ) um , ( const char * ) codart ) ;
}
break ;
default :
break ;
}
return true ;
}
1997-05-23 14:46:41 +00:00
bool TMask_anamag : : handle_sheetgiac ( TMask_field & fld , KEY k )
{
2003-08-04 15:08:30 +00:00
if ( k = = K_ENTER )
1997-05-23 14:46:41 +00:00
{
1997-05-23 14:48:37 +00:00
TSheet_field & f = ( TSheet_field & ) fld ;
2003-08-04 15:08:30 +00:00
TMask_anamag & m = ( TMask_anamag & ) f . mask ( ) ; // prende la maschere d'origine del campo
1997-05-23 14:46:41 +00:00
const int items = f . items ( ) ;
2003-08-04 15:08:30 +00:00
if ( items > 0 & & m . magazzini ( ) . gestmultimag ( ) )
1997-05-23 14:46:41 +00:00
{
TAssoc_array v ; // istanzia l'hash table per il controllo di univocit<69>
for ( int i = 0 ; i < items ; i + + )
{
1999-10-22 10:00:18 +00:00
TString codgiac ;
m . livelli_giac - > pack_grpcode ( codgiac , f . cell ( i , F_LIV1 - FIRST_FIELD ) , 1 ) ;
m . livelli_giac - > pack_grpcode ( codgiac , f . cell ( i , F_LIV2 - FIRST_FIELD ) , 2 ) ;
m . livelli_giac - > pack_grpcode ( codgiac , f . cell ( i , F_LIV3 - FIRST_FIELD ) , 3 ) ;
m . livelli_giac - > pack_grpcode ( codgiac , f . cell ( i , F_LIV4 - FIRST_FIELD ) , 4 ) ;
1997-05-23 14:46:41 +00:00
1999-10-22 10:00:18 +00:00
codgiac < < f . cell ( i , F_CODMAG - FIRST_FIELD ) ;
codgiac < < f . cell ( i , F_CODDEP - FIRST_FIELD ) ;
1997-07-25 08:56:42 +00:00
if ( codgiac . blank ( ) )
1997-05-23 14:46:41 +00:00
return error_box ( " I codici delle giacenze non possono essere vuoti " ) ;
1997-06-27 15:10:03 +00:00
// aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista gi<67>
1997-05-23 14:46:41 +00:00
if ( v . add ( codgiac ) )
1997-05-23 14:48:37 +00:00
return error_box ( " Esistono due righe con lo stesso codice di giacenza " ) ;
1997-07-25 08:56:42 +00:00
if ( ! notify_sheet_giac ( f , i , K_ENTER ) )
return FALSE ;
1997-05-23 14:46:41 +00:00
}
1997-05-23 14:52:38 +00:00
// ordina le righe per livello+codmag
// f.rows_array().sort();
1997-05-23 14:46:41 +00:00
}
}
return TRUE ;
}
2004-11-30 22:02:59 +00:00
bool TMask_anamag : : handle_classdog2 ( TMask_field & f , KEY k )
{
if ( f . to_check ( k ) )
{
TString8 str ; str < < atoi ( f . get ( ) ) ;
if ( str . len ( ) < f . size ( ) )
str . right_just ( f . size ( ) , ' 0 ' ) ;
f . set ( str ) ;
}
return true ;
}
1997-06-27 16:45:59 +00:00
int TMask_anamag : : add_totali_storico ( TString & codmag )
{
TSheet_field & s = ( TSheet_field & ) field ( F_SHEETSTOMAG ) ;
bool need_rigatotali ( TRUE ) ;
2004-04-28 22:04:10 +00:00
int r ;
for ( r = 0 ; r < s . items ( ) & & codmag > = s . cell ( r , s . cid2index ( F_STOCODMAG ) ) ; r + + )
1997-06-27 16:45:59 +00:00
{
if ( * s . cell ( r , s . cid2index ( F_STOTIPORIGA ) ) = = SIMBOLO_TOTALI
& & codmag = = s . cell ( r , s . cid2index ( F_STOCODMAG ) ) )
need_rigatotali = FALSE ;
}
if ( need_rigatotali )
{
real totq , totval ;
TLocalisamfile mag ( LF_MAG ) ;
mag . setkey ( 2 ) ;
1998-01-09 16:33:25 +00:00
mag . put ( MAG_ANNOES , get ( F_STOANNORIF ) ) ;
1997-06-27 16:45:59 +00:00
//mag.put(MAG_CODART,get(F_CODART));
mag . put ( MAG_CODMAG , codmag ) ;
mag . read ( ) ;
while ( ! mag . eof ( )
1998-01-09 16:33:25 +00:00
& & get_int ( F_STOANNORIF ) = = mag . get_int ( MAG_ANNOES )
1997-06-27 16:45:59 +00:00
& & strncmp ( ( const char * ) codmag , mag . get ( MAG_CODMAG ) , 3 ) = = 0 )
{
if ( get ( F_CODART ) = = mag . get ( MAG_CODART ) )
{
totq + = mag . get_real ( MAG_RIM ) ;
totval + = mag . get_real ( MAG_VALRIM ) ;
}
mag . next ( ) ;
}
s . insert ( r , FALSE ) ;
s . row ( r ) . add ( SIMBOLO_TOTALI , s . cid2index ( F_STOTIPORIGA ) ) ;
s . row ( r ) . add ( codmag , s . cid2index ( F_STOCODMAG ) ) ;
1997-07-25 08:56:42 +00:00
s . row ( r ) . add ( " Totale " , s . cid2index ( F_STOANNOES ) ) ;
1997-06-27 16:45:59 +00:00
s . disable_cell ( r , - 1 ) ;
1997-07-25 08:56:42 +00:00
1997-06-27 16:45:59 +00:00
s . insert ( r + 1 , FALSE ) ;
s . row ( r + 1 ) . add ( SIMBOLO_TOTALI , s . cid2index ( F_STOTIPORIGA ) ) ;
s . row ( r + 1 ) . add ( codmag , s . cid2index ( F_STOCODMAG ) ) ;
1997-07-25 08:56:42 +00:00
s . row ( r + 1 ) . add ( " Rim.in " , s . cid2index ( F_STOANNOES ) ) ;
1997-06-27 16:45:59 +00:00
s . row ( r + 1 ) . add ( totq . string ( ) , s . cid2index ( F_STOQUANT ) ) ;
s . row ( r + 1 ) . add ( totval . string ( ) , s . cid2index ( F_STOVAL ) ) ;
s . disable_cell ( r + 1 , - 1 ) ;
}
update_totali_storico ( codmag ) ;
return r ;
}
void TMask_anamag : : update_totali_storico ( TString & codmag )
{
TSheet_field & s = ( TSheet_field & ) field ( F_SHEETSTOMAG ) ;
real tot1 , tot2 ;
// find first occourrence..
int i = 0 ;
while ( i < s . items ( ) & & codmag > s . cell ( i , s . cid2index ( F_STOCODMAG ) ) )
i + + ;
// ...sum...
for ( ; i < s . items ( ) & & * s . cell ( i , s . cid2index ( F_STOTIPORIGA ) ) ! = SIMBOLO_TOTALI ; i + + )
{
1997-09-24 13:10:57 +00:00
tot1 + = real ( s . cell ( i , s . cid2index ( F_STOQUANT ) ) ) ;
tot2 + = real ( s . cell ( i , s . cid2index ( F_STOVAL ) ) ) ;
1997-06-27 16:45:59 +00:00
}
//... display
if ( i < s . items ( ) )
{
s . row ( i ) . add ( tot1 . string ( ) , s . cid2index ( F_STOQUANT ) ) ;
s . row ( i ) . add ( tot2 . string ( ) , s . cid2index ( F_STOVAL ) ) ;
s . force_update ( i ) ;
}
}
bool TMask_anamag : : remove_totali_storico ( TString & codmag )
{
2004-04-28 22:04:10 +00:00
if ( codmag . blank ( ) )
return FALSE ;
1997-06-27 16:45:59 +00:00
TSheet_field & s = ( TSheet_field & ) field ( F_SHEETSTOMAG ) ;
bool found_some ( FALSE ) ;
2004-04-28 22:04:10 +00:00
int r ;
1997-06-27 16:45:59 +00:00
2004-04-28 22:04:10 +00:00
for ( r = 0 ; ! found_some & & r < s . items ( ) - 1 & & ! ( * s . cell ( r , s . cid2index ( F_STOTIPORIGA ) ) = = SIMBOLO_TOTALI
& & codmag = = s . cell ( r , s . cid2index ( F_STOCODMAG ) ) ) ; r + + )
1997-06-27 16:45:59 +00:00
{
if ( * s . cell ( r , s . cid2index ( F_STOTIPORIGA ) ) ! = SIMBOLO_TOTALI
& & codmag = = s . cell ( r , s . cid2index ( F_STOCODMAG ) ) )
found_some = TRUE ;
}
if ( ! found_some )
{
// ultima riga
s . destroy ( r , FALSE ) ;
s . destroy ( r , FALSE ) ;
}
return ! found_some ;
}
bool TMask_anamag : : check_totali_storico ( )
{
2001-05-02 13:40:49 +00:00
TSheet_field & s = ( TSheet_field & ) field ( F_SHEETSTOMAG ) ;
const int annogiac = get_int ( F_ANNO ) ;
if ( annogiac ! = last_annosto )
return TRUE ;
1997-06-27 16:45:59 +00:00
for ( int r = 0 ; r < s . items ( ) ; r + + )
{
1998-01-09 16:33:25 +00:00
// rintraccia il totale
1997-06-27 16:45:59 +00:00
for ( ; r < s . items ( ) & & * s . cell ( r , s . cid2index ( F_STOTIPORIGA ) ) ! = SIMBOLO_TOTALI ; r + + ) ;
real totq1 ( s . cell ( r , s . cid2index ( F_STOQUANT ) ) ) , totq2 ( s . cell ( r + 1 , s . cid2index ( F_STOQUANT ) ) ) ;
if ( totq1 ! = totq2 )
1998-01-09 16:33:25 +00:00
if ( ! yesno_box ( " La somma delle composizioni dello storico \n per il magazzino %s non corrisponde \n alla rimanenza iniziale. \n Proseguo ugualmente ? " ,
1997-07-25 08:56:42 +00:00
( const char * ) s . cell ( r , s . cid2index ( F_STOCODMAG ) ) ) )
return FALSE ;
2004-11-30 22:02:59 +00:00
TCurrency totval1 ( real ( s . cell ( r , s . cid2index ( F_STOVAL ) ) ) ) ,
totval2 ( real ( s . cell ( r + 1 , s . cid2index ( F_STOVAL ) ) ) ) ;
1997-06-27 16:45:59 +00:00
if ( totval1 ! = totval2 )
1998-01-09 16:33:25 +00:00
return yesno_box ( " La somma del valore delle composizioni dello storico \n per il magazzino %s non corrisponde \n al valore della rimanenza iniziale. \n Proseguo ugualmente ? " ,
1997-07-25 08:56:42 +00:00
( const char * ) s . cell ( r , s . cid2index ( F_STOCODMAG ) ) ) ;
r + + ;
}
return TRUE ;
2001-05-02 13:40:49 +00:00
}
1997-07-25 08:56:42 +00:00
bool TMask_anamag : : notify_sheet_giac ( TSheet_field & f , int i , KEY k )
{
1997-08-20 09:39:42 +00:00
TMask_anamag & m = ( TMask_anamag & ) f . mask ( ) ;
2006-12-13 16:22:33 +00:00
const bool gestmag = app ( ) . has_module ( MGAUT ) & & m . magazzini ( ) . gestmag ( ) ;
if ( gestmag )
{
switch ( k )
{
case ( K_ENTER ) : // fine modifica
{
real ck ( f . cell ( i , f . cid2index ( F_RIM ) ) ) ;
ck + = real ( f . cell ( i , f . cid2index ( F_ACQ ) ) ) ;
ck + = real ( f . cell ( i , f . cid2index ( F_ENTR ) ) ) ;
ck - = real ( f . cell ( i , f . cid2index ( F_VEN ) ) ) ;
ck - = real ( f . cell ( i , f . cid2index ( F_USC ) ) ) ;
ck - = real ( f . cell ( i , f . cid2index ( F_ACL ) ) ) ;
ck + = real ( f . cell ( i , f . cid2index ( F_INCL ) ) ) ;
ck - = real ( f . cell ( i , f . cid2index ( F_INPRODF ) ) ) ;
ck + = real ( f . cell ( i , f . cid2index ( F_INPRODC ) ) ) ;
ck - = real ( f . cell ( i , f . cid2index ( F_SCARTI ) ) ) ;
ck - = real ( f . cell ( i , f . cid2index ( F_GIAC ) ) ) ;
if ( ! ck . is_zero ( ) )
{
f . error_box ( " La giacenza deve essere pari a RIM+(ACQ+ENTR)-(VEN+USC)-(ACL-INCL)-(PRODF-PRODC) - SCARTI) " ) ;
return FALSE ;
}
2000-05-05 15:25:49 +00:00
2006-12-13 16:22:33 +00:00
m . update_ordc_ordf ( ) ; //chiama la funzione che calcola i totali degli ordinati
}
break ;
case ( K_CTRL + K_INS ) : // richiesta di inserimento
case ( K_TAB ) : // modifica
{
if ( * f . cell ( i , f . cid2index ( F_CODMAG ) ) < = ' ' )
{
if ( m . magazzini ( ) . standardmag ( ) . not_empty ( ) )
{
f . row ( i ) . add ( m . magazzini ( ) . standardmag ( ) , f . cid2index ( F_CODMAG ) ) ;
f . row ( i ) . add ( m . magazzini ( ) . standarddep ( ) , f . cid2index ( F_CODDEP ) ) ;
}
}
}
break ;
}
} //if(gestmag...
//campi presi da altri campi della maschera per..
//..essere visualizzati nella pag. giacenze
if ( k = = K_TAB )
{
TMask & sm = f . sheet_mask ( ) ; //maschera delle giacenze
if ( sm . field ( F_LIV1 ) . hidden ( ) ) //l'articolo appare solo se mancano i livelli di giacenza senno'..
{ //..si sovrappongono
sm . show ( F_CODARTR ) ;
sm . show ( F_DESCRR ) ;
sm . set ( F_CODARTR , m . get ( F_CODART ) ) ;
sm . set ( F_DESCRR , m . get ( F_DESCR ) ) ;
}
else
{
sm . hide ( F_CODARTR ) ;
sm . hide ( F_DESCRR ) ;
}
sm . set ( F_ULC1R , m . get_real ( F_ULC1 ) ) ;
sm . set ( F_DATAULC1R , m . get_date ( F_DATAULC1 ) ) ;
sm . set ( F_ULC2R , m . get_real ( F_ULC1 ) ) ;
sm . set ( F_DATAULC2R , m . get_date ( F_DATAULC2 ) ) ;
}
return true ;
1997-06-27 16:45:59 +00:00
}
2002-02-26 16:20:19 +00:00
bool TMask_anamag : : handle_sheet_giac_codmag ( TMask_field & f , KEY k )
{
if ( k = = K_TAB & & f . dirty ( ) )
{
TMask & m = f . mask ( ) ;
const TRectype & mag = ( ( TEdit_field & ) f ) . browse ( ) - > cursor ( ) - > curr ( ) ;
const bool gesdep = mag . get_bool ( " B0 " ) ;
m . enable ( F_CODDEP , gesdep ) ;
m . show ( F_DESDEP , gesdep ) ;
if ( gesdep )
m . field ( F_CODDEP ) . check ( ) ;
else
{
m . set ( F_CODDEP , " " ) ;
m . set ( F_DESDEP , " " ) ;
}
}
return TRUE ;
}
1997-07-25 08:56:42 +00:00
1998-11-04 18:04:26 +00:00
bool TMask_anamag : : handle_sheet_giac_valgiac ( TMask_field & f , KEY k )
{
if ( k = = K_TAB & & f . dirty ( ) )
{
2002-02-26 16:20:19 +00:00
TMask & m = f . mask ( ) ;
real q = m . get_real ( F_RIM ) + m . get_real ( F_ACQ ) ;
1999-04-06 15:34:39 +00:00
if ( q . is_zero ( ) )
f . set ( q . string ( ) ) ;
else
{
q = ( m . get_real ( F_VRIM ) + m . get_real ( F_VACQ ) ) / q ;
1999-10-22 10:00:18 +00:00
TPrice r ( q ) ;
2001-05-02 13:40:49 +00:00
f . set ( r . get_num ( ) . string ( ) ) ;
1999-04-06 15:34:39 +00:00
}
}
return TRUE ;
}
bool TMask_anamag : : handle_sheet_stomag_stoval ( TMask_field & f , KEY k )
{
2005-03-03 15:42:04 +00:00
if ( k = = K_TAB & & f . dirty ( ) )
1999-04-06 15:34:39 +00:00
{
TMask & m = f . mask ( ) ;
2005-03-03 15:42:04 +00:00
const real val = m . get_real ( F_STOQUANT ) * m . get_real ( F_STOVALUN ) ;
const TCurrency c ( val ) ;
2004-11-30 22:02:59 +00:00
m . set ( F_STOVAL , c ) ;
1998-11-04 18:04:26 +00:00
}
return TRUE ;
}
1997-06-27 16:45:59 +00:00
bool TMask_anamag : : notify_sheet_sto ( TSheet_field & s , int r , KEY k )
{
static TString16 oldcodmag , newcodmag , oldanno , newanno ;
TMask_anamag & m = ( TMask_anamag & ) s . mask ( ) ;
2004-04-28 22:04:10 +00:00
1997-06-27 16:45:59 +00:00
switch ( k )
{
case K_DEL :
if ( * s . cell ( r , s . cid2index ( F_STOTIPORIGA ) ) = = SIMBOLO_TOTALI )
return FALSE ;
break ;
case ( K_CTRL + K_DEL ) :
if ( m . remove_totali_storico ( oldcodmag ) )
s . force_update ( ) ;
break ;
case K_TAB : // posizionamento sulla riga
oldcodmag = s . cell ( r , s . cid2index ( F_STOCODMAG ) ) ;
oldanno = s . cell ( r , s . cid2index ( F_STOANNOES ) ) ;
break ;
case ( K_ENTER ) : // fine modifica
2000-10-03 13:45:12 +00:00
1998-01-09 16:33:25 +00:00
newanno = ( s . cell ( r , s . cid2index ( F_STOANNOES ) ) ) ;
1997-06-27 16:45:59 +00:00
newcodmag = ( s . cell ( r , s . cid2index ( F_STOCODMAG ) ) ) ;
1998-01-09 16:33:25 +00:00
if ( m . esercizi_contabili ( ) [ atoi ( newanno ) ] . inizio ( ) > = m . esercizi_contabili ( ) [ m . get_int ( F_STOANNO ) ] . inizio ( ) )
{
s . row ( r ) . add ( oldanno , s . cid2index ( F_STOANNOES ) ) ;
s . error_box ( " La rimanenza iniziale di un esercizio deve essere composta da parti provenienti da esercizi precedenti " ) ;
return FALSE ;
}
1997-06-27 16:45:59 +00:00
// modifica
m . update_totali_storico ( newcodmag ) ;
if ( oldcodmag = = s . cell ( r , s . cid2index ( F_STOCODMAG ) ) )
{
if ( oldanno = = s . cell ( r , s . cid2index ( F_STOANNOES ) ) )
break ;
} else {
m . remove_totali_storico ( oldcodmag ) ;
}
1997-08-20 09:39:42 +00:00
case ( K_CTRL + K_INS ) : // fine inserimento
1998-01-09 16:33:25 +00:00
if ( * s . cell ( r , s . cid2index ( F_STOCODMAG ) ) = = ' ' & & m . magazzini ( ) . standardmag ( ) . not_empty ( ) )
{
// new line
s . row ( r ) . add ( m . magazzini ( ) . standardmag ( ) , s . cid2index ( F_STOCODMAG ) ) ;
}
1997-06-27 16:45:59 +00:00
newcodmag = ( s . cell ( r , s . cid2index ( F_STOCODMAG ) ) ) ;
newanno = ( s . cell ( r , s . cid2index ( F_STOANNOES ) ) ) ;
if ( newcodmag ! = " " )
{
// ordina
while ( r < s . items ( ) - 1 & & ( newcodmag > s . cell ( r + 1 , s . cid2index ( F_STOCODMAG ) ) | |
( newcodmag = = s . cell ( r + 1 , s . cid2index ( F_STOCODMAG ) ) & &
( newanno > s . cell ( r + 1 , s . cid2index ( F_STOANNOES ) ) & & * s . cell ( r + 1 , s . cid2index ( F_STOTIPORIGA ) ) ! = SIMBOLO_TOTALI ) ) ) )
{
s . swap_rows ( r , r + 1 ) ;
r + + ;
}
while ( r > 0 & & ( newcodmag < s . cell ( r - 1 , s . cid2index ( F_STOCODMAG ) ) | |
( newcodmag = = s . cell ( r - 1 , s . cid2index ( F_STOCODMAG ) ) & &
( newanno < s . cell ( r - 1 , s . cid2index ( F_STOANNOES ) ) | | * s . cell ( r - 1 , s . cid2index ( F_STOTIPORIGA ) ) = = SIMBOLO_TOTALI ) ) ) )
{
s . swap_rows ( r , r - 1 ) ;
r - - ;
}
m . add_totali_storico ( newcodmag ) ;
2004-04-28 22:04:10 +00:00
// TSheet_field & s_um=(TSheet_field & )s.mask().field(F_SHEETUM); // qui verificare
1997-06-27 16:45:59 +00:00
s . force_update ( ) ;
}
break ;
1997-08-20 09:39:42 +00:00
case ( K_INS ) : // richiesta di inserimento
break ;
1997-06-27 16:45:59 +00:00
}
return TRUE ;
}
1997-05-23 14:48:37 +00:00
bool TMask_anamag : : handle_sheetstomag ( TMask_field & fld , KEY k )
{
1997-06-27 16:45:59 +00:00
TSheet_field & f = ( TSheet_field & ) fld ;
TMask_anamag & m = ( TMask_anamag & ) f . mask ( ) ; // prende la maschere d'origine del campo
1997-05-23 14:48:37 +00:00
if ( k = = K_ENTER )
{
1997-06-27 15:10:03 +00:00
const int items = f . items ( ) ;
1997-06-27 16:45:59 +00:00
real totrim , totvalrim ;
1997-05-23 14:48:37 +00:00
1997-06-27 15:10:03 +00:00
if ( items > 0 )
{
1997-06-27 16:45:59 +00:00
if ( ! m . check_totali_storico ( ) )
return FALSE ;
2004-04-28 22:04:10 +00:00
TAssoc_array v ; // istanzia l'hash table per il controllo di univocit<69>
int i ;
for ( i = 0 ; i < items ; i + + )
1997-06-27 15:10:03 +00:00
{
1997-06-27 16:45:59 +00:00
if ( * f . cell ( i , f . cid2index ( F_STOTIPORIGA ) ) ! = SIMBOLO_TOTALI )
{
1997-07-25 08:56:42 +00:00
TString codmg ( f . cell ( i , f . cid2index ( F_STOCODMAG ) ) ) ;
1997-06-27 16:45:59 +00:00
TString codeser ( f . cell ( i , f . cid2index ( F_STOANNOES ) ) ) ;
1997-07-25 08:56:42 +00:00
if ( codmg . blank ( ) )
return error_box ( " Il codice del magazzino non pu<70> essere vuoto " ) ;
if ( codeser . blank ( ) )
1997-06-27 16:45:59 +00:00
return error_box ( " I codici degli esercizi non possono essere vuoti " ) ;
// aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista gi<67>
1997-07-25 08:56:42 +00:00
codmg . overwrite ( codeser , 3 ) ;
if ( v . add ( codmg ) )
1997-06-27 16:45:59 +00:00
return error_box ( " La composizione delle rimanenze deve far riferimento a esercizi tutti diversi tra loro " ) ;
TLocalisamfile stor_aux ( LF_STOMAG ) ;
stor_aux . put ( STOMAG_CODART , fld . mask ( ) . get ( F_CODART ) ) ;
stor_aux . put ( STOMAG_ANNOESRIF , fld . mask ( ) . get ( F_STOANNO ) ) ;
stor_aux . put ( STOMAG_ANNOES , codeser ) ;
totrim = totrim + ( real ) f . cell ( i , f . cid2index ( F_STOQUANT ) ) ;
totvalrim = totvalrim + ( real ) f . cell ( i , f . cid2index ( F_STOVAL ) ) ;
}
1997-06-27 15:10:03 +00:00
}
1997-06-27 16:45:59 +00:00
for ( i = 0 ; i < items ; )
{
if ( * f . cell ( i , f . cid2index ( F_STOTIPORIGA ) ) = = SIMBOLO_TOTALI )
f . rows_array ( ) . remove ( i , TRUE ) ;
else
i + + ;
}
// ordina le righe per ANNO
//f.rows_array().sort();
if ( m . get ( F_STOANNO ) < f . cell ( f . items ( ) - 1 , F_STOANNOES - FIRST_FIELD ) )
return error_box ( " La composizione delle rimanenze non puo' comprendere anni seguenti " ) ;
}
1999-10-22 10:00:18 +00:00
} else
if ( k = = K_SPACE )
{
1997-06-27 16:45:59 +00:00
for ( int i = 0 ; i < f . items ( ) ; )
{
TString16 codmag ( f . cell ( i , f . cid2index ( F_STOCODMAG ) ) ) ;
i = m . add_totali_storico ( codmag ) + 2 ;
1997-06-27 15:10:03 +00:00
}
1997-07-25 08:56:42 +00:00
f . force_update ( ) ;
1997-05-23 14:48:37 +00:00
}
return TRUE ;
}
1997-05-23 14:46:41 +00:00
bool TMask_anamag : : handle_sheet_um_um ( TMask_field & fld , KEY k )
{
if ( fld . focusdirty ( ) & & k = = K_TAB )
{
TMask & m = fld . mask ( ) ; // prende la maschera d'origine del campo (maschera dello sheet)
const TString16 curr_um ( fld . get ( ) ) ; // prende il contenuto del campo corrente (unit<69> di misura corrente)
1997-07-25 08:56:42 +00:00
if ( ! curr_um . blank ( ) ) // se il codice dell'unit<69> di misura <20> vuoto non viene fatto alcun calcolo
1997-05-23 14:46:41 +00:00
{
TSheet_field * f = m . get_sheet ( ) ; // prende lo sheet d'origine della maschera del campo
CHECK ( f ! = NULL , " Il puntatore allo sheet <20> nullo " ) ;
if ( f - > selected ( ) > 0 )
{
// ALGORITMO DI PRECALCOLO DEL RAPPORTO DELLE UNITA' DI MISURA NELLO SHEET
//
// SHEET:
// -----
// riga u.m. f.c.
// 1) KM 1 -> kilometri (you), riferiti al metro (your) con f.c. 1000 (your_fc)
// ... ... ...
// ...) MM X -> millimetri (me), riferiti al metro (my) con f.c. 0,001 (my_fc)
//
// se (your==my) allora X=(my_fc/your_fc) ...chiaro, no!? :-)
TTable t ( " %UMS " ) ;
real x ; // fattore di conversione dell'unit<69> di misura corrente
const TString16 first_um ( f - > row ( 0 ) . get ( 0 ) ) ; // prende l'unit<69> di misura di rapporto (dalla prima linea dello sheet)
t . zero ( ) ;
t . put ( " CODTAB " , curr_um ) ;
if ( t . read ( ) = = NOERR )
{
const TString16 rif_um ( t . get ( " S7 " ) ) ; // prende l'unit<69> di misura di riferimento dell'unit<69> di misura corrente
x = t . get_real ( " R10 " ) ; // prende il suo fattore di conversione
if ( rif_um ! = first_um )
{
t . zero ( ) ;
t . put ( " CODTAB " , first_um ) ;
if ( t . read ( ) = = NOERR )
{
1997-07-25 08:56:42 +00:00
TString16 rif_first_um ( t . get ( " S7 " ) ) ; // prende l'unit<69> di misura di riferimento dell'unit<69> di misura di rapporto
1998-11-04 18:04:26 +00:00
real rif_fc_first_um ( t . get_real ( " R10 " ) ) ; // prende il suo fattore di conversione
rif_fc_first_um = rif_fc_first_um . is_zero ( ) ? 1 : rif_fc_first_um ;
1997-07-25 08:56:42 +00:00
if ( rif_first_um = = rif_um )
1997-05-23 14:46:41 +00:00
{
1997-07-25 08:56:42 +00:00
x / = rif_fc_first_um ; // calcola il rapporto tra i fattori di conversione
1997-05-23 14:46:41 +00:00
x . round ( 5 ) ; // arrotonda il risultato a 5 decimali
1997-07-25 08:56:42 +00:00
} else {
if ( rif_first_um = = curr_um ) {
x = 1 / rif_fc_first_um ;
}
1997-05-23 14:46:41 +00:00
}
}
1997-07-25 08:56:42 +00:00
}
1997-05-23 14:46:41 +00:00
}
if ( x = = ZERO )
x = 1.00 ;
m . set ( FS_FCUM , x ) ; // il risultato viene scritto nel campo del fattore di conversione
1997-07-25 08:56:42 +00:00
} else {
1997-08-22 09:27:37 +00:00
TString & um_p = ( ( TMask_anamag & ) f - > mask ( ) ) . um_principale ( ) ;
1997-08-18 15:19:39 +00:00
if ( um_p . blank ( ) ) {
f - > mask ( ) . set ( F_UMPRINCIPALE , curr_um ) ;
f - > mask ( ) . set ( F_UMPRINCIPALE2 , curr_um ) ;
um_p = curr_um ;
}
}
1997-05-23 14:46:41 +00:00
}
}
return TRUE ;
}
bool TMask_anamag : : handle_sheet_um_price ( TMask_field & f , KEY k )
{
if ( f . to_check ( k , TRUE ) )
{
TMask & m = f . mask ( ) ;
TString codiva = m . get_sheet ( ) - > mask ( ) . get ( F_CODIVA ) ; // recuper il codice IVA dalla maschera principale
real netto = 0.0 ;
real lordo = 0.0 ;
2000-05-05 15:25:49 +00:00
TCodiceIVA iva ( codiva ) ;
1997-05-23 14:46:41 +00:00
if ( f . dlg ( ) = = FS_PREZZO )
{
netto = real ( m . get ( FS_PREZZO ) ) ;
2000-05-05 15:25:49 +00:00
lordo = iva . lordo ( netto , AUTO_PRICES_DECIMALS , TCurrency : : get_firm_val ( ) ) ;
1997-05-23 14:46:41 +00:00
m . set ( FS_PREZZO_LORDO , lordo . string ( ) ) ;
}
else
{
lordo = real ( m . get ( FS_PREZZO_LORDO ) ) ;
real prec_lordo = lordo ;
2000-05-05 15:25:49 +00:00
const real imposta = iva . scorpora ( lordo , AUTO_PRICES_DECIMALS , TCurrency : : get_firm_val ( ) ) ;
netto = lordo ;
lordo + = imposta ;
1997-05-23 14:46:41 +00:00
if ( lordo ! = prec_lordo )
{
warning_box ( " Scorporando l'iva dal prezzo lordo si e' dovuto \n "
" correggere quest'ultimo a causa di arrotondamenti. " ) ;
m . set ( FS_PREZZO_LORDO , lordo . string ( ) ) ;
}
m . set ( FS_PREZZO , netto . string ( ) ) ;
}
}
return TRUE ;
}
1997-05-23 14:48:37 +00:00
1997-05-23 14:52:38 +00:00
void TMask_anamag : : sheetgiac_get ( TSheet_field & fld_righe , int item )
1997-05-23 14:46:41 +00:00
{
1997-05-23 14:52:38 +00:00
TMask_anamag & m = ( TMask_anamag & ) fld_righe . mask ( ) ;
// prende il record della riga corrente dal record array
1997-06-27 15:10:03 +00:00
TRectype & rec = fld_righe . record ( ) - > row ( item , TRUE ) ;
1997-05-23 14:52:38 +00:00
TToken_string & row = fld_righe . row ( item - 1 ) ;
// codici di livello
row . add ( m . livelli_giac - > unpack_grpcode ( rec . get ( " LIVELLO " ) , 1 ) , fld_righe . cid2index ( F_LIV1 ) ) ;
1997-06-27 15:10:03 +00:00
row . add ( m . livelli_giac - > unpack_grpcode ( rec . get ( " LIVELLO " ) , 2 ) , fld_righe . cid2index ( F_LIV2 ) ) ;
1997-05-23 14:52:38 +00:00
row . add ( m . livelli_giac - > unpack_grpcode ( rec . get ( " LIVELLO " ) , 3 ) , fld_righe . cid2index ( F_LIV3 ) ) ;
1997-06-27 15:10:03 +00:00
row . add ( m . livelli_giac - > unpack_grpcode ( rec . get ( " LIVELLO " ) , 4 ) , fld_righe . cid2index ( F_LIV4 ) ) ;
1997-05-23 14:46:41 +00:00
}
1997-05-23 14:52:38 +00:00
// item varies from 1 to items()
void TMask_anamag : : sheetgiac_put ( TSheet_field & fld_righe , int item )
1997-05-23 14:46:41 +00:00
{
1997-05-23 14:52:38 +00:00
TMask_anamag & m = ( TMask_anamag & ) fld_righe . mask ( ) ;
TToken_string & row = fld_righe . row ( item - 1 ) ;
1997-05-23 14:46:41 +00:00
1997-06-27 15:10:03 +00:00
TRectype & recrighe = fld_righe . record ( ) - > row ( item , TRUE ) ;
// codici livello
if ( m . livelli_giac - > enabled ( ) ) {
TString16 packedcode ;
m . livelli_giac - > pack_grpcode ( packedcode , row . get ( fld_righe . cid2index ( F_LIV1 ) ) , 1 ) ;
m . livelli_giac - > pack_grpcode ( packedcode , row . get ( fld_righe . cid2index ( F_LIV2 ) ) , 2 ) ;
m . livelli_giac - > pack_grpcode ( packedcode , row . get ( fld_righe . cid2index ( F_LIV3 ) ) , 3 ) ;
m . livelli_giac - > pack_grpcode ( packedcode , row . get ( fld_righe . cid2index ( F_LIV4 ) ) , 4 ) ;
recrighe . put ( " LIVELLO " , packedcode ) ;
}
1997-05-23 14:46:41 +00:00
}
1997-08-18 15:19:39 +00:00
// Aggiorna il valore delle giacenze in base al cambiamento dell'unit<69> di misura principale
void TMask_anamag : : ricalcola_giacenze ( )
1997-06-27 16:45:59 +00:00
{
1997-08-18 15:19:39 +00:00
real fc ( 1.0 ) ;
TSheet_field & f = ( TSheet_field & ) field ( F_SHEETUM ) ;
2004-04-28 22:04:10 +00:00
if ( ! um_principale ( ) . blank ( ) & & um_principale ( ) ! = f . cell ( 0 , f . cid2index ( FS_CODUM ) ) )
{
int i ;
for ( i = 0 ; i < f . items ( ) ; i + + )
1997-08-18 15:19:39 +00:00
{
1997-08-22 09:27:37 +00:00
if ( um_principale ( ) = = f . cell ( i , f . cid2index ( FS_CODUM ) ) )
1997-08-18 15:19:39 +00:00
break ;
}
fc = f . cell ( i , f . cid2index ( FS_FCUM ) ) ;
}
if ( fc ! = 1.0 )
{
TLocalisamfile mag ( LF_MAG ) , stomag ( LF_STOMAG ) ;
1997-08-22 09:27:37 +00:00
int annoes = esercizi_contabili ( ) . first ( ) ;
1998-01-09 16:33:25 +00:00
// ciclo sugli esercizi
1997-08-18 15:19:39 +00:00
do {
mag . zero ( ) ;
mag . put ( MAG_ANNOES , annoes ) ;
mag . put ( MAG_CODART , get ( F_CODART ) ) ;
1998-01-09 16:33:25 +00:00
mag . read ( _isgteq ) ;
// ciclo per le giacenze di questo esercizio
1997-08-18 15:19:39 +00:00
while ( ! mag . eof ( ) & & get ( F_CODART ) = = mag . get ( MAG_CODART ) & & annoes = = mag . get_int ( MAG_ANNOES ) )
{
mag . put ( MAG_LIVRIOR , mag . get_real ( MAG_LIVRIOR ) * fc ) ; // update ..
mag . put ( MAG_LOTTORIOR , mag . get_real ( MAG_LOTTORIOR ) * fc ) ;
// saldi
mag . put ( MAG_GIAC , mag . get_real ( MAG_GIAC ) * fc ) ; // update ..
mag . put ( MAG_ACQ , mag . get_real ( MAG_ACQ ) * fc ) ;
mag . put ( MAG_ENT , mag . get_real ( MAG_ENT ) * fc ) ;
mag . put ( MAG_VEN , mag . get_real ( MAG_VEN ) * fc ) ;
mag . put ( MAG_USC , mag . get_real ( MAG_USC ) * fc ) ;
mag . put ( MAG_ORDC , mag . get_real ( MAG_ORDC ) * fc ) ;
mag . put ( MAG_ORDF , mag . get_real ( MAG_ORDF ) * fc ) ;
mag . put ( MAG_RIM , mag . get_real ( MAG_RIM ) * fc ) ;
mag . put ( MAG_SCARTI , mag . get_real ( MAG_SCARTI ) * fc ) ;
mag . put ( MAG_INCL , mag . get_real ( MAG_INCL ) * fc ) ;
mag . put ( MAG_ACL , mag . get_real ( MAG_ACL ) * fc ) ;
mag . put ( MAG_PRODCOMP , mag . get_real ( MAG_PRODCOMP ) * fc ) ;
mag . put ( MAG_PRODFIN , mag . get_real ( MAG_PRODFIN ) * fc ) ;
mag . put ( MAG_SCORTAMIN , mag . get_real ( MAG_SCORTAMIN ) * fc ) ;
mag . rewrite ( ) ;
mag . next ( ) ;
}
stomag . zero ( ) ;
1998-01-09 16:33:25 +00:00
stomag . put ( STOMAG_ANNOESRIF , annoes ) ;
stomag . put ( STOMAG_CODART , get ( F_CODART ) ) ;
stomag . read ( _isgteq ) ;
// ciclo per lo storico di questo esercizio
while ( ! stomag . eof ( ) & & get ( F_CODART ) = = stomag . get ( STOMAG_CODART ) & & annoes = = stomag . get_int ( STOMAG_ANNOESRIF ) )
1997-08-18 15:19:39 +00:00
{
1998-01-09 16:33:25 +00:00
stomag . put ( STOMAG_QUANT , stomag . get_real ( STOMAG_QUANT ) * fc ) ; // update ..
1997-08-18 15:19:39 +00:00
stomag . rewrite ( ) ;
stomag . next ( ) ;
}
2004-04-28 22:04:10 +00:00
}
while ( ( annoes = esercizi_contabili ( ) . next ( annoes ) ) > 0 ) ; // qui verificare
1997-08-18 15:19:39 +00:00
}
1997-07-25 08:56:42 +00:00
return ;
1997-06-27 16:45:59 +00:00
}
2005-02-17 18:13:12 +00:00
//---------------------------------------
//fine gestione articolo multilivello
//---------------------------------------
//-------------------------------------------------------------------------------------------------
// METODI DELL'APPLICAZIONE
//-------------------------------------------------------------------------------------------------
1999-04-06 15:34:39 +00:00
void TAnagrafica_magazzino : : on_firm_change ( )
{
if ( _msk )
_msk - > set_parametered_fields ( ) ;
}
1995-08-11 11:05:08 +00:00
2001-05-02 13:40:49 +00:00
bool TAnagrafica_magazzino : : search_on_file ( const char * key , int file , int nkey , const char * field )
{
TLocalisamfile f ( file ) ;
if ( f . empty ( ) )
return FALSE ;
else
{
f . setkey ( nkey ) ;
f . put ( field , key ) ;
f . read ( ) ;
return f . get ( field ) = = key ;
}
}
bool TAnagrafica_magazzino : : protected_record ( TRectype & rec )
{
const TString art ( rec . get ( ANAMAG_CODART ) ) ;
const TRectype & dist = cache ( ) . get ( LF_DIST , art ) ;
if ( ! dist . empty ( ) )
return TRUE ;
else
if ( search_on_file ( art , LF_RDIST , 2 , " CODCOMP " ) )
return TRUE ;
else
return search_on_file ( art , LF_RMOVMAG , 2 , " CODART " ) ;
}
1996-03-20 16:15:18 +00:00
bool TAnagrafica_magazzino : : user_create ( )
{
2000-05-05 15:25:49 +00:00
open_files ( LF_TAB , LF_TABCOM , LF_ANAMAG , LF_MAG , LF_STOMAG ,
2001-05-02 13:40:49 +00:00
LF_UMART , LF_CODCORR , LF_DESLIN , LF_DIST , LF_RDIST , LF_RMOVMAG ,
2000-05-05 15:25:49 +00:00
LF_CLIFO , LF_PCON , 0 ) ;
1997-05-23 14:46:41 +00:00
// crea l'oggetto per i parametri di livello giacenza
// apre la maschera e dispone gli sheet
1996-06-27 09:40:52 +00:00
_rel = new TRelation ( LF_ANAMAG ) ;
1997-05-23 14:48:37 +00:00
1999-04-06 15:34:39 +00:00
_msk = new TMask_anamag ( _rel ) ;
1995-08-07 07:59:09 +00:00
2005-02-17 18:13:12 +00:00
set_search_field ( F_CODART ) ; //serve per avere come campo di ricerca il codice articolo intero
//invece che l'ultimo campo del codice multilivello (se c'e')
return TRUE ;
1995-08-07 07:59:09 +00:00
}
1996-03-20 16:15:18 +00:00
bool TAnagrafica_magazzino : : user_destroy ( )
{
1997-05-23 14:46:41 +00:00
1995-08-11 11:05:08 +00:00
delete _rel ;
delete _msk ;
1997-05-23 14:46:41 +00:00
1995-08-07 07:59:09 +00:00
return TRUE ;
}
1996-03-20 16:15:18 +00:00
int TAnagrafica_magazzino : : read ( TMask & m )
{
1997-05-23 14:48:37 +00:00
int err = TRelation_application : : read ( m ) ;
1996-03-20 16:15:18 +00:00
if ( err = = NOERR )
{
1997-05-23 14:48:37 +00:00
// LETTURA SHEET STORICO MAGAZZINO IN AUTOMATICO
2002-05-08 16:25:49 +00:00
TSheet_field & fld_stomag = m . sfield ( F_SHEETSTOMAG ) ;
1997-06-27 16:45:59 +00:00
fld_stomag . sheet_mask ( ) . field ( F_STOCODART ) . set ( m . field ( F_CODART ) . get ( ) ) ; // necessario se lo sheet <20> vuoto
1997-05-23 14:48:37 +00:00
1997-05-23 14:46:41 +00:00
// *****************************
// LETTURA SHEET UNITA' DI MISURA
1999-04-06 15:34:39 +00:00
load_um ( m ) ;
2001-05-02 13:40:49 +00:00
( ( TMask_anamag & ) m ) . update_ordc_ordf ( ) ; //chiama la funzione che calcola i totali degli ordinati
1999-04-06 15:34:39 +00:00
}
1995-08-07 07:59:09 +00:00
return err ;
}
1999-04-06 15:34:39 +00:00
void TAnagrafica_magazzino : : load_um ( TMask & m )
{
// *****************************
// LETTURA SHEET UNITA' DI MISURA
2002-05-08 16:25:49 +00:00
TSheet_field & fld_um = m . sfield ( F_SHEETUM ) ; // prende lo sheet delle unit<69> di misura
2003-09-24 10:27:20 +00:00
get_relation ( ) - > curr ( ) . put ( ANAMAG_CODART , m . get ( F_CODART ) ) ;
1999-04-06 15:34:39 +00:00
fld_um . record ( ) - > read ( * fld_um . putkey ( * get_relation ( ) ) ) ;
fld_um . autoload ( * get_relation ( ) ) ;
// else
// ((TToken_string &)fld_um.row(0)).add("1",fld_um.cid2index(FS_FCUM)); // forza la prima unita' di misura a 1
// fld_um.disable_cell(0, fld_um.cid2index(FS_FCUM)); // mette in sola lettura il secondo campo della prima riga (il fattore di conversione della prima U.M. <20> fisso a 1)
// fld_um.force_update(0); // aggiorna lo stato della riga 0
TString16 um_principale ;
um_principale = fld_um . cell ( 0 , fld_um . cid2index ( FS_CODUM ) ) ;
m . set ( F_UMPRINCIPALE , um_principale ) ;
m . set ( F_UMPRINCIPALE2 , um_principale ) ;
}
1996-03-20 16:15:18 +00:00
1999-04-06 15:34:39 +00:00
bool TAnagrafica_magazzino : : remove ( )
1996-03-20 16:15:18 +00:00
{
1999-04-06 15:34:39 +00:00
bool ok = TRelation_application : : remove ( ) ;
if ( ok )
{
TMask & m = curr_mask ( ) ;
TSheet_field & f = ( TSheet_field & ) m . field ( F_SHEETUM ) ; // prende lo sheet delle unit<69> di misura
TLocalisamfile distinte ( LF_DIST ) ;
distinte . put ( " CODDIST " , m . get ( F_CODART ) ) ;
int err = distinte . read ( ) ; // esiste la distinta ?
switch ( err )
{
case _iskeynotfound :
case _isemptyfile :
case _iseof :
ok & = ( f . record ( ) - > remove ( ) = = NOERR ) ;
break ;
}
}
return ok ;
1996-03-20 16:15:18 +00:00
}
int TAnagrafica_magazzino : : write ( const TMask & m )
{
1999-04-06 15:34:39 +00:00
int err = TRelation_application : : write ( m ) ;
if ( err = = NOERR )
{
TSheet_field & f = ( TSheet_field & ) m . field ( F_SHEETUM ) ; // prende lo sheet delle unit<69> di misura
err | = f . record ( ) - > write ( FALSE ) ;
}
return err ;
1995-08-07 07:59:09 +00:00
}
1996-03-20 16:15:18 +00:00
int TAnagrafica_magazzino : : rewrite ( const TMask & m )
{
1999-04-06 15:34:39 +00:00
int err = TRelation_application : : rewrite ( m ) ;
if ( err = = NOERR )
{
2002-05-08 16:25:49 +00:00
TSheet_field & f = m . sfield ( F_SHEETUM ) ; // prende lo sheet delle unit<69> di misura
1999-04-06 15:34:39 +00:00
err | = f . record ( ) - > write ( TRUE ) ;
}
1997-08-18 15:19:39 +00:00
( ( TMask_anamag & ) m ) . ricalcola_giacenze ( ) ;
return err ;
1995-08-07 07:59:09 +00:00
}
1997-06-10 12:53:19 +00:00
2002-05-08 16:25:49 +00:00
static bool non_esiste_handler ( TMask_field & f , KEY k )
{
2005-02-17 18:13:12 +00:00
switch ( k )
2002-05-08 16:25:49 +00:00
{
2005-02-17 18:13:12 +00:00
case K_TAB :
if ( ! f . mask ( ) . is_running ( ) )
f . reset ( ) ;
break ;
case K_ENTER :
if ( ! cache ( ) . get ( LF_ANAMAG , f . mask ( ) . get ( F_CODART ) ) . empty ( ) )
return f . error_box ( TR ( " Il codice articolo selezionato esiste gi<67> " ) ) ;
default :
break ;
2002-05-08 16:25:49 +00:00
}
2005-02-17 18:13:12 +00:00
return true ;
2002-05-08 16:25:49 +00:00
}
bool TAnagrafica_magazzino : : handle_copia ( TMask_field & fld , KEY k )
{
if ( k = = K_SPACE )
{
2007-07-09 10:28:38 +00:00
TMask_anamag & m = ( TMask_anamag & ) fld . mask ( ) ;
2007-07-12 11:00:23 +00:00
const TString oldart = m . get ( F_CODART ) ;
2007-07-09 10:28:38 +00:00
TString codart , descart ;
if ( advanced_codart_enabled ( ) )
{
2007-07-12 11:00:23 +00:00
codart = oldart ;
2007-07-09 10:28:38 +00:00
if ( ! advanced_codart_ask ( codart , descart ) )
codart . cut ( 0 ) ;
}
else
2005-02-17 18:13:12 +00:00
{
2007-07-09 10:28:38 +00:00
const TCodart_livelli * liv_art = m . get_livelli_art ( ) ;
TMask ask ( " ve2400k " ) ;
ask . set_handler ( F_CODART , non_esiste_handler ) ;
if ( liv_art & & liv_art - > enabled ( ) )
2005-02-17 18:13:12 +00:00
{
2007-07-09 10:28:38 +00:00
create_fields ( ask , 1 , 1 , F_LIVART1 , F_DESLIVART1 , * liv_art , false ) ;
for ( int i = liv_art - > last_level ( ) ; i > 0 ; i - - )
{
const short id = F_LIVART1 + i - 1 ;
ask . set ( id , m . get ( id ) ) ;
}
ask . reset ( F_CODART ) ;
2005-02-17 18:13:12 +00:00
}
2007-07-09 10:28:38 +00:00
if ( ask . run ( ) = = K_ENTER )
codart = ask . get ( F_CODART ) ;
2005-02-17 18:13:12 +00:00
}
2007-07-12 11:00:23 +00:00
if ( codart . full ( ) & & codart ! = oldart )
2002-05-08 16:25:49 +00:00
{
2007-07-09 10:28:38 +00:00
if ( descart . full ( ) )
m . set ( F_DESCR , descart ) ;
m . set ( F_CODART , codart , TRUE ) ;
2002-05-08 16:25:49 +00:00
m . sfield ( F_SHEETGIAC ) . destroy ( ) ;
m . sfield ( F_SHEETSTOMAG ) . destroy ( ) ;
2002-05-31 10:35:40 +00:00
m . load_profile ( 0 , FALSE ) ;
2002-05-08 16:25:49 +00:00
m . set_mode ( MODE_INS ) ;
2007-07-12 11:00:23 +00:00
xvtil_statbar_set ( TR ( " Inserimento " ) , TRUE ) ;
2002-05-08 16:25:49 +00:00
}
}
return TRUE ;
}
void TAnagrafica_magazzino : : init_query_mode ( TMask & m )
{
m . hide ( F_COPY ) ;
2007-06-25 15:43:58 +00:00
if ( advanced_codart_enabled ( ) )
m . show ( F_ADVANCED ) ;
2002-05-08 16:25:49 +00:00
}
1996-03-20 16:15:18 +00:00
void TAnagrafica_magazzino : : init_insert_mode ( TMask & m )
{
1999-04-06 15:34:39 +00:00
load_um ( m ) ;
2001-05-02 13:40:49 +00:00
TSheet_field & f = m . sfield ( F_SHEETUM ) ;
1999-04-06 15:34:39 +00:00
if ( f . items ( ) = = 0 )
f . row ( 0 ) = " |1 " ; // aggiunge una riga allo sheet
2007-06-25 15:43:58 +00:00
if ( advanced_codart_enabled ( ) )
m . hide ( F_ADVANCED ) ;
1995-08-11 11:05:08 +00:00
}
1995-08-07 07:59:09 +00:00
2002-05-08 16:25:49 +00:00
void TAnagrafica_magazzino : : init_modify_mode ( TMask & m )
{
m . set_handler ( F_COPY , handle_copia ) ;
m . show ( F_COPY ) ;
2007-06-25 15:43:58 +00:00
if ( advanced_codart_enabled ( ) )
m . hide ( F_ADVANCED ) ;
2002-05-08 16:25:49 +00:00
}
2001-05-02 13:40:49 +00:00
void TAnagrafica_magazzino : : ini2sheet ( TConfig & ini , TSheet_field & sheet )
{
switch ( sheet . dlg ( ) )
{
case F_SHEETGIAC :
case F_SHEETSTOMAG :
break ; // do nothing
default :
TRelation_application : : ini2sheet ( ini , sheet ) ;
}
}
void TAnagrafica_magazzino : : sheet2ini ( TSheet_field & sheet , TConfig & ini )
{
switch ( sheet . dlg ( ) )
{
case F_SHEETGIAC :
case F_SHEETSTOMAG :
break ; // do nothing
default :
TRelation_application : : sheet2ini ( sheet , ini ) ;
}
}
1997-05-23 14:46:41 +00:00
// ************************
//
1996-03-20 16:15:18 +00:00
int ve2400 ( int argc , char * argv [ ] )
{
1995-08-24 13:51:57 +00:00
TAnagrafica_magazzino a ;
1995-08-07 07:59:09 +00:00
1997-05-23 14:46:41 +00:00
a . run ( argc , argv , " Anagrafica di magazzino " ) ;
1995-08-07 07:59:09 +00:00
return 0 ;
}
1997-05-23 14:46:41 +00:00