2019-06-13 17:43:30 +02:00
# include <automask.h>
# include "applicat.h"
# include "f90100a.h"
# include "lffiles.h"
# include "isam.h"
# include "mov.h"
# include "f1lib.h"
# include "../fp/fplib.h"
2019-08-02 07:43:36 +02:00
# include "urldefid.h"
# include "f90100.h"
# include "progind.h"
2019-06-13 17:43:30 +02:00
2019-08-02 07:43:36 +02:00
SSimple_query & db ( )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
static SSimple_query * db = nullptr ;
if ( db = = nullptr )
{
db = new SSimple_query ( ) ;
set_connection ( * db ) ;
}
return * db ;
}
////////////////////////////////////////////////////////
// TEstrai_mask
////////////////////////////////////////////////////////
TEstrai_mask : : TEstrai_mask ( ) : TMask ( " Estrazione " , 1 , 60 , 10 ) , _dirty ( true )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
add_button_tool ( DLG_ELABORA , " Estrai " , TOOL_ELABORA ) ;
//add_button_tool(DLG_FINDREC, "Diagnostica", TOOL_PERMISSIONS);
//add_button_tool(DLG_NULL, "", 0);
//add_button_tool(DLG_EDIT, "Reset", TOOL_EDIT);
add_button_tool ( DLG_NULL , " " , 0 ) ;
add_button_tool ( DLG_QUIT , " Esci " , TOOL_QUIT ) ;
2019-06-13 17:43:30 +02:00
2019-08-02 07:43:36 +02:00
add_groupbox ( ES_DATEGROUP , 0 , " Inserire periodo per estrazione: " , 1 , 0 , 59 , 3 , " " ) ;
add_date ( ES_DATAINI , 0 , " dal " , 4 , 1 , " " ) ;
add_date ( ES_DATAEND , 0 , " al " , 33 , 1 , " " ) ;
add_groupbox ( ES_FLAGGROUP , 0 , " Selezionare tipo di estrazione: " , 1 , 3 , 28 , 3 , " " ) ;
add_list ( ES_FLAGPROV , 0 , " Flag provvisorio " , 2 , 4 , 1 , " " , " P|D " , " Provvisorio|Definitivo " ) ;
add_groupbox ( ES_TIPOGROUP , 0 , " Selezionare documenti da estrarre: " , 32 , 3 , 28 , 3 , " " ) ;
add_list ( ES_TIPODOC , 0 , " Tipi documento " , 33 , 4 , 1 , " " , " A|V|C " , " Acquisti|Vendite|Corrispettivi " ) ;
2019-06-13 17:43:30 +02:00
2019-08-02 07:43:36 +02:00
TMask : : set_handler ( DLG_ELABORA , estrai_handler ) ;
//TMask::set_handler(DLG_FINDREC, diagnostica_handler);
//TMask::set_handler(DLG_EDIT, enable_handler);
TMask : : set_handler ( ES_DATAINI , dataini_handler ) ;
TMask : : set_handler ( ES_DATAEND , dataend_handler ) ;
2019-06-13 17:43:30 +02:00
2019-08-02 07:43:36 +02:00
//TMask::enable(DLG_ELABORA, false);
//TMask::enable(DLG_EDIT, false);
2019-06-13 17:43:30 +02:00
2019-08-02 07:43:36 +02:00
TDate dt ( TODAY ) ; dt . set_day ( 1 ) ; dt . set_month ( 1 ) ;
# ifdef DBG
dt . set_year ( 2017 ) ;
# endif
set ( ES_DATAINI , dt ) ;
set ( ES_DATAEND , TDate ( TODAY ) ) ;
}
bool TEstrai_mask : : estrai_handler ( TMask_field & f , unsigned short key )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
auto & msk = ( TEstrai_mask & ) f . mask ( ) ; // this
descr_msk ( ) . run ( ) ;
msk . _descr . cut ( 0 ) < < descr_msk ( ) . get ( DES_TEXT ) ;
app ( ) . estrai ( ) ;
return true ;
}
void TEstrai_mask : : enable_fields ( bool en )
{
enable ( ES_DATAINI , en ) ;
enable ( ES_DATAEND , en ) ;
enable ( ES_FLAGPROV , en ) ;
enable ( ES_TIPODOC , en ) ;
//enable(DLG_ELABORA, !en);
//enable(DLG_FINDREC, en);
//enable(DLG_EDIT, !en);
}
bool TEstrai_mask : : enable_handler ( TMask_field & f , unsigned short key )
{
( ( TEstrai_mask & ) f . mask ( ) ) . enable_fields ( ) ;
return true ;
}
bool TEstrai_mask : : dataini_handler ( TMask_field & f , unsigned short key )
{
TMask & msk = f . mask ( ) ;
if ( key = = K_TAB )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
if ( msk . get ( ES_DATAINI ) . full ( ) & & msk . get ( ES_DATAEND ) . full ( ) & & msk . get_date ( ES_DATAINI ) > msk . get_date ( ES_DATAEND ) )
return f . error_box ( " La data di inizio non puo' essere maggiore di quella di fine " ) ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
//msk.enable(DLG_ELABORA, false);
return true ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
bool TEstrai_mask : : dataend_handler ( TMask_field & f , unsigned short key )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
TMask & msk = f . mask ( ) ;
if ( key = = K_TAB )
{
if ( msk . get ( ES_DATAINI ) . full ( ) & & msk . get ( ES_DATAEND ) . full ( ) & & msk . get_date ( ES_DATAINI ) > msk . get_date ( ES_DATAEND ) )
return f . error_box ( " La data di fine non puo' essere minore di quella di inizio " ) ;
}
//msk.enable(DLG_ELABORA, false);
return true ;
}
TMask & TEstrai_mask : : descr_msk ( )
{
static TMask * m = nullptr ;
if ( m = = nullptr )
{
m = new TMask ( " Estrazione " , 1 , 60 , 5 ) ;
m - > add_button_tool ( DLG_OK , " Conferma " , TOOL_OK ) ;
m - > add_groupbox ( DES_GROUP , 0 , " Inserire descrizione estrazione: " , 1 , 0 , 59 , 3 , " " ) ;
m - > add_string ( DES_TEXT , 0 , " Descrizione " , 4 , 1 , 250 , " " , 40 ) ;
}
return * m ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
////////////////////////////////////////////////////////
// TMonitor_mask
////////////////////////////////////////////////////////
bool TMonitor_mask : : save_conf_handler ( TMask_field & f , unsigned short key )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
TMask & m = f . mask ( ) ;
TF9_app & a = app ( ) ;
a . set_ambiente ( m . get ( CF_CODSOC ) ) ;
a . set_addr_doc ( m . get ( CF_ADDRDOC ) ) ;
if ( a . get_ambiente ( ) . full ( ) )
ini_set_string ( CONFIG_DITTA , " F9 " , AMBIENTE_F9 , a . get_ambiente ( ) ) ;
if ( a . get_addr_doc ( ) . full ( ) )
ini_set_string ( CONFIG_DITTA , " F9 " , ADDRCART_F9 , a . get_addr_doc ( ) ) ;
m . close ( ) ;
a . edit_wa ( ) ;
return true ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
void TMonitor_mask : : controllo_errori ( )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
bool TMonitor_mask : : on_key ( const KEY key )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
return true ;
}
2019-06-13 17:43:30 +02:00
2019-08-02 07:43:36 +02:00
void TMonitor_mask : : open_win_estr ( )
{
if ( ! app ( ) . get_ambiente ( ) . full ( ) )
warning_box ( " Inserire codice ambiente societa' in configurazione " ) ;
else app ( ) . run_estr_msk ( ) ;
}
2019-06-13 17:43:30 +02:00
2019-08-02 07:43:36 +02:00
void TMonitor_mask : : open_win_conf ( ) const
{
static TMask * m = nullptr ;
2019-06-13 17:43:30 +02:00
2019-08-02 07:43:36 +02:00
if ( m = = nullptr )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
m = new TMask ( " Configurazione Archiviazione Sostitutiva " , 1 , 60 , 10 ) ;
m - > add_button_tool ( DLG_OK , " Conferma " , TOOL_OK ) ;
m - > add_button_tool ( DLG_NULL , " " , 0 ) ;
m - > add_button_tool ( DLG_QUIT , " Esci " , TOOL_QUIT ) ;
m - > add_groupbox ( CF_CODGROUP , 0 , " Codice Ambiente Societa' (WEBAPP): " , 1 , 0 , 59 , 3 , " " ) ;
m - > add_string ( CF_CODSOC , 0 , " Codice ambiente " , 4 , 1 , 10 , " " , 10 ) ;
m - > add_groupbox ( CF_ADDRGROUP , 0 , " Indicare percorso documenti cartacei: " , 1 , 3 , 59 , 3 , " " ) ;
m - > add_string ( CF_ADDRDOC , 0 , " Percorso " , 2 , 4 , 256 , " " , 40 ) ;
m - > set_handler ( DLG_OK , save_conf_handler ) ;
m - > set ( CF_CODSOC , ini_get_string ( CONFIG_DITTA , PAR_MOD , AMBIENTE_F9 ) ) ;
m - > set ( CF_ADDRDOC , ini_get_string ( CONFIG_DITTA , PAR_MOD , ADDRCART_F9 ) ) ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
m - > run ( ) ;
}
2019-06-13 17:43:30 +02:00
2019-08-02 07:43:36 +02:00
bool TMonitor_mask : : on_field_event ( TOperable_field & o , TField_event e , long jolly )
{
switch ( o . dlg ( ) )
{
case DLG_ALL :
if ( e = = fe_button & & curr_page ( ) = = 1 )
//sel_all();
break ;
case DLG_ELABORA :
if ( e = = fe_button )
open_win_estr ( ) ;
break ;
case DLG_CONFIG :
if ( e = = fe_button )
open_win_conf ( ) ;
break ;
case DLG_FINDREC :
if ( e = = fe_button )
controllo_errori ( ) ;
default : break ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
return true ;
}
////////////////////////////////////////////////////////
// TF9_app
////////////////////////////////////////////////////////
void TF9_app : : edit_wa ( ) const
{
TString query ;
query < < " DELETE FROM F9WA00K WHERE true; " < <
" INSERT INTO F9WA00K (F9PCSOC, F9PPCDC0) VALUES ( " < < _ambiente < < " , " < < _addr_doc < < " ); " ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
void TF9_app : : load ( )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
const TDate dataini = get_dataini ( ) ;
const TDate dataend = get_dataend ( ) ;
const char tipodoc = get_tipodoc ( ) ;
const bool flagpro = is_provviso ( ) ;
2019-06-13 17:43:30 +02:00
TLocalisamfile mov ( LF_MOV ) ;
mov . setkey ( 2 ) ;
mov . put ( MOV_DATAREG , dataini ) ;
2019-08-02 07:43:36 +02:00
int items = 0 ;
for ( bool ok = mov . read ( ) ; ok & & mov . get_date ( MOV_DATAREG ) < = dataend ; ok = mov . next ( ) = = NOERR )
items + + ;
TProgress_monitor progr ( items , " Acquisizione movimenti " ) ;
2019-06-13 17:43:30 +02:00
int i = 0 ;
2019-08-02 07:43:36 +02:00
mov . zero ( ) ;
mov . setkey ( 2 ) ;
mov . put ( MOV_DATAREG , dataini ) ;
// Prendo tutti i movimenti a partire da una data e li carico tutti fino alla data finale
for ( bool ok = mov . read ( ) ; ok & & mov . get_date ( MOV_DATAREG ) < = dataend ; ok = mov . next ( ) = = NOERR )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
if ( ! progr . add_status ( ) )
break ;
const TipoIVA tipo = tipodoc = = ' V ' ? iva_vendite : iva_acquisti ;
// Se definitivo controllo il flag di stampato REGST
if ( mov . get_bool ( MOV_REGST ) ! = flagpro & & mov . get ( MOV_NUMDOC ) . full ( ) & & TCausale ( mov . get ( MOV_CODCAUS ) ) . reg ( ) . iva ( ) = = tipo )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
TToken_string t ( " " , ' | ' ) ;
t . add ( " " ) ;
t . add ( mov . get ( MOV_NUMREG ) ) ;
t . add ( mov . get ( MOV_DATAREG ) ) ;
t . add ( mov . get ( MOV_DATADOC ) ) ;
t . add ( mov . get ( MOV_CODCAUS ) ) ;
t . add ( mov . get ( MOV_MESELIQ ) ) ;
t . add ( mov . get ( MOV_NUMDOC ) ) ;
t . add ( mov . get ( MOV_PROTIVA ) ) ;
t . add ( mov . get ( MOV_DESCR ) ) ;
_movs . insert ( _movs . end ( ) , t ) ;
2019-06-13 17:43:30 +02:00
i + + ;
}
}
2019-08-02 07:43:36 +02:00
_tot_movs = i ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
const char * TF9_app : : traduci_stato ( const TString & cod )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
static TString stato ;
static TString last_cod ;
if ( last_cod ! = cod )
{
last_cod = cod ;
stato . cut ( 0 ) ;
if ( cod = = " 01 " )
stato < < " in diagnostica " ; // Deprecated
else if ( cod = = " 02 " )
stato < < " err. diagnostica " ;
else if ( cod = = " 03 " )
stato < < " diagnostica ok " ;
else if ( cod = = " 04 " )
stato < < " controllo WA " ;
else if ( cod = = " 05 " )
stato < < " err. diagn. WA " ;
else if ( cod = = " 06 " )
stato < < " diagn. WA OK " ;
else if ( cod = = " 07 " )
stato < < " in elab. sost. " ;
else if ( cod = = " 08 " )
stato < < " err. diag. sost. " ;
else if ( cod = = " 09 " )
stato < < " Archiviato " ;
}
return ( const char * ) stato ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
void TF9_app : : fill ( )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
_ambiente = ini_get_string ( CONFIG_DITTA , PAR_MOD , AMBIENTE_F9 ) ;
_addr_doc = ini_get_string ( CONFIG_DITTA , PAR_MOD , ADDRCART_F9 ) ;
TString query ;
query < < " SELECT * FROM F9DRD00K ORDER BY " < < DRD_TIME < < " ; " ;
db ( ) . sq_set_exec ( query , false ) ;
TSheet_field & sf = _msk - > sfield ( S_ELAB ) ;
sf . hide ( ) ;
int i = 0 ;
for ( bool ok = db ( ) . sq_next ( ) ; ok ; ok = db ( ) . sq_next ( ) )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
TString tipo ;
TToken_string & row = sf . row ( i + + ) ;
row . add ( db ( ) . sq_get ( DRD_STATO ) = = " 09 " ? " X " : " " ) ;
row . add ( db ( ) . sq_get ( DRD_ID_EST ) ) ;
row . add ( db ( ) . sq_get_date ( DRD_TIME ) ) ;
row . add ( db ( ) . sq_get ( DRD_FLAG_PD ) = = " P " ? " X " : " " ) ;
tipo < < db ( ) . sq_get ( DRD_TIPODOC ) ;
if ( tipo = = " A " ) tipo < < " cquisti " ;
if ( tipo = = " V " ) tipo < < " endite " ;
if ( tipo = = " C " ) tipo < < " orrispettivi " ;
row . add ( tipo ) ;
row . add ( db ( ) . sq_get_date ( DRD_DATADA ) ) ;
row . add ( db ( ) . sq_get_date ( DRD_DATAA ) ) ;
row . add ( db ( ) . sq_get ( DRD_UTENTE ) ) ;
row . add ( traduci_stato ( db ( ) . sq_get ( DRD_STATO ) ) ) ;
row . add ( db ( ) . sq_get ( DRD_DESC ) ) ;
if ( TDate ( row . get ( cid2index ( F_DATAESTR ) ) ) = = TDate ( TODAY ) )
{
if ( TString ( row . get ( cid2index ( F_PROV_B ) ) ) = = " X " )
_last_estr_p = real ( TString ( row . get ( cid2index ( F_IDESTR ) ) ) . ltrim ( 9 ) ) . integer ( ) ;
else
_last_estr_d = real ( TString ( row . get ( cid2index ( F_IDESTR ) ) ) . ltrim ( 9 ) ) . integer ( ) ;
}
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
sf . force_update ( ) ;
sf . show ( ) ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
state_fppro TF9_app : : check_fppro ( int numreg ) const
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
TLocalisamfile mov ( LF_MOV ) ;
mov . put ( MOV_NUMREG , numreg ) ;
if ( mov . read ( ) = = NOERR & & check_causale ( mov . get ( MOV_CODCAUS ) ) )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
// Controllo se ho i riferimenti all'FPPRO e verifico che sia tutto ok
const TString & keys_fppro = mov . get ( MOV_KEYFPPRO ) ;
if ( keys_fppro . full ( ) )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
TToken_string keys ( keys_fppro , ' ; ' ) ;
if ( fppro_db ( ) . check_reg ( keys , numreg ) )
return correct ;
return reg_with_err ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
else // Se non ho i riferimenti faccio guessing
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
if ( fppro_db ( ) . guess_the_doc ( mov ) )
return guessed ;
return no_guessed ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
}
return not_fa ;
}
// Controlla lo stato delle fatture e per le fatt. acquisto non collegate a fppro cerca di agganciarle
const char * TF9_app : : check_stato ( TipoIVA tipo )
{
bool ok = true ;
if ( tipo = = iva_acquisti )
{
TProgress_monitor bar ( _movs . size ( ) , " Controllo stato movimenti di acquisto " ) ;
// Controlli per le fatture di acquisto
for ( auto it = _movs . begin ( ) ; it ! = _movs . end ( ) ; + + it )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
if ( ! bar . add_status ( ) )
break ;
TToken_string & row = * it ;
const int numreg = row . get_int ( cid2index ( F_NUMREG ) ) ;
switch ( app ( ) . check_fppro ( numreg ) )
{
case guessed :
ok & = fppro_db ( ) . associa_mov ( numreg ) ;
//row.add(fppro_db().get_keys_fppro());
case correct :
ok & = true ;
break ;
case not_fa :
case reg_with_err :
case no_guessed :
ok & = false ;
row . add ( " X " , 0 ) ; // Mi segno il movimento che ha un problema
default : break ;
}
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
}
else if ( tipo = = iva_vendite ) {
for ( auto it = _movs . begin ( ) ; it ! = _movs . end ( ) ; + + it )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
// Controlli per le fatture di vendita
2019-06-13 17:43:30 +02:00
}
}
2019-08-02 07:43:36 +02:00
return ok ? D_GEST_OK : D_GEST_ERR ;
}
TString TF9_app : : next_estr_today ( const char tipo ) const
{
char estr [ ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ;
if ( tipo = = ' P ' )
sprintf_s ( estr , 10 , " %09d " , _last_estr_p + 1 ) ;
else
sprintf_s ( estr , 10 , " %09d " , _last_estr_d + 1 ) ;
return estr ;
}
2019-06-13 17:43:30 +02:00
2019-08-02 07:43:36 +02:00
bool TF9_app : : check_periodo_def ( const drd & head )
{
TString query ;
// Controllo se ci sono estrazioni (definitive) che si sovrappongono di periodo (con lo stesso tipo) e che non siano in stato di errore
// Nel caso di stato di errore e' invece possibile la ri-estrazione
query < < " SELECT * \n FROM F9DRD00K \n " < <
" WHERE ' " < < head . dal . date2ansi ( ) < < " ' =< " < < DRD_DATAA < < " AND ' " < < head . al . date2ansi ( ) < < " ' >= " < < DRD_DATADA < < " AND " < <
DRD_FLAG_PD < < " = 'D' AND \n F9RIDAS <> '02' AND F9RIDAS <> '05' AND F9RIDAS <> '08' AND " < < DRD_TIPODOC < < " = ' " < < head . tipo_doc < < " '; " ;
db ( ) . sq_set_exec ( query ) ;
return db ( ) . sq_items ( ) = = 0 ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
bool TF9_app : : esporta ( )
{
const bool ok = new_extr ( ) ;
fill ( ) ;
return ok ;
}
2019-06-13 17:43:30 +02:00
2019-08-02 07:43:36 +02:00
TString & TF9_app : : drd_attr ( )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
static TString attr ;
attr . cut ( 0 ) < < DRD_CODSOC < < " , " < < DRD_ID_EST < < " , " < < DRD_FLAG_PD < < " , " < < DRD_DESC < <
" , " < < DRD_TIPODOC < < " , " < < DRD_DATADA < < " , " < < DRD_DATAA < < " , " < < DRD_UTENTE < < " , " < < DRD_TIME < < " , " < <
DRD_STATO < < " , " < < DRD_PERC ;
return attr ;
}
2019-06-13 17:43:30 +02:00
2019-08-02 07:43:36 +02:00
TString & TF9_app : : drd_tovalues ( ) const
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
static TString str ;
return str . cut ( 0 ) < < " ' " < < _head . cod_soc < < " ', ' " < < _head . id_estr < < " ', ' " < < ( _head . flag_prov ? " P " : " D " ) < < " ', ' " < < _head . descr < <
" ', ' " < < _head . tipo_doc < < " ', ' " < < _head . dal . date2ansi ( ) < < " ', ' " < < _head . al . date2ansi ( ) < < " ', ' " < < _head . user < < " ', CURRENT_TIMESTAMP, ' " < <
_head . stato_estr < < " ', ' " < < _head . addr_cart < < " ' " ;
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
auto TF9_app : : new_extr ( ) - > bool
{
TString query ;
query < < " INSERT INTO " < < F9_DRD < < " ( " < < drd_attr ( ) < < " ) \n VALUES ( " < < drd_tovalues ( ) < < " ); " ;
bool ok = db ( ) . sq_set_exec ( query ) ;
ok = ok & & db ( ) . sq_commit ( ) ;
return ok ;
}
int TF9_app : : estrai ( )
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
// Acquisisco i movimenti
load ( ) ;
if ( _movs . empty ( ) )
{
warning_box ( " Non esistono movimenti estraibili per il periodo selezionato. " ) ;
return - 1 ;
}
const char tipo = _estr_msk - > get ( ES_FLAGPROV ) [ 0 ] ;
_head . flag_prov = is_provviso ( ) ;
_head . dal = get_dataini ( ) ;
_head . al = get_dataend ( ) ;
_head . tipo_doc = get_tipodoc ( ) ;
if ( ! _head . flag_prov ) // Se estrazione definitiva controllo il periodo che non si sovrapponga alle altre estrazioni def.
2019-06-13 17:43:30 +02:00
{
2019-08-02 07:43:36 +02:00
if ( ! check_periodo_def ( _head ) )
{
error_box ( " Attenzione e' stato inserito un periodo che si sovrappone \n ad un'estrazione definitiva gia' esistente. " ) ;
return - 1 ;
}
2019-06-13 17:43:30 +02:00
}
2019-08-02 07:43:36 +02:00
_head . cod_soc = _ambiente ;
_head . id_estr . cut ( 0 ) < < TDate ( TODAY ) . date2ansi ( ) < < _estr_msk - > get ( ES_FLAGPROV ) < < next_estr_today ( tipo ) ;
_head . descr = get_descr ( ) ;
_head . user = user ( ) ;
_head . flag_prov = is_provviso ( ) ;
_head . addr_cart = _addr_doc ;
_head . stato_estr = check_stato ( get_tipoiva ( ) ) ;
const bool ok = esporta ( ) ;
if ( _head . stato_estr )
warning_box ( " Attenzione l'estrazione ha prodotto degli errori. \n Controllare e correggere eventuali problemi \n premendo il pulsante 'Controllo Estr.' " ) ;
_msk - > enable ( DLG_FINDREC , ok ) ;
return ok ? 1 : false ;
}
void TF9_app : : main_loop ( )
{
_msk = new TMonitor_mask ( ) ;
_estr_msk = new TEstrai_mask ( ) ;
fill ( ) ;
while ( _msk - > run ( ) = = K_ENTER ) { }
delete _msk ;
delete _estr_msk ;
}
TF9_app & app ( )
{
static TF9_app * app = nullptr ;
if ( app = = nullptr )
app = ( TF9_app * ) & main_app ( ) ;
return * app ;
2019-06-13 17:43:30 +02:00
}
int f90100 ( int argc , char * argv [ ] )
{
TF9_app app ;
app . run ( argc , argv , TR ( " Configurazione FP " ) ) ;
return 0 ;
}