2019-02-08 17:18:16 +01:00
/////////////////////////////////////////////////////////////////////////////////////
// TPassive_mask
/////////////////////////////////////////////////////////////////////////////////////
# include "defmask.h"
# include "automask.h"
# include "applicat.h"
# include <progind.h>
# include "tsdb.h"
# include "fp0400a.h"
# include "fplib.h"
2019-02-14 22:56:23 +01:00
# include "sheet.h"
2019-02-22 15:14:05 +01:00
# include "execp.h"
# include "dongle.h"
2019-02-08 17:18:16 +01:00
2019-02-13 17:29:08 +01:00
enum
{
2019-02-22 15:14:05 +01:00
no_cf = - 14 , // Non trovato con cod. fisc. (se non ho nemmeno la p.iva)
2019-02-13 17:29:08 +01:00
no_match_cf = - 15 , // Trovato forn. ma il cod. fisc non corrisponde
2019-02-22 15:14:05 +01:00
no_forn = - 5 , // Non trovato forn. con p.iva
2019-02-13 17:29:08 +01:00
err_match_db = - 3 , // Salvato in db ma non corrisponde a un fornitore
2019-02-22 15:14:05 +01:00
saved_db = 0 , // Salvato già in db FPPRO
2019-02-13 17:29:08 +01:00
found_piva = 2 , // Lo trovo con p.iva
found_cf = 4 , // Non ho p.iva lo trovo con cod.fisc
} ;
2019-02-14 22:56:23 +01:00
enum { filtri = 0 , elenco_fe = 1 , elenco_err = 2 } ; // Enum per bottoni toolbar (numero pagina in cui mi trovo)
2019-02-08 17:18:16 +01:00
class TPassive_mask : public TAutomask
{
protected :
void set_filter_changed ( ) ;
2019-02-14 22:56:23 +01:00
void select_all ( int sheet_field ) ;
2019-02-22 15:14:05 +01:00
// Tasto nuovo: apre nuovo fornitore valorizzando già i dati dalla fattura
void new_forn ( ) ;
// Tasto aggiorna: aggiorna cliente che non corrisponde.
void aggiorna_forn ( ) ;
2019-02-08 17:18:16 +01:00
bool on_field_event ( TOperable_field & o , TField_event e , long jolly ) override ;
void next_page ( int p ) override ;
2019-02-14 22:56:23 +01:00
// Elenco dei protocolli selezionati
void elenco_prots_sel ( TString & string ) const ;
2019-02-08 17:18:16 +01:00
void fill ( ) ;
2019-02-13 17:29:08 +01:00
static int find_fornitore ( TLocalisamfile & clifo ) ;
static void add_row_err_forn ( int forn_code , TSheet_field & sf_err , TString & denom ) ;
2019-02-22 15:14:05 +01:00
void aggiungi_riga ( TLocalisamfile & clifo , TSheet_field & sf , TSheet_field & sf_err ) ;
// Aggiunge i protocolli che sono già presenti per le fatture nel db alla tabellina per il filtro
2019-02-14 22:56:23 +01:00
void aggiungi_prot ( ) const ;
2019-02-08 17:18:16 +01:00
void init ( ) ;
void load_all_fields ( ) ;
2019-02-22 15:14:05 +01:00
TToken_string _forn_code ;
TToken_string _list_fatt_err ;
2019-02-08 17:18:16 +01:00
bool _filter_changed ;
2019-02-22 15:14:05 +01:00
void salva_for ( ) const ;
2019-02-08 17:18:16 +01:00
public :
void save_all_fields ( ) const ;
TPassive_mask ( ) : TAutomask ( " fp0400a " ) , _filter_changed ( true )
{
load_all_fields ( ) ;
2019-02-22 15:14:05 +01:00
_forn_code = " " ;
_forn_code . separator ( ' | ' ) ;
_list_fatt_err = " " ;
_list_fatt_err . separator ( ' | ' ) ;
2019-02-08 17:18:16 +01:00
}
} ;
void TPassive_mask : : set_filter_changed ( )
{
_filter_changed = true ;
}
void TPassive_mask : : next_page ( int p )
{
//if(true)
if ( _filter_changed & & p ! = 1000 )
{
fill ( ) ;
_filter_changed = false ;
}
TAutomask : : next_page ( p ) ;
}
void TPassive_mask : : fill ( )
{
2019-02-13 17:29:08 +01:00
TSheet_field & sf = sfield ( F_DOCS ) ;
TSheet_field & sf_err = sfield ( F_ERR ) ;
TString query ;
2019-02-15 10:58:17 +01:00
TString prots_query ;
2019-02-13 17:29:08 +01:00
TLocalisamfile clifo ( LF_CLIFO ) ;
2019-02-08 17:18:16 +01:00
2019-02-13 17:29:08 +01:00
const TDate dal = get ( F_DATAINI ) ;
const TDate al = get ( F_DATAEND ) ;
2019-02-08 17:18:16 +01:00
2019-02-13 17:29:08 +01:00
sf . hide ( ) ;
sf . destroy ( ) ;
sf_err . hide ( ) ;
sf_err . destroy ( ) ;
2019-02-14 22:56:23 +01:00
2019-02-15 10:58:17 +01:00
elenco_prots_sel ( prots_query ) ;
2019-02-14 22:56:23 +01:00
query < < " SELECT PZ_TIPOPROT AS TIPO_PROT, YEAR(P7_DATA) AS ANNO, P7_TIPODOC AS [TIPO_SDI], P7_NUMERO AS [NUM_DOC], " < <
2019-02-13 17:29:08 +01:00
" P7_DATA AS [DATA_DOC], PQ_IMPTOTDOC AS [TOT_DOC], P2_ANADENOMIN AS [RAG_SOC], P2_ANANOME AS NOME, " < <
" P2_ANACOGNOME AS COGNOME, P2_FISCIVACOD AS [P_IVA], P2_CODFISCALE AS [COD_FISC], P2_FISCIVAPAESE AS [COD_PAESE], \n " < <
" COUNT(PP_ATTACHMENT) AS ATTACHMENT, P1_CODDEST AS [COD_SDI], PU_PEC AS PEC, P1_KEYPRGINVIO AS KEYPROG, P1_KEYHEADERFATT AS KEYHEAD, P1_KEYBODYFATT AS KEYFATT, " < <
" PZ_TIPOPROT AS [TIPO_PROT], PZ_NUMPROT AS [NUM_PROT], PZ_ANNOPROT AS [ANNO_PROT], PZ_TIPOCF AS [TIPO_CF], PZ_CLIFOR AS [COD_CLIFOR] \n " < <
2019-02-08 17:18:16 +01:00
" FROM PAA0100F PAA01 \n " < <
" JOIN PAA0200F PAA02 ON P1_KEYPRGINVIO = P2_KEYPRGINVIO and P1_KEYHEADERFATT = P2_KEYHEADERFATT and P1_KEYBODYFATT = P2_KEYBODYFATT \n " < <
" JOIN PAA0700F PAA07 ON P1_KEYPRGINVIO = P7_KEYPRGINVIO and P1_KEYHEADERFATT = P7_KEYHEADERFATT and P1_KEYBODYFATT = P7_KEYBODYFATT \n " < <
" JOIN PAA2700F PAA27 ON P1_KEYPRGINVIO = PQ_KEYPRGINVIO and P1_KEYHEADERFATT = PQ_KEYHEADERFATT and P1_KEYBODYFATT = PQ_KEYBODYFATT \n " < <
" LEFT JOIN PAA2600F PAA26 ON P1_KEYPRGINVIO = PP_KEYPRGINVIO and P1_KEYHEADERFATT = PP_KEYHEADERFATT and P1_KEYBODYFATT = PP_KEYBODYFATT \n " < <
2019-02-13 17:29:08 +01:00
" LEFT JOIN PAA3200F PAA32 ON P1_KEYPRGINVIO = PU_KEYPRGINVIO and P1_KEYHEADERFATT = PU_KEYHEADERFATT and P1_KEYBODYFATT = PU_KEYBODYFATT \n " < <
" LEFT JOIN FPPRO00F FPPRO ON P1_KEYPRGINVIO = PZ_KEYPRGINVIO and P1_KEYHEADERFATT = PZ_KEYHEADERFATT and P1_KEYBODYFATT = PZ_KEYBODYFATT \n " < <
2019-02-15 10:58:17 +01:00
" WHERE P7_DATA >= \' " < < dal . date2ansi ( ) < < " \' AND P7_DATA <= \' " < < al . date2ansi ( ) < < " \' " < < prots_query < < " \n " < <
2019-02-13 17:29:08 +01:00
" GROUP BY YEAR(P7_DATA), P7_TIPODOC, P7_NUMERO, P7_DATA, PQ_IMPTOTDOC, P2_ANADENOMIN, P2_ANANOME, P2_ANACOGNOME, P2_FISCIVACOD, P2_CODFISCALE, P2_FISCIVAPAESE, \n " < <
2019-02-15 11:33:17 +01:00
" P1_CODDEST, PU_PEC, P1_KEYPRGINVIO, P1_KEYHEADERFATT, P1_KEYBODYFATT, PZ_TIPOPROT, PZ_NUMPROT, PZ_ANNOPROT, PZ_TIPOCF, PZ_CLIFOR \n " < <
" ORDER BY PZ_ANNOPROT DESC, PZ_TIPOPROT ASC, PZ_NUMPROT DESC " ;
2019-02-08 17:18:16 +01:00
fp_db ( ) . sq_set_exec ( query , false ) ;
2019-02-22 15:14:05 +01:00
_forn_code = " " ;
_list_fatt_err = " " ;
2019-02-08 17:18:16 +01:00
while ( fp_db ( ) . sq_next ( ) )
{
2019-02-13 17:29:08 +01:00
aggiungi_riga ( clifo , sf , sf_err ) ;
}
sf . force_update ( ) ;
sf . show ( ) ;
sf_err . force_update ( ) ;
sf_err . show ( ) ;
}
2019-02-14 22:56:23 +01:00
void TPassive_mask : : elenco_prots_sel ( TString & string ) const
{
TString_array elenco ;
TSheet_field & sf = sfield ( F_PROT ) ;
2019-02-15 10:58:17 +01:00
string < < " AND PZ_TIPOPROT IN ( " ;
2019-02-14 22:56:23 +01:00
FOR_EACH_SHEET_ROW ( sf , nr , row )
{
if ( * row - > get ( 0 ) = = ' X ' )
elenco . add ( row - > get ( ) ) ;
}
2019-02-22 15:14:05 +01:00
// Creo una stringa da aggiungere alla query per la ricerca col codice protocollo, così fatta:
2019-02-15 11:33:17 +01:00
// " AND PZ_TIPOPROT IN ('a', 'b', 'c')". (con elenco avente "a", "b" e "c" come stringhe)
2019-02-14 22:56:23 +01:00
if ( elenco . items ( ) > 0 )
{
for ( int i = 0 ; i < elenco . items ( ) - 1 ; i + + )
string < < " \' " < < elenco . row ( i ) < < " \' , " ;
2019-02-15 11:33:17 +01:00
string < < " \' " < < elenco . row ( elenco . items ( ) - 1 ) < < " \' ) " ;
2019-02-14 22:56:23 +01:00
}
else
2019-02-15 10:58:17 +01:00
string = " " ;
2019-02-14 22:56:23 +01:00
}
2019-02-13 17:29:08 +01:00
void TPassive_mask : : aggiungi_riga ( TLocalisamfile & clifo , TSheet_field & sf , TSheet_field & sf_err )
{
int forn_code = - 1 ;
TString denom = fp_db ( ) . sq_get ( " RAG_SOC " ) ;
const TString paa_codfisc = fp_db ( ) . sq_get ( " COD_FISC " ) ;
const TString paa_piva = fp_db ( ) . sq_get ( " P_IVA " ) ;
const TString paa_codpaese = fp_db ( ) . sq_get ( " COD_PAESE " ) ;
const TString paa_codsdi = fp_db ( ) . sq_get ( " COD_SDI " ) ;
2019-02-25 12:42:51 +01:00
TString prot = fp_db ( ) . sq_get ( " TIPO_PROT " ) ;
2019-02-13 17:29:08 +01:00
TToken_string & row = sf . row ( - 1 ) ;
clifo . zero ( ) ;
clifo . put ( CLI_TIPOCF , ' F ' ) ;
if ( denom . blank ( ) ) {
denom = fp_db ( ) . sq_get ( " NOME " ) ;
denom < < " " < < fp_db ( ) . sq_get ( " COGNOME " ) ;
}
denom . cut ( 50 ) ;
row . add ( fp_db ( ) . sq_get_int ( " ANNO " ) , 1 ) ;
row . add ( fp_db ( ) . sq_get ( " TIPO_SDI " ) ) ;
row . add ( fp_db ( ) . sq_get ( " NUM_DOC " ) ) ;
2019-02-25 12:42:51 +01:00
// Trasformo formato data da yyyy-mm-gg a italiano
TDate date_t ( fp_db ( ) . sq_get_date ( " DATA_DOC " ) ) ;
2019-02-25 16:02:34 +01:00
row . add ( date_t ) ;
2019-02-13 17:29:08 +01:00
row . add ( fp_db ( ) . sq_get ( " TOT_DOC " ) ) ;
2019-02-08 17:18:16 +01:00
2019-02-15 10:58:17 +01:00
// Dopo aver fatto le ricerche se lo trovo lo segno e lo aggiungo, se no coloro la cella
2019-02-13 17:29:08 +01:00
forn_code = find_fornitore ( clifo ) ;
2019-02-22 15:14:05 +01:00
TString forn_str ; forn_str < < forn_code ;
TString nr_row ; nr_row < < sf . items ( ) ;
_forn_code . add ( forn_str ) ;
_list_fatt_err . add ( nr_row ) ;
2019-02-15 10:58:17 +01:00
if ( forn_code = = 0 ) row . add ( " X " ) ;
else row . add ( " " ) ;
2019-02-08 17:18:16 +01:00
2019-02-13 17:29:08 +01:00
if ( forn_code > = 0 )
{
row . add ( clifo . get ( CLI_CODCF ) ) ;
row . add ( clifo . get ( CLI_RAGSOC ) ) ;
}
else
{
//sf.set_back_and_fore_color(COLOR_RED, COLOR_WHITE, 2, sf.cid2index(S_FORNITORE));
//sf.set_back_and_fore_color(COLOR_RED, COLOR_WHITE, 2, sf.cid2index(S_RAGSOC));
add_row_err_forn ( forn_code , sf_err , denom ) ;
}
2019-02-08 17:18:16 +01:00
2019-02-13 17:29:08 +01:00
row . add ( paa_codpaese , sf . cid2index ( S_STATOPAIV ) ) ;
row . add ( paa_piva ) ;
row . add ( paa_codfisc ) ;
2019-02-15 10:58:17 +01:00
row . add ( fp_db ( ) . sq_get ( " ATTACHMENT " ) ! = " 0 " ? " " : " X " ) ;
2019-02-13 17:29:08 +01:00
row . add ( paa_codsdi . blank ( ) ? fp_db ( ) . sq_get ( " PEC " ) : paa_codsdi ) ;
row . add ( denom ) ;
2019-02-15 10:58:17 +01:00
row . add ( fp_db ( ) . sq_get ( " ANNO_PROT " ) < < ( prot . empty ( ) ? " " : " - " ) < < prot < < " / " < < fp_db ( ) . sq_get ( " NUM_PROT " ) < < ( prot . empty ( ) ? " (no prot.) " : " " ) ) ;
2019-02-13 17:29:08 +01:00
TString key_prot ; key_prot < < fp_db ( ) . sq_get ( " KEYPROG " ) < < " ; " < < fp_db ( ) . sq_get ( " KEYHEAD " ) < < " ; " < < fp_db ( ) . sq_get ( " KEYFATT " ) ;
row . add ( key_prot ) ;
}
2019-02-08 17:18:16 +01:00
2019-02-14 22:56:23 +01:00
void TPassive_mask : : aggiungi_prot ( ) const
{
TSheet_field & sf_prot = sfield ( F_PROT ) ;
TString query = " " ;
2019-02-15 10:58:17 +01:00
TString prot = " " ;
2019-02-14 22:56:23 +01:00
query < < " SELECT DISTINCT(PZ_TIPOPROT) AS TIPO_PROT \n FROM FPPRO00F " ;
fp_db ( ) . sq_set_exec ( query , false ) ;
while ( fp_db ( ) . sq_next ( ) )
{
TToken_string & row = sf_prot . row ( sf_prot . items ( ) + 1 ) ;
2019-02-15 10:58:17 +01:00
prot = fp_db ( ) . sq_get ( " TIPO_PROT " ) ;
2019-02-14 22:56:23 +01:00
row . add ( " " , 0 ) ;
2019-02-15 10:58:17 +01:00
row . add ( prot . empty ( ) ? " no-prot. " : prot ) ;
2019-02-14 22:56:23 +01:00
}
sf_prot . force_update ( ) ;
}
2019-02-13 17:29:08 +01:00
void TPassive_mask : : add_row_err_forn ( int forn_code , TSheet_field & sf_err , TString & denom )
{
TToken_string & row_err = sf_err . row ( - 1 ) ;
2019-02-22 15:14:05 +01:00
row_err . add ( fp_db ( ) . sq_get ( " COD_PAESE " ) , 1 ) ;
2019-02-13 17:29:08 +01:00
row_err . add ( fp_db ( ) . sq_get ( " P_IVA " ) ) ;
row_err . add ( fp_db ( ) . sq_get ( " COD_FISC " ) ) ;
row_err . add ( denom ) ;
switch ( forn_code ) {
case err_match_db :
2019-02-22 15:14:05 +01:00
row_err . add ( " Salvato in database ma non corrisponde a un fornitore codificato. (Nuovo fornitore disabilitato) " ) ;
2019-02-13 17:29:08 +01:00
break ;
case no_forn :
2019-02-15 11:33:17 +01:00
row_err . add ( " Non trovato fornitore per la P.IVA. " ) ;
2019-02-13 17:29:08 +01:00
break ;
case no_match_cf :
2019-02-22 15:14:05 +01:00
row_err . add ( " Trovato fornitore ma il codice fiscale non corrisponde. Aggiornare? " ) ;
2019-02-13 17:29:08 +01:00
break ;
case no_cf :
2019-02-15 11:33:17 +01:00
row_err . add ( " Fornitore senza P. IVA, non trovato il codice fiscale " ) ;
2019-02-13 17:29:08 +01:00
break ;
default :
row_err . add ( " Errore durante identificazione fornitore. " ) ;
break ;
}
}
int TPassive_mask : : find_fornitore ( TLocalisamfile & clifo )
{
TString paa_codfisc = fp_db ( ) . sq_get ( " COD_FISC " ) ;
2019-02-15 11:33:17 +01:00
const TString paa_piva = fp_db ( ) . sq_get ( " P_IVA " ) ;
2019-02-13 17:29:08 +01:00
TString paa_codpaese = fp_db ( ) . sq_get ( " COD_PAESE " ) ;
const TString fppro_tipocf = fp_db ( ) . sq_get ( " TIPO_CF " ) ;
TString fppro_codcf = fp_db ( ) . sq_get ( " COD_CLIFOR " ) ;
2019-02-22 15:14:05 +01:00
// Cerco se il fornitore è presente in Campo
2019-02-13 17:29:08 +01:00
int found_clifo = - 1 ;
if ( fppro_codcf = = " 17 " )
bool simo = true ;
TString piva ;
2019-02-22 15:14:05 +01:00
// Leggo dall FPPRO se è già stato salvato il fornitore
// Se è già salvato nell FPPRO ricerco in Campo col codice fornitore (chiave 1)
2019-02-13 17:29:08 +01:00
if ( fppro_tipocf = = " F " & & ! fppro_codcf . blank ( ) )
{
clifo . setkey ( 1 ) ;
clifo . put ( CLI_CODCF , fppro_codcf ) ;
// Se trovo dall FPPRO setto a 0
clifo . read ( ) = = NOERR ? found_clifo = 0 : found_clifo = - 3 ;
}
2019-02-22 15:14:05 +01:00
else if ( paa_codpaese . full ( ) & & ( piva = paa_piva ) . full ( ) ) // Se non c'è nell FPPRO ricerco con chiave 5
2019-02-13 17:29:08 +01:00
{
if ( piva = = " 01903590154 " )
bool simo = true ;
clifo . setkey ( 5 ) ;
clifo . put ( CLI_STATOPAIV , paa_codpaese ) ;
clifo . put ( CLI_PAIV , paa_piva ) ;
clifo . read ( ) = = NOERR ? found_clifo = 2 : found_clifo = - 1 ; // Se trovo con partita iva setto a 2
if ( found_clifo ! = 2 & & paa_codpaese = = " IT " ) // Se non l'ho trovato potrebbe essere italiano e ha codice paese blank
2019-02-08 17:18:16 +01:00
{
2019-02-13 17:29:08 +01:00
clifo . put ( CLI_PAIV , paa_piva ) ;
clifo . put ( CLI_STATOPAIV , " " ) ;
clifo . read ( ) = = NOERR ? found_clifo = 2 : found_clifo = - 5 ; // Se trovo con partita iva setto a 2
2019-02-08 17:18:16 +01:00
}
2019-02-22 15:14:05 +01:00
// Se trovo con p.iva controllo il cod. fisc. e, se c'è da db e se c'è in clienti-fornitori, altrimenti vado avanti
2019-02-13 17:29:08 +01:00
if ( found_clifo = = 2 & & paa_codfisc . full ( ) & & clifo . get ( CLI_COFI ) . full ( ) )
2019-02-08 17:18:16 +01:00
{
2019-02-22 15:14:05 +01:00
if ( clifo . get ( CLI_COFI ) = = paa_codfisc ) // Controllo che il cod fisc (se c'è) corrisponda
2019-02-13 17:29:08 +01:00
found_clifo = 2 ;
else
found_clifo = - 15 ;
2019-02-08 17:18:16 +01:00
}
}
2019-02-13 17:29:08 +01:00
// Altrimenti lo cerco con chiave 4, se ho il codice fiscale o ho il cod fisc e l'ho trovato con p iva
else if ( paa_codfisc . full ( ) )
{
clifo . setkey ( 4 ) ;
clifo . put ( CLI_COFI , paa_codfisc ) ;
clifo . read ( ) = = NOERR ? found_clifo = 4 : found_clifo = - 14 ; // Se il cod fisc corrisponde setto a 2
}
return found_clifo ;
2019-02-08 17:18:16 +01:00
}
void TPassive_mask : : init ( )
{
2019-02-14 22:56:23 +01:00
aggiungi_prot ( ) ;
2019-02-08 17:18:16 +01:00
}
void TPassive_mask : : load_all_fields ( )
{
}
2019-02-14 22:56:23 +01:00
void TPassive_mask : : select_all ( int sheet_field )
{
TSheet_field & docs = sfield ( sheet_field ) ;
TString_array & sht = docs . rows_array ( ) ;
const int items = sht . items ( ) ;
if ( items > 0 )
{
const TString4 select = * sht . row ( 0 ) . get ( 0 ) = = ' X ' ? " " : " X " ;
for ( int i = 0 ; i < items ; i + + )
sht . row ( i ) . add ( select , 0 ) ;
docs . force_update ( ) ;
}
}
2019-02-22 15:14:05 +01:00
void TPassive_mask : : salva_for ( ) const
2019-02-13 17:29:08 +01:00
{
if ( fp_db ( ) . sq_is_connect ( ) )
{
TString q_update ; // Query per update
TSheet_field & sf = sfield ( F_DOCS ) ;
TLocalisamfile clifo ( LF_CLIFO ) ; // Leggo in Campo per controllare che il codice cliente non sia errato
FOR_EACH_SHEET_ROW ( sf , nr , row )
{
if ( row - > starts_with ( " X " ) & & strcmp ( clifo . get ( CLI_CODCF ) , " 17 " ) = = 0 )
bool simo = true ;
TString cod_forn = row - > get ( sf . cid2index ( S_FORNITORE ) ) ;
if ( row - > starts_with ( " X " ) & & cod_forn ! = " " )
{
clifo . zero ( ) ;
clifo . setkey ( 1 ) ;
clifo . put ( CLI_TIPOCF , " F " ) ;
clifo . put ( CLI_CODCF , cod_forn ) ;
if ( clifo . read ( ) = = NOERR )
{
q_update = " " ;
TToken_string key ( row - > get ( sf . cid2index ( S_PROKEY ) ) , ' ; ' ) ;
TString clifo_cofi = clifo . get ( CLI_COFI ) ;
TString clifo_paiv = clifo . get ( CLI_PAIV ) ;
if ( clifo_cofi ! = " " & & strcmp ( row - > get ( sf . cid2index ( S_CODFISC ) ) , clifo_cofi ) = = 0 | | clifo_paiv ! = " " & & strcmp ( row - > get ( sf . cid2index ( S_PARIVA ) ) , clifo_paiv ) = = 0 )
{
q_update < < " UPDATE FPPRO00F SET PZ_TIPOCF = 'F', PZ_CLIFOR = ' " < < row - > get ( sf . cid2index ( S_FORNITORE ) ) < < " ' WHERE PZ_KEYPRGINVIO = ' " < < key . get ( 0 ) < < " ' AND PZ_KEYHEADERFATT = ' " < < key . get ( 1 ) < < " ' AND PZ_KEYBODYFATT = ' " < < key . get ( 2 ) < < " ' " ;
fp_db ( ) . sq_set_exec ( q_update , false ) ;
2019-02-15 10:58:17 +01:00
row - > add ( " X " , sf . cid2index ( S_FPPRO ) ) ;
sf . force_update ( ) ;
2019-02-13 17:29:08 +01:00
}
}
}
2019-02-15 10:58:17 +01:00
row - > add ( " " , 0 ) ;
2019-02-13 17:29:08 +01:00
}
fp_db ( ) . sq_commit ( ) ;
2019-02-14 22:56:23 +01:00
sf . force_update ( ) ;
2019-02-13 17:29:08 +01:00
}
}
2019-02-22 15:14:05 +01:00
void TPassive_mask : : new_forn ( )
{
TSheet_field & sf = sfield ( F_ERR ) ;
TString newf = " fpnewf " ;
FOR_EACH_SHEET_ROW ( sf , nr , row )
{
int cod_forn = _forn_code . get_int ( nr ) ; // Prendo codice di errore associazione fornitore
int n_row_elenco = _list_fatt_err . get_int ( nr ) ; // Prendo che numero di riga a cui mi riferisco in fatture
TSheet_field & f_docs = sfield ( F_DOCS ) ; // Prendo SheetField da elenco fatture
TToken_string & row_elenco_fatt = f_docs . row ( n_row_elenco ) ; // Prendo riga dall'elenco delle fatture
TToken_string keys ( row_elenco_fatt . get ( f_docs . cid2index ( S_PROKEY ) ) , ' ; ' ) ; // Dalla riga leggo la chiave del db
if ( row - > starts_with ( " X " ) & & ( cod_forn = = no_forn | | cod_forn = = no_match_cf | | cod_forn = = no_cf ) )
{
TString query ; query < < " SELECT PU_PEC AS PEC \n " < <
" FROM PAA3200F \n " < <
" WHERE PU_KEYPRGINVIO = ' " < < keys . get ( ) ;
query < < " ' AND PU_KEYHEADERFATT = ' " < < keys . get ( ) ;
query < < " ' AND PU_KEYBODYFATT = ' " < < keys . get ( ) < < " ' " ;
fp_db ( ) . sq_set_exec ( query ) ;
TString pec = fp_db ( ) . sq_get ( " PEC " ) ;
TString num ; num . format ( " %04d " , nr ) ;
TFilename newf_ini ;
TString temp_path = newf_ini . tempdir ( ) ;
newf_ini . tempdir ( ) < < " \\ " < < newf < < num < < " .ini " ;
TConfig forn_conf ( newf_ini , " Transaction " ) ;
forn_conf . set ( " Action " , " INSERT " ) ;
forn_conf . set_paragraph ( " 20 " ) ;
forn_conf . set ( " TIPOCF " , " F " ) ;
forn_conf . set ( " COFI " , row - > get ( sf . cid2index ( S_CODFIERR ) ) ) ;
forn_conf . set ( " PAIV " , row - > get ( sf . cid2index ( S_PIVAERR ) ) ) ;
forn_conf . set ( " PEC " , pec ) ;
forn_conf . set ( " RAGSOC " , row - > get ( sf . cid2index ( S_RAGSERR ) ) ) ;
forn_conf . set ( " STATOPAIV " , row_elenco_fatt . get ( sf . cid2index ( S_STATOPAIV ) ) ) ;
forn_conf . set_paragraph ( " 17 " ) ;
forn_conf . set ( " TIPOCF " , " F " ) ;
forn_conf . set ( " RAGGOR " , " O " ) ;
forn_conf . set ( " PADESTIN " , row_elenco_fatt . get ( sf . cid2index ( S_CODSDI ) ) ) ;
TExternal_app app ( TString ( " cg0 -1 -i " ) < < temp_path < < " \\ " < < newf < < " * " < < " .ini " < < " /u " < < user ( ) ) ;
app . run ( ) ;
row - > add ( " " , 0 ) ;
}
}
sf . force_update ( ) ;
}
void TPassive_mask : : aggiorna_forn ( )
{
TSheet_field & sf = sfield ( F_ERR ) ;
TString newf = " fpaggf " ;
FOR_EACH_SHEET_ROW ( sf , nr , row )
{
int cod_forn = _forn_code . get_int ( nr ) ; // Prendo codice di errore associazione fornitore
int n_row_elenco = _list_fatt_err . get_int ( nr ) ; // Prendo che numero di riga a cui mi riferisco in fatture
TSheet_field & f_docs = sfield ( F_DOCS ) ; // Prendo SheetField da elenco fatture
TToken_string & row_elenco_fatt = f_docs . row ( n_row_elenco ) ; // Prendo riga dall'elenco delle fatture
if ( row - > starts_with ( " X " ) & & cod_forn = = no_match_cf )
{
TString num ; num . format ( " %04d " , nr ) ;
TFilename newf_ini ;
TString temp_path = newf_ini . tempdir ( ) ;
newf_ini . tempdir ( ) < < " \\ " < < newf < < num < < " .ini " ;
TConfig forn_conf ( newf_ini , " Transaction " ) ;
forn_conf . set ( " Action " , " MODIFY " ) ;
forn_conf . set_paragraph ( " 20 " ) ;
forn_conf . set ( " TIPOCF " , " F " ) ;
forn_conf . set ( " COFI " , row - > get ( sf . cid2index ( S_CODFIERR ) ) ) ;
forn_conf . set ( " CODCF " , row_elenco_fatt . get ( sf . cid2index ( S_FORNITORE ) ) ) ;
TExternal_app app ( TString ( " cg0 -1 -i " ) < < temp_path < < " \\ " < < newf < < " * " < < " .ini " < < " /u " < < user ( ) ) ;
message_box ( TString ( " Sto andando a modificare il codice fiscale del fornitore: \n " ) < < row - > get ( sf . cid2index ( S_RAGSERR ) ) ) ;
app . run ( ) ;
row - > add ( " " , 0 ) ;
}
}
sf . force_update ( ) ;
}
2019-02-08 17:18:16 +01:00
bool TPassive_mask : : on_field_event ( TOperable_field & o , TField_event e , long jolly )
{
switch ( o . dlg ( ) )
{
2019-02-14 22:56:23 +01:00
case S_SELCODPROT :
if ( e = = fe_modify )
set_filter_changed ( ) ;
break ;
case F_PROT :
if ( e = = fe_init )
init ( ) ;
break ;
case DLG_ALL :
if ( e = = fe_button )
switch ( curr_page ( ) )
{
case filtri :
select_all ( F_PROT ) ;
set_filter_changed ( ) ;
break ;
2019-02-15 10:58:17 +01:00
case elenco_fe :
select_all ( F_DOCS ) ;
break ;
2019-02-22 15:14:05 +01:00
case elenco_err :
select_all ( F_ERR ) ;
break ;
2019-02-14 22:56:23 +01:00
default : break ;
}
break ;
2019-02-13 17:29:08 +01:00
case DLG_SAVEREC :
if ( e = = fe_button )
2019-02-22 15:14:05 +01:00
if ( curr_page ( ) = = elenco_fe )
2019-02-14 22:56:23 +01:00
salva_for ( ) ;
2019-02-22 15:14:05 +01:00
break ;
case DLG_NEWREC :
if ( e = = fe_button )
if ( curr_page ( ) = = elenco_err )
new_forn ( ) ;
break ;
case DLG_RECALC :
if ( e = = fe_button )
if ( curr_page ( ) = = elenco_err )
aggiorna_forn ( ) ;
2019-02-13 17:29:08 +01:00
break ;
2019-02-08 17:18:16 +01:00
case F_DATAINI :
if ( e = = fe_init )
o . set ( ini_get_string ( CONFIG_DITTA , " fp " , " LastXML " , " 01-01-2019 " ) ) ;
else if ( e = = fe_close )
ini_set_string ( CONFIG_DITTA , " fp " , " LastXML " , o . get ( ) ) ;
break ;
case F_DATAEND :
if ( e = = fe_init )
o . set ( TDate ( TODAY ) ) ;
2019-02-15 10:58:17 +01:00
break ;
2019-02-08 17:18:16 +01:00
default : break ;
}
if ( ( e = = fe_modify | | e > = se_enter ) & & jolly = = 0 )
2019-02-14 22:56:23 +01:00
if ( o . dlg ( ) > = START_MASK & & o . dlg ( ) < = END_MASK | | o . dlg ( ) = = F_PROT )
2019-02-08 17:18:16 +01:00
set_filter_changed ( ) ;
return true ;
}
/////////////////////////////////////////////////////////////////////////////////////
// TPassive_app
/////////////////////////////////////////////////////////////////////////////////////
class TPassive_app : public TSkeleton_application
{
public :
void main_loop ( ) override ;
TPassive_app ( ) = default ;
} ;
void TPassive_app : : main_loop ( )
{
TPassive_mask mask ;
while ( mask . run ( ) = = K_ENTER )
{
}
}
int fp0400 ( int argc , char * argv [ ] )
{
TPassive_app fpas ;
fpas . run ( argc , argv , TR ( " Fatturazione F.P. " ) ) ;
return 0 ;
}