2016-09-09 13:58:28 +00:00
// 770100.cpp - Scheda percipienti
# include <defmask.h>
# include <mailbox.h>
# include <recarray.h>
# include "scperc.h"
# include "rver.h"
# include "rpag.h"
# include "perc.h"
# include "../cg/cgsaldac.h"
# include <anagr.h>
// per dinamica non riprendere #include "../ve/velib.h"
# include "770101.h"
# include "770102.h"
# include "770100a.h"
# include "770.h"
# include "77lib.h"
// Token_string pilota per relazione tra l'informazione e la
// sua posizione nello sheet, ogni riga individua uno sheet diverso
const char * PILOT_SHEET [ ] = {
" DATAPAG|COMPENSO|SPESA|IMPONIBILE|PERC|RITENUTA|SOMREGCONV|ALQIMP10|CTSSNPERC|CTSSNCOMP|COD10|NETTO|SOMNSRIT|AMMLORDO|QUOTAPROV|IMPNETTO|COMNETTO|NUMVERS|NUMREG " ,
" DATAPAG|COMPENSO|IMPCPA|IMPONIBILE|PERC|RITENUTA|SPESA|SOMREGCONV|NETTO|SOMNSRIT|AMMLORDO|QUOTAPROV|IMPNETTO|COMNETTO|NUMVERS|NUMREG " ,
} ;
// Items per causale quadro SC
const char * ITEMS_SC [ ] = {
" A|A " , " B|B " , " C|C " , " D|D " , " E|E " , " F|F " , " G|G " , " H|H " , " I|I " ,
" K|K " , " L|L " , " M|M " , " N|N " , " P|P " , " Q|Q " , " R|R " , " S|S " , " T|T " , NULL } ;
// Items per causale quadro SE
const char * ITEMS_SE [ ] = {
" A|A " , " B|B " , " C|C " , " D|D " , " E|E " , " F|F " , " G|G " , " T|T " , NULL } ;
// Items per causale quadro SF
const char * ITEMS_SF [ ] = {
" A|A " , " B|B " , " C|C " , " D|D " , " E|E " , " F|F " , " G|G " , " H|H " , " I|I " ,
" L|L " , " M|M " , " N|N " , " P|P " , " Q|Q " , " R|R " , " S|S " , " T|T " , NULL } ;
// Items per causale quadro SG
const char * ITEMS_SG [ ] = {
" A|A " , " B|B " , " C|C " , " D|D " , " E|E " , NULL } ;
// Items per causale quadro LA
const char * ITEMS_LA [ ] = {
2016-09-16 11:03:16 +00:00
" A|Prestazioni di lavoro autonomo rientranti nell'esercizio di arte o professione abituale " ,
" B|Utilizzazione economica, da parte dell'autore o dell'inventore, di opere dell'ingegno, di brevetti industriali e di processi, formule o informazioni relativi ad esperienzeacquisite in campo industriale, commerciale o scientifico " ,
" C|Utili derivanti da contratti di associazione in partecipazione e da contratti di cointeressenza quando l' apporto e' costituito esclusivamente dalla prestazione di lavoro " , " D|utili spettanti ai soci promotori ed ai soci fondatori delle societa' di capitali " ,
" E|Levata di protesti cambiari da parte dei segretari comunali " ,
" F|Prestazioni rese dagli sportivi con contratto di lavoro autonomo " ,
" G|Idennita' corrisposte per la cessazione di attivita' sportiva professionale " ,
" H|Idennita' corrisposte per la cessazione dei rapporti di agenzia delle persone fisiche " ,
" I|Idennita' corrisposte per la cessazione da funzionari notarili " ,
" L|Utilizzaz. economica, da parte di sogg. diverso dall'autore o dall'inventore, di opere dell'ingegno, di brevetti industiali e di processi, formule e informaz. relativi ad esperienze acquisite in campo industriale, commerciale, scientifico " ,
" L1|Redditi derivanti dall<6C> utilizzazione economica di opere dell<6C> ingegno, di brevetti industriali e di processi, formule e informazioni relativi a esperienze acquisite in campo industriale, commerciale o scientifico, che sono percepiti da soggetti che abbiano acquistato a titolo oneroso i diritti alla loro utilizzazione " ,
" M|Prestazioni di lavoro autonomo non esercitate abitualmente " ,
" M1|Redditi derivanti dall<6C> assunzione di obblighi di fare, di non fare o permettere " ,
" N|Idennita' di trasferta, rinborso forfetario di spese, premi e compensi erogati nell' esercizio diretto di attivita' sportiva dilettantistiche " ,
" O|Prestazioni di lavoro autonomo non esercitate abitualmente, per le quali non sussiste l<> obbligo di iscrizione alla gestione separata " ,
" O1|Redditi derivanti dall<6C> assunzione di obblighi di fare, di non fare o permettere, per le quali non sussiste l<> obbligo di iscrizione alla gestione separata (Circ. INPS n. 104/2001) " ,
" P|Prestazioni in forma di capitale e riscatti erogati dalle forme di previdenza complementare di cui al D.Lgs 21 aprile 1993,n. 124 e sucessive modificazioni a lavoratori autonomi e imprenditori individuali " ,
" Q|Provvigioni corrisposte ad agente o rappresentante di commercio monomandatario " ,
" R|Provvigioni corrisposte ad agente o rappresentante plurimandatario " ,
" S|Provvigioni corrisposte a commissionario " , " T|Provvigioni corrisposte a mediatore " ,
" U|Provvigioni corrisposte a procacciatore di affari " ,
" V|Provvigioni corrisposte a incaricato per le vendite a domicilio " ,
" V1|redditi derivanti da attivit<69> commerciali non esercitate abitualmente (ad esempio, provvigioni corrisposte per prestazioni occasionali ad agente o rappresentante di commercio, mediatore, procacciatore d<> affari o incaricato per le vendite a domicilio) " ,
" W|Provvigioni corrisposte a incaricato per la vendita porta a porta e per la vendita ambulante di giornali quotidiani e periodici (L. 25 febbraio 1987, n. 67) " ,
" X|Canoni corrisposti nel 2004 da societ<65> o enti residenti ovvero da stabili organizzazioni di societ<65> estere " ,
" Y|Canoni corrisposti dal 1<> gennaio 2005 al 26 luglio 2005 da societ<65> o enti residenti ovvero da stabili organizzazioni di societ<65> estere " ,
" Z|Titolo diverso dai precedenti " , NULL } ;
2016-09-09 13:58:28 +00:00
TSchedaPercipienti : : TSchedaPercipienti ( ) : _rel ( NULL ) , _flag_cg ( false )
{
_from_modify = false ;
_soggnres = false ;
memset ( _msk , 0 , sizeof ( _msk ) ) ;
}
void TSchedaPercipienti : : update_lasts ( TMask & m )
{
if ( m . mode ( ) = = MODE_MOD )
{
const long codditta = m . get_long ( F_CODDITTA ) ;
const char tipoa = m . get ( F_TIPOA ) [ 0 ] ;
const long codanagr = m . get_long ( F_CODANAGR ) ;
const int nprog = m . get_int ( F_NPROG ) ;
// Determino ultimo numero di riga usato nei PAGAMENTI
_rpag - > zero ( ) ;
_rpag - > put ( " CODDITTA " , codditta ) ;
_rpag - > put ( " TIPOA " , tipoa ) ;
_rpag - > put ( " CODANAGR " , codanagr ) ;
_rpag - > put ( " NPROG " , nprog ) ;
TRectype dep ( _rpag - > curr ( ) ) ;
long nriga = 0L ;
for ( _rpag - > read ( ) ; ! _rpag - > eof ( ) ; _rpag - > next ( ) )
{
if ( _rpag - > curr ( ) > dep ) break ;
nriga = _rpag - > get_long ( " NRIGA " ) ;
}
_lastpag = nriga ;
// Determino ultimo numero di riga usato nei VERSAMENTI
_rver - > zero ( ) ;
_rver - > put ( " CODDITTA " , ( long ) codditta ) ;
_rver - > put ( " TIPOA " , tipoa ) ;
_rver - > put ( " CODANAGR " , ( long ) codanagr ) ;
_rver - > put ( " NPROG " , nprog ) ;
TRectype dep2 ( _rver - > curr ( ) ) ;
long nrigav = 0L ;
for ( _rver - > read ( ) ; ! _rver - > eof ( ) ; _rver - > next ( ) )
{
if ( _rver - > curr ( ) > dep2 ) break ;
nrigav = _rver - > get_long ( " NRIGA " ) ;
}
_lastvers = nrigav ;
}
else
_lastpag = _lastvers = 0L ;
}
bool TSchedaPercipienti : : changing_mask ( int mode )
{
if ( ( mode = = MODE_MOD ) & & ( _mode = = MODE_INS ) )
return false ;
else
return _mode ! = mode ;
}
TMask * TSchedaPercipienti : : get_mask ( int mode )
{
const int m = ( mode = = MODE_QUERY ) ? 0 : 1 ;
_mode = mode ;
return load_mask ( m ) ;
}
TMask * TSchedaPercipienti : : load_mask ( int n )
{
if ( _msk [ n ] ! = NULL )
return _msk [ n ] ;
TFilename name ( " 770100 " ) ; name < < char ( n = = 0 ? ' a ' : ' b ' ) ;
TMask * m = new TMask ( name ) ;
switch ( n )
{
case 0 :
m - > set_handler ( F_NPROG , nprog_handler ) ;
m - > set_handler ( F_CODDITTA , codditta_handler ) ;
m - > set_handler ( F_CODANAGRCOM , codanagr_handler ) ;
m - > set_handler ( F_CODANAGRPERC , codanagr_handler ) ;
m - > set_handler ( F_AGGPAG , aggpag_handler ) ;
break ;
case 1 :
{
m - > disable ( DLG_FINDREC ) ;
m - > set_handler ( F_DATADOC , check_handler ) ;
m - > set_handler ( F_CODCAUS , check_causale ) ;
m - > set_handler ( F_SPESE , check_spese ) ;
m - > set_handler ( F_COMPENS , check_compensi ) ;
m - > set_handler ( F_MESECOMP , check_competenza ) ;
////////////////////////////////////////////////////////////////////////
// Handler versamenti
////////////////////////////////////////////////////////////////////////
TSheet_field & vers = m - > sfield ( F_VERSAMENTI ) ;
vers . set_notify ( vers_notify ) ;
TMask & sm = vers . sheet_mask ( ) ;
sm . set_handler ( F_VERS_1015 , vers1015_handler ) ;
sm . set_handler ( DLG_SELPAG , pag_select ) ;
sm . set_handler ( DLG_AZZERA , ver_azzera ) ;
sm . set_handler ( F_TIPOVERS , tipo_hndl ) ;
sm . set_handler ( F_LUOVERS , luo_hndl ) ;
sm . set_handler ( F_ABI , abicab_hndl ) ;
sm . set_handler ( F_CAB , abicab_hndl ) ;
}
break ;
default :
CHECKD ( 0 , " Che strano genere di maschera e' la " , n ) ;
break ;
}
return _msk [ n ] = m ;
}
// Ricerca e output dell'ultimo nprog del percipiente scelto
bool TSchedaPercipienti : : setta_nprog ( TMask & m , const bool variazione , const char * codanag )
{
long nprog = 0L ;
const char tipoa = m . get ( F_TIPOA ) [ 0 ] ;
const TString8 codanagr ( codanag & & * codanag ? codanag : m . get ( F_CODANAGR ) ) ;
const long codditta = get_firm_770 ( ) ;
// Scrivi nprog solo se il percipiente ESISTE sull'arkivio
if ( ! app ( ) . esiste_perc ( m , codanagr ) )
return true ;
// istanza e inizializza chiave file schede
TLocalisamfile scperc ( LF_SCPERC ) ;
bool trovato = false ;
const long numreg = app ( ) . coll_numreg ( ) ;
if ( numreg > 0L )
{
scperc . setkey ( 3 ) ;
scperc . put ( SPR_CODDITTA , codditta ) ;
scperc . put ( SPR_NUMREG , numreg ) ;
if ( scperc . read ( _isgteq ) = = NOERR & & scperc . get_long ( SPR_NUMREG ) = = numreg )
{
nprog = scperc . get_int ( SPR_NPROG ) ;
trovato = true ;
}
scperc . setkey ( 1 ) ;
}
if ( ! trovato )
{
scperc . zero ( ) ;
scperc . put ( " CODDITTA " , codditta ) ;
scperc . put ( " TIPOA " , tipoa ) ;
scperc . put ( " CODANAGR " , codanagr ) ;
// istanza record di confronto
TRectype rec ( scperc . curr ( ) ) ;
// cerca ultimo progressivo usato
// e per tipo collegamento variazione
// individuo eventuale scheda coincidente
for ( scperc . read ( _isgteq ) ; scperc . good ( ) & & scperc . curr ( ) = = rec & & ! trovato ; scperc . next ( ) )
{
nprog = scperc . get_long ( " NPROG " ) ;
if ( variazione )
{
TString16 numdoc , datadoc ;
numdoc = scperc . get ( " NUMDOC " ) ;
numdoc . trim ( ) ;
datadoc = scperc . get ( " DATADOC " ) ;
trovato = ( ( numdoc = = app ( ) . _coll . _numdoc ) & & ( datadoc = = app ( ) . _coll . _datadoc ) ) ;
}
}
}
if ( ! trovato )
nprog = nprog + + ;
m . set ( F_NPROG , nprog ) ;
return trovato ;
}
bool TSchedaPercipienti : : codditta_handler ( TMask_field & f , KEY k )
{
if ( k = = K_TAB & & ! f . mask ( ) . is_running ( ) )
{
const long codditta = get_firm_770 ( ) ;
if ( codditta > 0 )
{
f . set ( codditta ) ;
f . check ( ) ;
}
}
return TRUE ;
}
bool TSchedaPercipienti : : codanagr_handler ( TMask_field & f , KEY k )
{
if ( k = = K_TAB )
{
TMask & m = f . mask ( ) ;
const bool variazione = app ( ) . coll_variazione ( ) ;
TString8 codanagr ( f . get ( ) ) ;
if ( codanagr . full ( ) )
{
if ( ! app ( ) . esiste_perc ( m , codanagr ) )
return f . warning_box ( " Percipiente non valido " ) ;
setta_nprog ( m , variazione , codanagr ) ;
}
// faccio a mano decodifica del percipiente
// perch<63> l'automatismo non funziona
const long tmp_codanagr = atol ( codanagr ) ;
const TString4 tmp_tipoa = m . get ( F_TIPOA ) ;
const TString & tmp_ragsoc = app ( ) . get_ragsoc ( tmp_tipoa , tmp_codanagr ) ;
m . set ( F_RAGSOCPER , tmp_ragsoc ) ;
m . set ( F_RAGSOCCOM , tmp_ragsoc ) ;
}
return true ;
}
void TSchedaPercipienti : : calcola_riga_pag ( TRectype & rec ,
const real & h_PercAssImp ,
const real & h_PercCassaPrev ,
const real & h_PercRitenuta ,
const real & h_PercInps ,
const real & h_PercAssImpInps ,
const real & h_PercCommitInps ) const
{
const int fdec = TCurrency : : get_firm_dec ( ) ;
real compenso = rec . get_real ( PAG_COMPENSO ) ;
real impcpa = ( compenso * h_PercCassaPrev ) / ( CENTO + h_PercCassaPrev ) ; impcpa . round ( fdec ) ; // calcolo CPA
rec . put ( PAG_IMPCPA , impcpa ) ;
real imponibile = ( ( compenso - impcpa ) * h_PercAssImp ) / CENTO ; imponibile . round ( fdec ) ; // calcolo imponibile
rec . put ( PAG_IMPONIBILE , imponibile ) ;
real ritlorda = ( imponibile * h_PercRitenuta ) / CENTO ; ritlorda . round ( fdec ) ; // calcolo ritenuta lorda
rec . put ( PAG_RITLORDA , ritlorda ) ;
const real detfamil = rec . get_real ( PAG_DETFAMIL ) ;
const real detlavdip = rec . get_real ( PAG_DETLAVDIP ) ;
const real totdet = detfamil + detlavdip ;
const real ritenuta = totdet > ritlorda ? ZERO : ritlorda - totdet ;
rec . put ( PAG_RITENUTA , ritenuta ) ;
real ctssncomp = ( ( ( compenso * h_PercAssImpInps ) / CENTO ) * h_PercInps ) / CENTO ;
ctssncomp . round ( fdec ) ; // calcolo contributo Inps complessivo
rec . put ( PAG_INPSCOMP , ctssncomp ) ;
2016-09-16 11:03:16 +00:00
real ctssnperc = h_PercCommitInps . is_zero ( ) ? ctssncomp - ( ( ctssncomp * DUE ) / TRE )
2016-09-09 13:58:28 +00:00
: ctssncomp - ( ( ctssncomp * h_PercCommitInps ) / CENTO ) ;
ctssnperc . round ( fdec ) ; // calcolo contributo Inps del percipiente
rec . put ( PAG_INPSPERC , ctssnperc ) ;
real utpagati = rec . get_real ( PAG_UTPAGATI ) ;
if ( abs ( utpagati ) > abs ( imponibile ) )
utpagati = imponibile ;
real ritutpag = rec . get_real ( PAG_RITUTPAG ) ;
if ( abs ( ritutpag ) > abs ( ritenuta ) )
ritutpag = ritenuta ;
rec . put ( PAG_UTSPETT , imponibile - utpagati ) ; // ? da verificare calcolo utili spettanti
rec . put ( PAG_RITUTPAG , ritenuta - ritutpag ) ; // ? da verificare calcolo ritenute utili spettanti
const real spesa = rec . get ( PAG_SPESA ) ;
const real netto = compenso + spesa - ritenuta - ctssnperc ; // calcolo compenso netto
rec . put ( PAG_NETTO , netto ) ;
const real somregconv = rec . get_real ( PAG_SOMREGCONV ) ;
const real somnsrit = compenso - imponibile + spesa - impcpa - somregconv ; // calcolo somme non soggette a ritenuta
rec . put ( PAG_SOMNSRIT , somnsrit ) ;
real controbb = rec . get_real ( PAG_SOMREGCONV ) ;
const real ammlordo = imponibile + somnsrit + controbb + somregconv ; // calcolo ammontare lordo
rec . put ( PAG_AMMLORDO , ammlordo ) ;
const real quotaprov = somnsrit - spesa ; // calcolo quota provvigioni
rec . put ( PAG_QUOTAPROV , quotaprov ) ;
const real impnetto = imponibile - ritenuta ; // calcolo imponibile al netto delle ritenute
rec . put ( PAG_IMPNETTO , impnetto ) ;
const real comnetto = compenso - ritenuta ; // calcolo compenso al netto delle ritenute
rec . put ( PAG_COMNETTO , comnetto ) ;
}
bool TSchedaPercipienti : : agg_pagamenti ( const TRectype & sch , const TDate & pag_dal ) const
{
const long numreg = sch . get_long ( SCH_NUMREG ) ;
if ( numreg < = 0 )
return false ;
# ifdef DBG
if ( numreg = = 37788 )
int cazzone = 1 ;
# endif
TPartite_array partarr ;
partarr . add_numreg ( numreg ) ;
if ( partarr . items ( ) = = 0 )
return false ;
TSchedaPE sc ;
bool pag_udated = false ;
TRectype & scur = sc . lfile ( ) . curr ( ) ;
scur = sch ;
sc . read ( _isequal , _lock ) ;
const real totrit = scur . get_real ( SCH_TOTRIT ) ;
const real totdoc = scur . get_real ( SCH_TOTALE ) ;
const real iva = scur . get_real ( SCH_IVA ) ;
const real totale = totdoc - totrit ;
const real imponibile = totdoc - iva ;
const real spese = scur . get_real ( SCH_SPESE ) ;
const real compenso = scur . get_real ( SCH_COMPENSO ) ;
real spperc , ivaperc ;
if ( ! imponibile . is_zero ( ) )
{
spperc = spese / totale ; spperc . round ( 8 ) ;
ivaperc = iva / totale ;
ivaperc = iva / imponibile ;
ivaperc . round ( 8 ) ;
}
const TString4 codcau = scur . get ( " CODCAUS " ) ;
const TRectype cau = cache ( ) . get ( " %CA7 " , codcau ) ;
// leggo valori tabella causali per calcolo
const real h_PercRitenuta = cau . get_real ( " R0 " ) ;
const real h_PercInps = cau . get_real ( " R1 " ) ;
const real h_PercAssImpInps = cau . get_real ( " R2 " ) ;
const real h_PercCommitInps = cau . get_real ( " R3 " ) ;
const real h_PercAssImp = cau . get_real ( " R4 " ) ;
const real h_PercCassaPrev = cau . get_real ( " R5 " ) ;
for ( TPartita * p = partarr . first ( ) ; p ! = NULL ; p = partarr . next ( ) )
{
const int lastrow = p - > last ( ) ;
for ( int row = p - > prima_fattura ( numreg ) ; row > 0 & & row < = lastrow ; row = p - > succ ( row ) )
{
const TRiga_partite & rigapart = p - > riga ( row ) ;
const int nrate = rigapart . tipo ( ) = = tm_fattura ? rigapart . rate ( ) : 0 ;
TDate datapag ;
for ( int r = 1 ; r < = nrate ; r + + )
{
TRiga_scadenze & ratapart = rigapart . rata ( r ) ;
TImporto tot [ 10 ] ;
long numregp [ 10 ] = { 0L , 0L , 0L , 0L , 0L , 0L , 0L , 0L , 0L , 0L } ;
int lastsch = 0 ;
const int rows = sc . pag_items ( ) ;
for ( int rowp = ratapart . last ( ) ; rowp > 0 ; rowp = ratapart . pred ( rowp ) )
{
const TRectype & pag = ratapart . row ( rowp ) ; // Riga pagamento
const TRiga_partite & sum = p - > riga ( rowp ) ; // Riga partite
if ( sum . tipo ( ) = = tm_nota_credito )
continue ;
if ( pag_dal . ok ( ) ) // Filtro opzionale su data pagamento
{
const TDate sum_datapag = sum . get ( PART_DATAPAG ) ;
if ( sum_datapag < pag_dal )
continue ;
}
const char sez = sum . sezione ( ) ;
TImporto imppag ( sez , pag . get_real ( PAGSCA_IMPORTO ) ) ;
const long num = sum . get_long ( PART_NREG ) ;
if ( lastsch = = 0 & & numregp [ 0 ] = = 0L )
{
numregp [ lastsch ] = num ;
tot [ lastsch ] . reset ( ) ;
}
if ( num ! = numregp [ lastsch ] )
{
numregp [ + + lastsch ] = num ;
tot [ lastsch ] . reset ( ) ;
}
if ( lastsch > 9 )
{
warning_box ( " Attenzione! Troppi pagamenti diversi per la registrazione %ld. " , numreg ) ;
break ;
}
bool found = false ;
imppag + = TImporto ( sez , pag . get_real ( PAGSCA_RITENUTE ) ) ;
imppag + = TImporto ( sum . sezione_ritsoc ( ) , pag . get_real ( PAGSCA_RITSOC ) ) ;
real abb = pag . get_real ( PAGSCA_ABBUONI ) ;
if ( ! abb . is_zero ( ) )
imppag + = TImporto ( sez , abb ) ;
for ( int i = 0 ; ! found & & i < rows ; i + + )
{
TRectype & pagrec = sc . pag ( i ) ;
const long numsch = pagrec . get_long ( PAG_NUMREG ) ;
found = num = = numsch ;
if ( numsch = = 0L & & ! found )
{
TDate data ( sum . get_date ( PART_DATADOC ) ) ;
if ( ! data . ok ( ) )
data = sum . get_date ( PART_DATAREG ) ;
if ( ! data . ok ( ) )
data = sum . get_date ( PART_DATAPAG ) ;
const TDate datasch = pagrec . get ( PAG_DATAPAG ) ;
if ( data = = datasch )
{
pagrec . put ( PAG_NUMREG , num ) ;
found = true ;
}
else
{
imppag . normalize ( ' D ' ) ;
real spesep = imppag . valore ( ) * spperc ;
spesep . round ( TCurrency : : get_firm_dec ( ) ) ;
real ivap = imppag . valore ( ) * ivaperc / ( UNO + ivaperc ) ;
ivap . round ( TCurrency : : get_firm_dec ( ) ) ;
if ( abs ( spesep ) > abs ( spese ) )
spesep = spese ;
if ( abs ( ivap ) > abs ( iva ) )
ivap = iva ;
real compensop = imppag . valore ( ) - spesep - ivap ;
compensop + = compensop * h_PercRitenuta ; /* / CENTO;*/
compensop . round ( TCurrency : : get_firm_dec ( ) ) ;
if ( abs ( compensop ) > abs ( compenso ) )
compensop = compenso ;
if ( compensop = = pagrec . get_real ( PAG_COMPENSO ) )
{
pagrec . put ( PAG_NUMREG , num ) ;
found = true ;
}
}
}
}
if ( ! found )
{
tot [ lastsch ] + = imppag ;
if ( ! datapag . ok ( ) )
datapag = sum . get_date ( PART_DATADOC ) ;
if ( ! datapag . ok ( ) )
datapag = sum . get_date ( PART_DATAREG ) ;
if ( ! datapag . ok ( ) )
datapag = sum . get_date ( PART_DATAPAG ) ;
}
}
for ( int j = 0 ; j < 10 & & numregp [ j ] > 0L ; j + + )
{
tot [ j ] . normalize ( ' D ' ) ;
if ( tot [ j ] . is_zero ( ) )
break ;
TRectype & pagrec = sc . pag ( rows + j ) ;
pagrec . put ( PAG_CODDITTA , scur . get ( SCH_CODDITTA ) ) ;
pagrec . put ( PAG_TIPOA , scur . get ( SCH_TIPOA ) ) ;
pagrec . put ( PAG_CODANAGR , scur . get ( SCH_CODANAGR ) ) ;
pagrec . put ( PAG_NPROG , scur . get ( SCH_NPROG ) ) ;
pagrec . put ( PAG_NRIGA , rows + j + 1 ) ;
pagrec . put ( PAG_NUMVERS , - 1 ) ;
const real & totj = tot [ j ] . valore ( ) ;
real spesepag = totj * spperc ;
spesepag . round ( TCurrency : : get_firm_dec ( ) ) ;
real ivapag = totj * ivaperc / ( UNO + ivaperc ) ;
ivapag . round ( TCurrency : : get_firm_dec ( ) ) ;
if ( abs ( spesepag ) > abs ( spese ) )
spesepag = spese ;
if ( abs ( ivapag ) > abs ( iva ) )
ivapag = iva ;
real compensopag = totj - spesepag - ivapag ;
compensopag + = compensopag * h_PercRitenuta ; /* / CENTO*/ ;
compensopag . round ( TCurrency : : get_firm_dec ( ) ) ;
if ( abs ( compensopag ) > abs ( compenso ) )
compensopag = compenso ;
pagrec . put ( PAG_COMPENSO , compensopag ) ;
pagrec . put ( PAG_SPESA , spesepag ) ;
pagrec . put ( PAG_DATAPAG , datapag ) ;
sc . lfile ( ) . put ( SCH_ANNOC , datapag . year ( ) ) ;
sc . lfile ( ) . put ( SCH_MESEC , datapag . month ( ) ) ;
pagrec . put ( PAG_PERC , h_PercRitenuta ) ; // percentuale ritenuta acconto
pagrec . put ( PAG_ALQIMP10 , h_PercAssImpInps ) ; // percentuale 10% INPS
pagrec . put ( PAG_NUMREG , numregp [ j ] ) ;
pagrec . put ( PAG_COD10 , " C " ) ;
calcola_riga_pag ( pagrec , h_PercAssImp , h_PercCassaPrev , h_PercRitenuta , h_PercInps , h_PercAssImpInps , h_PercCommitInps ) ;
}
}
}
}
const int err = sc . rewrite ( ) ; // ulocks too
if ( err ! = NOERR )
cantwrite_box ( " Scheda percipiente " ) ;
return err = = NOERR ;
}
static TDate _pag_dal ;
static bool schede ( const TRelation & rel , void * pJolly )
{
const TRectype & sch = rel . curr ( ) ;
TSchedaPercipienti * schper = ( TSchedaPercipienti * ) pJolly ;
schper - > agg_pagamenti ( sch , _pag_dal ) ;
return true ;
}
bool TSchedaPercipienti : : aggpag_handler ( TMask_field & f , KEY k )
{
if ( k = = K_SPACE )
{
TMask mp ( TR ( " Aggiorna pagamenti " ) , 1 , 32 , 6 ) ;
mp . add_date ( 101 , 0 , PR ( " Data iniziale " ) , 1 , 1 ) ;
mp . add_button ( DLG_OK , 0 , " " , - 12 , - 1 , 9 , 2 ) ;
mp . add_button ( DLG_CANCEL , 0 , " " , - 22 , - 1 , 9 , 2 ) ;
const bool ok = mp . run ( ) = = K_ENTER ;
if ( ok )
{
_pag_dal = mp . get ( 101 ) ;
TLocalisamfile fsch ( LF_SCPERC ) ;
TRectype from ( LF_SCPERC ) ;
from . put ( " CODDITTA " , get_firm_770 ( ) ) ;
TRelation rel ( LF_SCPERC ) ;
TCursor c ( & rel , " " , 1 , & from , & from ) ;
c . scan ( schede , & app ( ) , TR ( " Aggiornamento schede " ) ) ;
}
}
return true ;
}
bool TSchedaPercipienti : : esiste_perc ( const TMask & m , const char * codanag )
{
const char tipoa = m . get ( F_TIPOA ) [ 0 ] ;
const TString8 codanagr ( codanag & & * codanag ? codanag : m . get ( F_CODANAGR ) ) ;
// Controllo che l'anagrafica esista
TString8 key ; key . format ( " %c|%ld " , tipoa , atol ( codanagr ) ) ;
const TRectype & anag = cache ( ) . get ( LF_ANAG , key ) ;
const bool esiste_anagr = ! anag . empty ( ) ;
// memorizzo flag soggetto non residente nel dato membro usato
// nei controlli
if ( esiste_anagr )
_soggnres = anag . get_bool ( ANA_SOGGNRES ) ;
return esiste_anagr ;
}
// Passa al modo inserimento/modifica.
bool TSchedaPercipienti : : nprog_handler ( TMask_field & f , KEY key )
{
if ( ! f . mask ( ) . is_running ( ) )
return TRUE ;
if ( key = = K_CTRL + K_TAB )
{
f . set_dirty ( ) ;
return TRUE ;
}
const int nprog = atoi ( f . get ( ) ) ;
if ( key = = K_ENTER )
if ( app ( ) . _flag_cg )
{
app ( ) . _flag_cg = FALSE ; // avoid recursion
if ( nprog = = 0 | | ! app ( ) . esiste_perc ( f . mask ( ) ) )
return false ;
}
return TRUE ;
}
bool TSchedaPercipienti : : user_create ( )
{
_per = new TLocalisamfile ( LF_PERC ) ;
_rel = new TSchedaPE ;
_rver = new TLocalisamfile ( LF_RVER ) ;
_rpag = new TLocalisamfile ( LF_RPAG ) ;
_pags = new TNikArray_sheet ( - 1 , - 1 , - 4 , - 4 , TR ( " Selezione Pagamenti " ) ,
HR ( " @1|Data@11|Compenso@16|Ritenuta@16| " ) ,
0 , NULL_WIN , 5 ) ;
set_search_field ( F_CODANAGRPERC ) ;
// simulo una chiamata da contabilit<69> (lo lascio per eventuali prove)
/* real totdocla = 1000000;
real spesela = ZERO ;
real compensola = 1000000 ;
real impostela = ZERO ;
real ritenutela = ZERO ;
TToken_string s ( 80 ) ;
s . add ( pagamento ) ;
s . add ( " M " ) ;
s . add ( " G " ) ;
s . add ( 805 ) ;
s . add ( 15633 ) ;
s . add ( " 7 " ) ;
s . add ( " 04-01-2010 " ) ;
s . add ( totdocla . string ( ) ) ;
s . add ( spesela . string ( ) ) ;
s . add ( compensola . string ( ) ) ;
s . add ( impostela . string ( ) ) ;
s . add ( ritenutela . string ( ) ) ;
const char * name = " 770 -0 " ;
TMessage mla ( name , " LINK770 " , s ) ;
mla . send ( ) ; */
// Collegamento da contabilita'
TMailbox m ;
TMessage * msg = m . next_s ( " LINK770 " ) ;
if ( msg ! = NULL )
{
if ( ! _coll . read ( msg - > body ( ) ) )
{
NFCHECK ( " Errore nei parametri passati " ) ;
return false ;
}
const long ditta = get_firm_770 ( ) ;
if ( ! exist_dichiar_770 ( ditta ) )
{
if ( yesno_box ( FR ( " Creare la dichiarazione per la ditta %ld " ) , ditta ) )
{
if ( ! enter_dichiar_770 ( ditta ) )
{
NFCHECK ( " Creazione dichiarazione fallita! " ) ;
return false ;
}
}
}
}
load_mask ( 0 ) ;
return true ;
}
bool TSchedaPercipienti : : user_destroy ( )
{
if ( _msk [ 1 ] ! = NULL ) delete _msk [ 1 ] ;
if ( _msk [ 0 ] ! = NULL ) delete _msk [ 0 ] ;
delete _rel ; delete _per ; delete _rver ;
delete _rpag ; delete _pags ;
return TRUE ;
}
//
// COMPILA_TESTATA
//
// Usata nel collegamento da cg
//
void TSchedaPercipienti : : compila_testata ( TMask & m )
{
m . set ( F_DATADOC , _coll . _datadoc ) ;
m . set ( F_NUMDOC , _coll . _numdoc ) ;
m . set ( F_IVA , _coll . _imposte . string ( ) ) ;
m . set ( F_SPESE , _coll . _spese . string ( ) ) ;
m . set ( F_COMPENS , _coll . _compenso . string ( ) ) ;
m . set ( F_NUMREG , _coll . _numreg ) ;
switch ( tipo_coll ( ) )
{
case occasionale :
m . set ( F_COMPENS , _coll . _compenso . string ( ) ) ;
m . set ( F_TOTDOC , _coll . _compenso . string ( ) ) ;
break ;
case fattura :
m . set ( F_TOTDOC , _coll . _totdoc . string ( ) ) ;
m . set ( F_TOTRIT , _coll . _ritenute . string ( ) ) ;
break ;
default :
break ;
}
}
bool TSchedaPercipienti : : coll_variazione ( ) const
{
return _coll . _immissione = = ' M ' | | tipo_coll ( ) = = pagamento | |
tipo_coll ( ) = = pagamento_piu_perc ;
}
const TString & TSchedaPercipienti : : get_ragsoc ( const char * tipoa , const long codanagr ) const
{
TString8 key ; key . format ( " %c|%ld " , * tipoa , codanagr ) ;
return cache ( ) . get ( LF_ANAG , key , ANA_RAGSOC ) ;
}
void TSchedaPercipienti : : init_modify_mode ( TMask & m )
{
_from_modify = TRUE ;
_codanagr = m . get_long ( F_CODANAGR ) ;
_tipoa = m . get ( F_TIPOA ) ;
_ragsoc = get_ragsoc ( _tipoa , _codanagr ) ;
// inizilizza maschera
init_mask ( m , false ) ;
}
void TSchedaPercipienti : : init_insert_mode ( TMask & m )
{
init_mask ( m ) ;
// La proposta causale <20> valida con e senza collegamneto da prima nota
TToken_string key ; key . format ( " %c|%ld " , m . get ( F_TIPOA ) [ 0 ] , m . get_long ( F_CODANAGR ) ) ;
TString4 codcaus = cache ( ) . get ( LF_ANAG , key , " CAUSQUA " ) ;
if ( codcaus . blank ( ) )
{
key . format ( " %ld|%c|%ld|%d " ,
m . get_long ( F_CODDITTA ) , m . get ( F_TIPOA ) [ 0 ] ,
m . get_long ( F_CODANAGR ) , m . get_int ( F_NPROG ) - 1 ) ;
codcaus = cache ( ) . get ( LF_SCPERC , key , SPR_CODCAUS ) ;
}
if ( codcaus . full ( ) )
{
const TRectype & caus = cache ( ) . get ( " %CA7 " , codcaus ) ;
build_causqua_items ( m , caus . get ( " S1 " ) ) ;
m . set ( F_CODCAUS , codcaus , 0x3 ) ;
m . set ( F_CAUSQUA , caus . get ( " S2 " ) ) ;
}
}
void TSchedaPercipienti : : on_config_change ( )
{
_anno_dic = ini_get_int ( CONFIG_STUDIO , " 77 " , ANNO_SEL ) ;
}
void TSchedaPercipienti : : init_query_mode ( TMask & m )
{
m . set ( F_ANNODIC , _anno_dic ) ;
// Controllo se chiamata dalla contabilita'
if ( tipo_coll ( ) ! = nessuno )
{
const bool variazione = coll_variazione ( ) ;
_flag_cg = TRUE ;
TString4 tipo ;
tipo < < _coll . _tipo ;
m . set ( F_TIPOA , tipo ) ;
if ( _coll . _codanagr ! = 0L )
{
m . set ( F_CODANAGR , _coll . _codanagr ) ;
m . set ( F_CODANAGRPERC , _coll . _codanagr ) ;
m . set ( F_CODANAGRCOM , _coll . _codanagr ) ;
}
switch ( tipo_coll ( ) )
{
case fattura :
setta_nprog ( m , variazione ) ;
m . send_key ( K_AUTO_ENTER , 0 ) ;
return ;
break ;
case pagamento :
if ( coll_datanum ( ) )
{
if ( setta_nprog ( m , variazione ) )
m . send_key ( K_AUTO_ENTER , 0 ) ;
}
return ;
break ;
case occasionale :
m . send_key ( K_AUTO_ENTER , 0 ) ;
return ;
break ;
default :
break ;
}
}
if ( _from_modify )
{
m . set ( F_TIPOA , _tipoa ) ;
m . set ( F_CODANAGR , _codanagr ) ;
m . set ( F_CODANAGRPERC , _codanagr ) ;
m . set ( F_CODANAGRCOM , _codanagr ) ;
m . set ( F_RAGSOCPER , _ragsoc ) ;
m . set ( F_RAGSOCCOM , _ragsoc ) ;
}
else
{
m . hide ( - 1 ) ; // group 1 Scelta ANAGR
m . show ( - 2 ) ; // group 3 Ricerca su DATI PER
}
_from_modify = FALSE ;
// forza il ricalcolo dell'ultimo numero disponibile
const TString & dummy = m . get ( F_NPROG ) ;
if ( dummy . full ( ) )
setta_nprog ( m ) ;
}
void TSchedaPercipienti : : init_query_insert_mode ( TMask & m )
{
m . set ( F_ANNODIC , _anno_dic ) ;
// Se vengo da modifica mantieni la selezione precedente
if ( _from_modify )
{
m . set ( F_TIPOA , _tipoa ) ;
m . set ( F_CODANAGR , _codanagr ) ;
m . set ( F_CODANAGRPERC , _codanagr ) ;
m . set ( F_CODANAGRCOM , _codanagr ) ;
m . set ( F_RAGSOCPER , _ragsoc ) ;
m . set ( F_RAGSOCCOM , _ragsoc ) ;
}
else
{
m . hide ( - 2 ) ; // group 3 Nasconde ricerca su PERC
m . show ( - 1 ) ; // group 1 Ricerca su ANAGR
}
}
void TSchedaPercipienti : : rec2row ( TToken_string & r , TRectype & rec , int row )
{
TString16 dver , dpag , serie , numero , rite ;
TString16 comp , impo , perc , spesa , netto ;
TString16 nrigavers , numpag , progrbanca ;
TString SsnPerc , SsnCompl ;
r = " " ;
if ( rec . num ( ) = = LF_RVER )
{
char v1015 = rec . get_bool ( " VERS1015 " ) ? ' X ' : ' ' ;
dver = rec . get ( " DATAVERS " ) ;
char tv = rec . get_char ( " TIPOVERS " ) ;
char lv = rec . get_char ( " LUOVERS " ) ;
serie = rec . get ( " SERIE " ) ;
numero = rec . get ( " NUMERO " ) ;
rite = rec . get ( " RITENUTA " ) ;
progrbanca = rec . get ( " PROGBANC " ) ;
nrigavers = rec . get ( " NRIGA " ) ;
if ( rite . empty ( ) ) rite = " " ;
if ( progrbanca . empty ( ) ) progrbanca = " " ;
if ( nrigavers . empty ( ) ) nrigavers = " " ;
if ( serie . empty ( ) ) serie = " " ;
if ( numero . empty ( ) ) numero = " " ;
r . add ( v1015 , 0 ) ;
r . add ( dver , 1 ) ;
r . add ( lv = = ' \0 ' ? ' ' : lv ) ;
r . add ( tv = = ' \0 ' ? ' ' : tv ) ;
r . add ( serie ) ;
r . add ( numero ) ;
r . add ( progrbanca ) ;
r . add ( rite ) ;
r . add ( nrigavers ) ;
if ( v1015 = = ' X ' )
disable_vers_cells ( row ) ;
else
enable_vers_cells ( row ) ;
}
if ( rec . num ( ) = = LF_RPAG )
{
// istanza struttura pagamento
Pag_struct s ;
// compilo campi struttura
s . datapag = rec . get_date ( " DATAPAG " ) ;
s . imponibile = rec . get_real ( " IMPONIBILE " ) ;
s . perc = rec . get_real ( " PERC " ) ;
s . ritenuta = rec . get_real ( " RITENUTA " ) ;
s . compenso = rec . get_real ( " COMPENSO " ) ;
s . netto = rec . get_real ( " NETTO " ) ;
s . numvers = rec . get_long ( " NUMVERS " ) ;
s . spesa = rec . get_real ( " SPESA " ) ;
s . ctssnperc = rec . get_real ( " CTSSNPERC " ) ;
s . ctssncomp = rec . get_real ( " CTSSNCOMP " ) ;
s . ritlorda = rec . get_real ( " RITLORDA " ) ;
s . controbb = rec . get_real ( " CONTROBB " ) ;
s . detfamil = rec . get_real ( " DETFAMIL " ) ;
s . detlavdip = rec . get_real ( " DETLAVDIP " ) ;
s . totdet = rec . get_real ( " TOTDET " ) ;
s . giolavdip = rec . get_int ( " GIOLAVDIP " ) ;
s . impcpa = rec . get_real ( " IMPCPA " ) ;
s . somregconv = rec . get_real ( " SOMREGCONV " ) ;
s . alqimp10 = rec . get_real ( " ALQIMP10 " ) ;
s . cod10 = rec . get ( " COD10 " ) ;
s . utpagati = rec . get_real ( " UTPAGATI " ) ;
s . utspett = rec . get_real ( " UTSPETT " ) ;
s . ritutpag = rec . get_real ( " RITUTPAG " ) ;
s . ritutspe = rec . get_real ( " RITUTSPE " ) ;
s . nquote = rec . get_real ( " NQUOTE " ) ;
s . somnsrit = rec . get_real ( " SOMNSRIT " ) ;
s . ammlordo = rec . get_real ( " AMMLORDO " ) ;
s . quotaprov = rec . get_real ( " QUOTAPROV " ) ;
s . impnetto = rec . get_real ( " IMPNETTO " ) ;
s . comnetto = rec . get_real ( " COMNETTO " ) ;
s . numreg = rec . get_long ( PAG_NUMREG ) ;
// compilo riga di sheet
from_struct_to_sheet ( s , r ) ;
}
}
int TSchedaPercipienti : : read ( TMask & m )
{
m . autoload ( * _rel ) ;
// reperische sheet attivo forzando l'abilitazione in base al quadro
// ci<63> <20> necessario per attivare lo sheet corretto quando
// si esce/entra dalle singole schede
TSheet_field & pags = pag_sheet_enabled ( m , TRUE ) ;
pags . destroy ( ) ;
int r ;
for ( r = 0 ; r < _rel - > pag_items ( ) ; r + + )
rec2row ( pags . row ( r ) , _rel - > pag ( r ) , r ) ;
TSheet_field & vers = ( TSheet_field & ) m . field ( F_VERSAMENTI ) ;
vers . destroy ( ) ;
for ( r = 0 ; r < _rel - > ver_items ( ) ; r + + )
rec2row ( vers . row ( r ) , _rel - > ver ( r ) , r ) ;
return 0 ;
}
void TSchedaPercipienti : : enable_vers_cells ( int r , bool enable )
{
TSheet_field & ver = vers ( ) ;
// calcolo numero di colonne utili (scartando l'ultima)
int num_col = ver . row ( r ) . items ( ) - 1 ;
// abilito/disabilito celle
for ( int i = 1 ; i < num_col ; i + + )
enable ? ver . enable_cell ( r , i ) : ver . disable_cell ( r , i ) ;
}
void TSchedaPercipienti : : new_row ( TSheet_field & ver_pag , int r , bool vers )
{
TToken_string & riga = ver_pag . row ( r ) ;
if ( vers )
riga . add ( + + _lastvers , COLONNE_SIGNIFICATIVE_SPREADSHEET_VERSAMENTI ) ;
else
riga . add ( - 1 , num_sheet_column ( ) - 1 ) ;
}
//
// FILL_SHEET
//
// Determino QUI un progressivo unico per i pagamenti e i versamenti
// (NUMVERS e NUMPAG: vedi new_row())
void TSchedaPercipienti : : fill_sheet ( TMask & m )
{
// leggo codice quadro
TString16 qua ( m . get ( F_CODQUA ) ) ;
TSheet_field & pags = pag_sheet_enabled ( m ) ;
int r ;
for ( r = pags . items ( ) ; r < 16 ; r + + )
new_row ( pags , r , FALSE ) ;
TSheet_field & vers = ( TSheet_field & ) m . field ( F_VERSAMENTI ) ;
for ( r = vers . items ( ) ; r < 16 ; r + + )
new_row ( vers , r , TRUE ) ;
}
bool TSchedaPercipienti : : scrivi_dati_per ( TRectype & rec )
{
TLocalisamfile dati_per ( LF_PERC ) ;
const long codditta = rec . get_long ( " CODDITTA " ) ;
char tipoa = rec . get_char ( " TIPOA " ) ;
const long codanagr = rec . get_long ( " CODANAGR " ) ;
dati_per . zero ( ) ;
dati_per . put ( " CODDITTA " , codditta ) ;
dati_per . put ( " TIPOA " , tipoa ) ;
dati_per . put ( " CODANAGR " , codanagr ) ;
const bool preesistente = ( dati_per . read ( ) = = NOERR ) ;
if ( ! preesistente )
{
dati_per . zero ( ) ;
dati_per . put ( " CODDITTA " , codditta ) ;
dati_per . put ( " TIPOA " , tipoa ) ;
dati_per . put ( " CODANAGR " , codanagr ) ;
dati_per . write ( ) ;
}
return preesistente ;
}
int TSchedaPercipienti : : rewrite ( const TMask & m )
{
mask2rel ( m ) ;
const int err = _rel - > rewrite ( ) ;
scrivi_dati_per ( _rel - > curr ( ) ) ;
return err ;
}
int TSchedaPercipienti : : write ( const TMask & m )
{
mask2rel ( m ) ;
const int err = _rel - > write ( ) ;
scrivi_dati_per ( _rel - > curr ( ) ) ;
return err ;
}
bool TSchedaPercipienti : : check_compensi ( TMask_field & f , KEY k )
{
if ( k = = K_ENTER )
{
const bool forzatura = f . mask ( ) . get_bool ( F_FORCED ) ;
real doc_compenso ( f . get ( ) ) ;
if ( app ( ) . _tot_compenso > doc_compenso )
{
f . warning_box ( " Il totale dei compensi non puo' superare \n "
" il compenso indicato nel documento " ) ;
return forzatura ;
}
}
return TRUE ;
}
bool TSchedaPercipienti : : check_spese ( TMask_field & f , KEY k )
{
if ( k = = K_ENTER )
{
const bool forzatura = f . mask ( ) . get_bool ( F_FORCED ) ;
real doc_spese ( f . get ( ) ) ;
if ( app ( ) . _tot_spese > doc_spese )
{
f . warning_box ( " Il totale delle spese non puo' superare \n "
" la spesa indicata nel documento " ) ;
return forzatura ;
}
}
return TRUE ;
}
bool TSchedaPercipienti : : check_competenza ( TMask_field & f , KEY k )
{
if ( k = = K_ENTER )
{
const bool forzatura = f . mask ( ) . get_bool ( F_FORCED ) ;
int anno_competenza ( f . mask ( ) . get_int ( F_ANNOCOMP ) ) ;
int mese_competenza ( f . mask ( ) . get_int ( F_MESECOMP ) ) ;
if ( anno_competenza & & ! mese_competenza )
{
f . warning_box ( " Indicare anche il mese di competenza " ) ;
return forzatura ;
}
if ( ! anno_competenza & & mese_competenza )
{
f . warning_box ( " Indicare anche l'anno competenza " ) ;
return forzatura ;
}
}
return TRUE ;
}
//
// Calcola:
//
// totale compensi
// totale spese
// totale netti pagati
//
// - NB -
// FUNZIONA SOLO SE PASSA PRIMA DI QUA!
//
bool TSchedaPercipienti : : check_handler ( TMask_field & f , KEY k )
{
if ( k = = K_ENTER )
{
TMask & m = f . mask ( ) ;
const bool forzatura = m . get_bool ( F_FORCED ) ;
int i ;
TArray & rpag = app ( ) . pags ( ) . rows_array ( ) ;
app ( ) . _tot_compenso = ZERO ;
app ( ) . _tot_spese = ZERO ;
app ( ) . _tot_rit = ZERO ;
// Calcolo totale compensi, totale spese e totale ritenute
for ( i = 0 ; i < rpag . items ( ) ; i + + )
{
TToken_string & row = ( TToken_string & ) rpag [ i ] ;
if ( app ( ) . my_empty_items ( row , FALSE ) ) continue ;
real compenso = ZERO ;
real spese = ZERO ;
real ritenuta = ZERO ;
real netto = ZERO ;
int pos ;
if ( ( pos = app ( ) . token_pos ( " COMPENSO " ) ) ! = - 1 )
compenso = row . get ( pos ) ;
if ( ( pos = app ( ) . token_pos ( " SPESA " ) ) ! = - 1 )
spese = row . get ( pos ) ;
if ( ( pos = app ( ) . token_pos ( " RITENUTA " ) ) ! = - 1 )
ritenuta = row . get ( pos ) ;
app ( ) . _tot_compenso + = compenso ;
app ( ) . _tot_spese + = spese ;
app ( ) . _tot_rit + = ritenuta ;
}
TArray & rver = app ( ) . vers ( ) . rows_array ( ) ;
app ( ) . _tot_vers = ZERO ;
// Calcola totale versato
for ( i = 0 ; i < rver . items ( ) ; i + + )
{
TToken_string & row = ( TToken_string & ) rver [ i ] ;
if ( app ( ) . my_empty_items ( row , TRUE ) )
continue ;
real versato ( row . get ( 7 ) ) ;
app ( ) . _tot_vers + = versato ;
}
const int fdec = TCurrency : : get_firm_dec ( ) ;
app ( ) . _tot_rit . round ( fdec ) ;
app ( ) . _tot_vers . round ( fdec ) ;
// memorizzo i totali ritenute pagate/versate
m . set ( F_RITOPE , app ( ) . _tot_rit ) ;
m . set ( F_RITVER , app ( ) . _tot_vers ) ;
const real diff = abs ( app ( ) . _tot_vers - app ( ) . _tot_rit ) ;
if ( app ( ) . _tot_vers ! = ZERO & & diff > ZERO )
{
const bool in_euro = is_euro_value ( " " ) ;
const real THRESOLD = in_euro ? 0.50 : 500.0 ;
const bool war = in_euro ? ( diff > = THRESOLD ) : ( diff > THRESOLD ) ;
if ( war )
{
f . warning_box ( " La differenza tra il totale dei versamenti "
" ed il totale delle ritenute non puo' superare %s %s " ,
THRESOLD . string ( ) , in_euro ? " Euro " : " Lire " ) ;
return forzatura ;
}
}
}
return TRUE ;
}
// Trasferisce i dati dalla maschera alla relazione
void TSchedaPercipienti : : mask2rel ( const TMask & m )
{
// Assicurati che siano calcolate le ritenute
if ( _tot_rit . is_zero ( ) | | _tot_vers . is_zero ( ) )
{
TMask_field & datadoc = m . field ( F_DATADOC ) ;
check_handler ( datadoc , K_ENTER ) ;
}
_rel - > lfile ( ) . zero ( ) ;
m . autosave ( * _rel ) ;
// leggo chiave scheda
const long codditta = m . get_long ( F_CODDITTA ) ;
const char tipoa = m . get ( F_TIPOA ) [ 0 ] ;
const long codanagr = m . get_long ( F_CODANAGR ) ;
const int nprogr = m . get_int ( F_NPROG ) ;
// leggo valori tabella causali per calcolo
const real h_PercAssImp = m . get_real ( F_QUOTAIMP ) ;
const real h_PercCassaPrev = m . get_real ( F_CASSA_PREV ) ;
const real h_PercRitenuta = m . get_real ( F_PERRIT ) ;
const bool h_FlagInps = m . get_bool ( F_FLAG_INPS ) ;
const real h_PercInps = m . get_real ( F_PERC_INPS ) ;
const real h_PercAssImpInps = m . get_real ( F_PERC_ASS_INPS ) ;
const real h_PercCommitInps = m . get_real ( F_PERC_COMMIT_INPS ) ;
// istanza struttura di comodo per calcolo riga pagamenti
Pag_struct c ;
_rel - > destroy_rows ( ) ; // Destroy all records
pag_pack ( ) ; // Destroy all null rows
// salva pagamenti
TArray & rows = pags ( ) . rows_array ( ) ;
const int pag_rows = rows . items ( ) ;
//se trova vuoti i campi mese o anno di competenza vi copia i valori della data sulla riga
//controlla che ci sia l'enter di uscita dalla riga, che il campo data sia pieno
//03/05/2011
if ( pag_rows > 0 )
{
TRectype & scperc_rec = _rel - > curr ( LF_SCPERC ) ;
if ( scperc_rec . get_int ( SPR_MESEC ) < = 0 | | scperc_rec . get_int ( SPR_ANNOC ) < = 0 )
{
const TDate datapag = pags ( ) . cell ( 0 , 0 ) ;
scperc_rec . put ( SPR_MESEC , datapag . month ( ) ) ;
scperc_rec . put ( SPR_ANNOC , datapag . year ( ) ) ;
}
}
int i ;
for ( i = 0 ; i < pag_rows ; i + + )
{
TToken_string & row = ( TToken_string & ) rows [ i ] ;
TRectype & r = _rel - > pag ( i ) ;
long nriga = i + 1 ;
// compilo campi chiave
r . zero ( ) ;
r . put ( " CODDITTA " , codditta ) ;
r . put ( " TIPOA " , tipoa ) ;
r . put ( " CODANAGR " , codanagr ) ;
r . put ( " NPROG " , nprogr ) ;
r . put ( " NRIGA " , nriga ) ;
// compilo struttura rigo di pagamento
Pag_struct s ;
from_sheet_to_struct ( row , s ) ;
// ricalcolo riga pagamento
// (per ottenere la congruit<69> dei dati semplicemente
// registrando la scheda)
c . numreg = s . numreg ;
calcola_riga_pag ( s ,
c ,
FALSE ,
h_PercAssImp ,
h_PercCassaPrev ,
h_PercRitenuta ,
h_PercInps ,
h_PercAssImpInps ,
h_PercCommitInps ) ;
// compilo restanti campi
r . put ( " DATAPAG " , s . datapag ) ;
r . put ( " IMPONIBILE " , s . imponibile ) ;
r . put ( " PERC " , s . perc ) ;
r . put ( " RITENUTA " , s . ritenuta ) ;
r . put ( " COMPENSO " , s . compenso ) ;
r . put ( " NETTO " , s . netto ) ;
r . put ( " NUMVERS " , s . numvers ) ;
r . put ( " SPESA " , s . spesa ) ;
r . put ( " CTSSNPERC " , s . ctssnperc ) ;
r . put ( " CTSSNCOMP " , s . ctssncomp ) ;
r . put ( " RITLORDA " , s . ritlorda ) ;
r . put ( " CONTROBB " , s . controbb ) ;
r . put ( " DETFAMIL " , s . detfamil ) ;
r . put ( " DETLAVDIP " , s . detlavdip ) ;
r . put ( " TOTDET " , s . totdet ) ;
r . put ( " GIOLAVDIP " , s . giolavdip ) ;
r . put ( " IMPCPA " , s . impcpa ) ;
r . put ( " SOMREGCONV " , s . somregconv ) ;
r . put ( " ALQIMP10 " , s . alqimp10 ) ;
r . put ( " COD10 " , s . cod10 ) ;
r . put ( " UTPAGATI " , s . utpagati ) ;
r . put ( " UTSPETT " , s . utspett ) ;
r . put ( " RITUTPAG " , s . ritutpag ) ;
r . put ( " RITUTSPE " , s . ritutspe ) ;
r . put ( " NQUOTE " , s . nquote ) ;
r . put ( " SOMNSRIT " , s . somnsrit ) ;
r . put ( " AMMLORDO " , s . ammlordo ) ;
r . put ( " QUOTAPROV " , s . quotaprov ) ;
r . put ( " IMPNETTO " , s . impnetto ) ;
r . put ( " COMNETTO " , s . comnetto ) ;
r . put ( PAG_NUMREG , s . numreg ) ;
}
// salva versamenti
rows = vers ( ) . rows_array ( ) ;
for ( i = 0 ; i < rows . items ( ) ; i + + )
{
TToken_string & row = ( TToken_string & ) rows [ i ] ;
TRectype & r = _rel - > ver ( i ) ;
if ( my_empty_items ( row , TRUE ) )
continue ; // non salvare righe vuote
long nriga = i + 1 ;
r . zero ( ) ;
r . put ( " CODDITTA " , codditta ) ;
r . put ( " TIPOA " , tipoa ) ;
r . put ( " CODANAGR " , codanagr ) ;
r . put ( " NPROG " , nprogr ) ;
r . put ( " NRIGA " , nriga ) ;
// LEGGO SPREADSHEET VERSAMENTI
const bool vers1015 = ( row . get_char ( 0 ) = = ' X ' ) ;
TString16 datav = row . get ( 1 ) ;
const TDate dataver ( datav ) ;
const char luogo = row . get_char ( 2 ) ;
const char tipo = row . get_char ( 3 ) ;
const TString16 serie ( row . get ( 4 ) ) ;
const TString16 numero ( row . get ( 5 ) ) ;
const long ProgBanca ( row . get_long ( 6 ) ) ;
const real ritenuta ( row . get ( 7 ) ) ;
const int numvers ( row . get_int ( 8 ) ) ;
r . put ( " VERS1015 " , vers1015 ) ;
r . put ( " DATAVERS " , dataver ) ;
r . put ( " LUOVERS " , luogo ) ;
r . put ( " TIPOVERS " , tipo ) ;
r . put ( " SERIE " , serie ) ;
r . put ( " NUMERO " , numero ) ;
r . put ( " PROGBANC " , ProgBanca ) ;
r . put ( " RITENUTA " , ritenuta ) ;
}
}
TMask & TSchedaPercipienti : : TheMask ( ) const
{
CHECK ( _msk [ 1 ] ! = NULL , " Maschera di inserimento/modifica non ancora istanziata! " ) ;
return * _msk [ 1 ] ;
}
TSheet_field & TSchedaPercipienti : : pag_sheet_enabled ( TMask & m , bool force_enable ) const
{
TSheet_field * s = NULL ;
// istanza reference sheet a disposizione
TSheet_field & s_C = m . sfield ( F_PAGAMENTI_C ) ;
TSheet_field & s_E = m . sfield ( F_PAGAMENTI_C ) ;
TSheet_field & s_F = m . sfield ( F_PAGAMENTI_D ) ;
TSheet_field & s_G = m . sfield ( F_PAGAMENTI_D ) ;
// forza la disabilitazione di tutti se richiesta
// l'abilitazionein base al quadro
if ( force_enable )
{
s_C . hide ( ) ;
s_E . hide ( ) ;
s_F . hide ( ) ;
s_G . hide ( ) ;
}
// valorizzo reference sheet abilitato
if ( s_C . shown ( ) )
s = & s_C ;
if ( s_E . shown ( ) )
s = & s_E ;
if ( s_F . shown ( ) )
s = & s_F ;
if ( s_G . shown ( ) )
s = & s_G ;
// se nessuno abilitato forzo l'abilitazione in base al quadro
// questo si rende necessario per il primo che invoca questo
// metodo, in quanto gli sheet sono hide alla partenza
if ( s = = NULL )
{
// reperisco codice quadro della scheda
TString4 qua = " C " ;
const TString4 codcau = _rel - > lfile ( ) . get ( " CODCAUS " ) ;
const TRectype & cau = cache ( ) . get ( " %CA7 " , codcau ) ;
if ( ! cau . empty ( ) )
qua = cau . get ( " S1 " ) ;
// abilito sheet
s = & ( enable_pag_sheet ( m , qua ) ) ;
// aggancio handler
set_pag_handler ( * s ) ;
}
return * s ;
}
bool TSchedaPercipienti : : activate_pag_sheet ( TMask & m )
{
// reperisco sheet attivo da cui copiare, la Token_string pilota
// e il numero di colonne
TSheet_field & prev_s = pag_sheet_enabled ( m ) ;
TToken_string prev_pilot ( pilot_sheet ( ) ) ;
int prev_col = num_sheet_column ( ) + 1 ;
// leggo codice quadro
const TString & qua = m . get ( F_CODQUA ) ;
// abilito sheet
TSheet_field & curr_s = enable_pag_sheet ( m , qua ) ;
// reperisco la Token_string pilota dallo sheet attivo
TToken_string curr_pilot ( pilot_sheet ( ) ) ;
// copia dallo sheet disattivato a quello attivato solo se non coincidono,
// preoccupandosi di spostare le colonne al posto giusto
if ( prev_s . dlg ( ) ! = curr_s . dlg ( ) )
{
curr_s . destroy ( ) ;
for ( int i = 0 ; i < prev_s . items ( ) ; i + + )
{
TToken_string curr_row ;
for ( int j = 0 ; j < prev_col ; j + + )
{
// trovo posizione token nello sheet attivo
TString prev_token ( prev_pilot . get ( j ) ) ;
int pos = token_pos ( ( const char * ) prev_token ) ;
// copio solo se <20> presente nello sheet attivo
if ( pos ! = - 1 )
{
TString prev_val ( prev_s . row ( i ) . get ( j ) ) ;
curr_row . add ( prev_val , pos ) ;
}
}
curr_s . row ( i ) = curr_row ;
}
}
// ricalcolo tutte le righe pagamento
const real h_PercAssImp = m . get_real ( F_QUOTAIMP ) ;
const real h_PercCassaPrev = m . get_real ( F_CASSA_PREV ) ;
const real h_PercRitenuta = m . get_real ( F_PERRIT ) ;
const bool h_FlagInps = m . get_bool ( F_FLAG_INPS ) ;
const real h_PercInps = m . get_real ( F_PERC_INPS ) ;
const real h_PercAssImpInps = m . get_real ( F_PERC_ASS_INPS ) ;
const real h_PercCommitInps = m . get_real ( F_PERC_COMMIT_INPS ) ;
// istanza strutture per calcolo
Pag_struct c ;
Pag_struct s ;
// elaboro le righe di pagamento
for ( int r = 0 ; r < curr_s . items ( ) ; r + + )
{
TToken_string & t = curr_s . row ( r ) ;
if ( ! my_empty_items ( t , false ) )
{
from_sheet_to_struct ( t , s ) ;
calcola_riga_pag ( s ,
c ,
true ,
h_PercAssImp ,
h_PercCassaPrev ,
h_PercRitenuta ,
h_PercInps ,
h_PercAssImpInps ,
h_PercCommitInps ) ;
from_struct_to_sheet ( s , t ) ;
}
}
// aggancio handler pagamenti
set_pag_handler ( curr_s ) ;
// forzo ridisegno dello sheet a video
curr_s . force_update ( ) ;
return TRUE ;
}
int TSchedaPercipienti : : num_sheet_column ( ) const
{
// reperisco la Token_string pilota
TToken_string columns ( pilot_sheet ( ) ) ;
// ritorno il numero di colonne ignorando l'ultima
// che <20> ad uso interno
return columns . items ( ) - 1 ;
}
int TSchedaPercipienti : : token_pos ( const char * t ) const
{
// reperisco la Token_string pilota
TToken_string columns ( pilot_sheet ( ) ) ;
// ritorno la posizione del token richiesto
return columns . get_pos ( t ) ;
}
short TSchedaPercipienti : : token_dlg ( const char * t ) const
{
// reperisco la Token_string pilota
TToken_string columns ( pilot_sheet ( ) ) ;
// ritorno l'identificatore del token richiesto
short dlg = columns . get_pos ( t ) ;
if ( dlg > = 0 )
dlg + = 101 ;
return dlg ;
}
const char * TSchedaPercipienti : : pilot_sheet ( ) const
{
// reperisco sheet attivo
TSheet_field & s = pag_sheet_enabled ( TheMask ( ) ) ;
// individuo la testata giusta
const char * columns = NULL ;
int dlg = s . dlg ( ) ;
switch ( dlg )
{
case F_PAGAMENTI_C : columns = PILOT_SHEET [ 0 ] ; break ;
case F_PAGAMENTI_D : columns = PILOT_SHEET [ 1 ] ; break ;
// esistevano nel vecchio caso
// case F_PAGAMENTI_DB : columns = (char*)PILOT_SHEET[2]; break;
// case F_PAGAMENTI_G : columns = (char*)PILOT_SHEET[3]; break;
default : break ;
}
// ritorno la Token_string pilota
return columns ;
}
Pag_struct & TSchedaPercipienti : : from_sheet_to_struct ( TToken_string & t , Pag_struct & s )
{
// reperisco la Token_string pilota
TToken_string columns ( pilot_sheet ( ) ) ;
// azzero struttura
clear_struct ( s ) ;
// posizione dell'informazione all'interno della Token_string
int pos ;
// set data pagamento
if ( ( pos = token_pos ( " DATAPAG " ) ) ! = - 1 )
{
TString16 datap = t . get ( pos ) ;
s . datapag = datap ;
}
// set imponibile
if ( ( pos = token_pos ( " IMPONIBILE " ) ) ! = - 1 )
s . imponibile = t . get ( pos ) ;
// set percentuale ritenuta
if ( ( pos = token_pos ( " PERC " ) ) ! = - 1 )
s . perc = t . get ( pos ) ;
// set ritenuta
if ( ( pos = token_pos ( " RITENUTA " ) ) ! = - 1 )
s . ritenuta = t . get ( pos ) ;
// set compenso
if ( ( pos = token_pos ( " COMPENSO " ) ) ! = - 1 )
s . compenso = t . get ( pos ) ;
// set compenso netto
if ( ( pos = token_pos ( " NETTO " ) ) ! = - 1 )
s . netto = t . get ( pos ) ;
// set numero versamento collegato
if ( ( pos = token_pos ( " NUMVERS " ) ) ! = - 1 )
s . numvers = t . get_long ( pos ) ;
// set spesa
if ( ( pos = token_pos ( " SPESA " ) ) ! = - 1 )
s . spesa = t . get ( pos ) ;
// set contr.10% percipiente
if ( ( pos = token_pos ( " CTSSNPERC " ) ) ! = - 1 )
s . ctssnperc = t . get ( pos ) ;
// set contr.10% complessivo
if ( ( pos = token_pos ( " CTSSNCOMP " ) ) ! = - 1 )
s . ctssncomp = t . get ( pos ) ;
// set ritenuta lorda
if ( ( pos = token_pos ( " RITLORDA " ) ) ! = - 1 )
s . ritlorda = t . get ( pos ) ;
// set contributi obbligatori
if ( ( pos = token_pos ( " CONTROBB " ) ) ! = - 1 )
s . controbb = t . get ( pos ) ;
// set detrazioni famigliari
if ( ( pos = token_pos ( " DETFAMIL " ) ) ! = - 1 )
s . detfamil = t . get ( pos ) ;
// set detrazioni lavoro dipendente
if ( ( pos = token_pos ( " DETLAVDIP " ) ) ! = - 1 )
s . detlavdip = t . get ( pos ) ;
// set totale detrazioni
if ( ( pos = token_pos ( " TOTDET " ) ) ! = - 1 )
s . totdet = t . get ( pos ) ;
// set giorni lavoro dipendente
if ( ( pos = token_pos ( " GIOLAVDIP " ) ) ! = - 1 )
s . giolavdip = t . get_int ( pos ) ;
// set importo CPA
if ( ( pos = token_pos ( " IMPCPA " ) ) ! = - 1 )
s . impcpa = t . get ( pos ) ;
// set somme regime convenzionale
if ( ( pos = token_pos ( " SOMREGCONV " ) ) ! = - 1 )
s . somregconv = t . get ( pos ) ;
// set percentuale contributo 10%
if ( ( pos = token_pos ( " ALQIMP10 " ) ) ! = - 1 )
s . alqimp10 = t . get ( pos ) ;
// set codice contributo 10%
if ( ( pos = token_pos ( " COD10 " ) ) ! = - 1 )
s . cod10 = t . get ( pos ) ;
// set utili pagati
if ( ( pos = token_pos ( " UTPAGATI " ) ) ! = - 1 )
s . utpagati = t . get ( pos ) ;
// set utili spettanti
if ( ( pos = token_pos ( " UTSPETT " ) ) ! = - 1 )
s . utspett = t . get ( pos ) ;
// set ritenuta utili pagati
if ( ( pos = token_pos ( " RITUTPAG " ) ) ! = - 1 )
s . ritutpag = t . get ( pos ) ;
// set ritenuta utili spettanti
if ( ( pos = token_pos ( " RITUTSPE " ) ) ! = - 1 )
s . ritutspe = t . get ( pos ) ;
// set numero quote
if ( ( pos = token_pos ( " NQUOTE " ) ) ! = - 1 )
s . nquote = t . get ( pos ) ;
// set somme non sogg.ritenuta
if ( ( pos = token_pos ( " SOMNSRIT " ) ) ! = - 1 )
s . somnsrit = t . get ( pos ) ;
// set ammontare lordo
if ( ( pos = token_pos ( " AMMLORDO " ) ) ! = - 1 )
s . ammlordo = t . get ( pos ) ;
// set quota provvigioni
if ( ( pos = token_pos ( " QUOTAPROV " ) ) ! = - 1 )
s . quotaprov = t . get ( pos ) ;
// set imponibile al netto ritenute
if ( ( pos = token_pos ( " IMPNETTO " ) ) ! = - 1 )
s . impnetto = t . get ( pos ) ;
// set compenso al netto ritenute
if ( ( pos = token_pos ( " COMNETTO " ) ) ! = - 1 )
s . comnetto = t . get ( pos ) ;
// set numero versamento collegato
if ( ( pos = token_pos ( " NUMVERS " ) ) ! = - 1 )
s . numvers = t . get_long ( pos ) ;
// set numero registrazione
if ( ( pos = token_pos ( PAG_NUMREG ) ) ! = - 1 )
s . numreg = t . get_long ( pos ) ;
return s ;
}
void TSchedaPercipienti : : from_struct_to_sheet ( const Pag_struct & s , TToken_string & t )
{
// reperisco la Token_string pilota
TToken_string columns ( pilot_sheet ( ) ) ;
// posizione dell'informazione all'interno della Token_string
int pos ;
// set data pagamento
if ( ( pos = token_pos ( " DATAPAG " ) ) ! = - 1 )
t . add ( s . datapag , pos ) ;
// set imponibile
if ( ( pos = token_pos ( " IMPONIBILE " ) ) ! = - 1 )
t . add ( s . imponibile . string ( ) , pos ) ;
// set percentuale ritenuta
if ( ( pos = token_pos ( " PERC " ) ) ! = - 1 )
t . add ( s . perc . string ( ) , pos ) ;
// set ritenuta
if ( ( pos = token_pos ( " RITENUTA " ) ) ! = - 1 )
t . add ( s . ritenuta . string ( ) , pos ) ;
// set compenso
if ( ( pos = token_pos ( " COMPENSO " ) ) ! = - 1 )
t . add ( s . compenso . string ( ) , pos ) ;
// set compenso netto
if ( ( pos = token_pos ( " NETTO " ) ) ! = - 1 )
t . add ( s . netto . string ( ) , pos ) ;
// set numero versamento collegato
if ( ( pos = token_pos ( " NUMVERS " ) ) ! = - 1 )
t . add ( s . numvers , pos ) ;
// set spesa
if ( ( pos = token_pos ( " SPESA " ) ) ! = - 1 )
t . add ( s . spesa . string ( ) , pos ) ;
// set contr.10% percipiente
if ( ( pos = token_pos ( " CTSSNPERC " ) ) ! = - 1 )
t . add ( s . ctssnperc . string ( ) , pos ) ;
// set contr.10% complessivo
if ( ( pos = token_pos ( " CTSSNCOMP " ) ) ! = - 1 )
t . add ( s . ctssncomp . string ( ) , pos ) ;
// set ritenuta lorda
if ( ( pos = token_pos ( " RITLORDA " ) ) ! = - 1 )
t . add ( s . ritlorda . string ( ) , pos ) ;
// set contributi obbligatori
if ( ( pos = token_pos ( " CONTROBB " ) ) ! = - 1 )
t . add ( s . controbb . string ( ) , pos ) ;
// set detrazioni famigliari
if ( ( pos = token_pos ( " DETFAMIL " ) ) ! = - 1 )
t . add ( s . detfamil . string ( ) , pos ) ;
// set detrazioni lavoro dipendente
if ( ( pos = token_pos ( " DETLAVDIP " ) ) ! = - 1 )
t . add ( s . detlavdip . string ( ) , pos ) ;
// set totale detrazioni
if ( ( pos = token_pos ( " TOTDET " ) ) ! = - 1 )
t . add ( s . totdet . string ( ) , pos ) ;
// set giorni lavoro dipendente
if ( ( pos = token_pos ( " GIOLAVDIP " ) ) ! = - 1 )
t . add ( s . giolavdip , pos ) ;
// set importo CPA
if ( ( pos = token_pos ( " IMPCPA " ) ) ! = - 1 )
t . add ( s . impcpa . string ( ) , pos ) ;
// set somme regime convenzionale
if ( ( pos = token_pos ( " SOMREGCONV " ) ) ! = - 1 )
t . add ( s . somregconv . string ( ) , pos ) ;
// set percentuale contributo 10%
if ( ( pos = token_pos ( " ALQIMP10 " ) ) ! = - 1 )
t . add ( s . alqimp10 . string ( ) , pos ) ;
// set codice contributo 10%
if ( ( pos = token_pos ( " COD10 " ) ) ! = - 1 )
t . add ( s . cod10 , pos ) ;
// set utili pagati
if ( ( pos = token_pos ( " UTPAGATI " ) ) ! = - 1 )
t . add ( s . utpagati . string ( ) , pos ) ;
// set utili spettanti
if ( ( pos = token_pos ( " UTSPETT " ) ) ! = - 1 )
t . add ( s . utspett . string ( ) , pos ) ;
// set ritenuta utili pagati
if ( ( pos = token_pos ( " RITUTPAG " ) ) ! = - 1 )
t . add ( s . ritutpag . string ( ) , pos ) ;
// set ritenuta utili spettanti
if ( ( pos = token_pos ( " RITUTSPE " ) ) ! = - 1 )
t . add ( s . ritutspe . string ( ) , pos ) ;
// set numero quote
if ( ( pos = token_pos ( " NQUOTE " ) ) ! = - 1 )
t . add ( s . nquote . string ( ) , pos ) ;
// set somme non sogg.ritenuta
if ( ( pos = token_pos ( " SOMNSRIT " ) ) ! = - 1 )
t . add ( s . somnsrit . string ( ) , pos ) ;
// set ammontare lordo
if ( ( pos = token_pos ( " AMMLORDO " ) ) ! = - 1 )
t . add ( s . ammlordo . string ( ) , pos ) ;
// set quota provvigioni
if ( ( pos = token_pos ( " QUOTAPROV " ) ) ! = - 1 )
t . add ( s . quotaprov . string ( ) , pos ) ;
// set imponibile al netto ritenute
if ( ( pos = token_pos ( " IMPNETTO " ) ) ! = - 1 )
t . add ( s . impnetto . string ( ) , pos ) ;
// set compenso al netto ritenute
if ( ( pos = token_pos ( " COMNETTO " ) ) ! = - 1 )
t . add ( s . comnetto . string ( ) , pos ) ;
// set numero versamento collegato
if ( ( pos = token_pos ( " NUMVERS " ) ) ! = - 1 )
t . add ( s . numvers , pos ) ;
// set numero registrazione
if ( ( pos = token_pos ( PAG_NUMREG ) ) ! = - 1 )
t . add ( s . numreg , pos ) ;
}
Pag_struct & TSchedaPercipienti : : from_mask_to_struct ( const TMask & m , Pag_struct & s ) const
{
// reperisco la Token_string pilota
TToken_string columns ( pilot_sheet ( ) ) ;
// azzero struttura
clear_struct ( s ) ;
// identificatore del token all'interno della maschera
int dlg ;
// set data pagamento
if ( ( dlg = token_dlg ( " DATAPAG " ) ) ! = - 1 )
s . datapag = m . get_date ( dlg ) ;
// set imponibile
if ( ( dlg = token_dlg ( " IMPONIBILE " ) ) ! = - 1 )
s . imponibile = m . get_real ( dlg ) ;
// set percentuale ritenuta
if ( ( dlg = token_dlg ( " PERC " ) ) ! = - 1 )
s . perc = m . get_real ( dlg ) ;
// set ritenuta
if ( ( dlg = token_dlg ( " RITENUTA " ) ) ! = - 1 )
s . ritenuta = m . get_real ( dlg ) ;
// set compenso
if ( ( dlg = token_dlg ( " COMPENSO " ) ) ! = - 1 )
s . compenso = m . get_real ( dlg ) ;
// set compenso netto
if ( ( dlg = token_dlg ( " NETTO " ) ) ! = - 1 )
s . netto = m . get_real ( dlg ) ;
// set spesa
if ( ( dlg = token_dlg ( " SPESA " ) ) ! = - 1 )
s . spesa = m . get_real ( dlg ) ;
// set contr.10% percipiente
if ( ( dlg = token_dlg ( " CTSSNPERC " ) ) ! = - 1 )
s . ctssnperc = m . get_real ( dlg ) ;
// set contr.10% complessivo
if ( ( dlg = token_dlg ( " CTSSNCOMP " ) ) ! = - 1 )
s . ctssncomp = m . get_real ( dlg ) ;
// set ritenuta lorda
if ( ( dlg = token_dlg ( " RITLORDA " ) ) ! = - 1 )
s . ritlorda = m . get_real ( dlg ) ;
// set contributi obbligatori
if ( ( dlg = token_dlg ( " CONTROBB " ) ) ! = - 1 )
s . controbb = m . get_real ( dlg ) ;
// set detrazioni famigliari
if ( ( dlg = token_dlg ( " DETFAMIL " ) ) ! = - 1 )
s . detfamil = m . get_real ( dlg ) ;
// set detrazioni lavoro dipendente
if ( ( dlg = token_dlg ( " DETLAVDIP " ) ) ! = - 1 )
s . detlavdip = m . get_real ( dlg ) ;
// set totale detrazioni
if ( ( dlg = token_dlg ( " TOTDET " ) ) ! = - 1 )
s . totdet = m . get_real ( dlg ) ;
// set giorni lavoro dipendente
if ( ( dlg = token_dlg ( " GIOLAVDIP " ) ) ! = - 1 )
s . giolavdip = m . get_int ( dlg ) ;
// set importo CPA
if ( ( dlg = token_dlg ( " IMPCPA " ) ) ! = - 1 )
s . impcpa = m . get_real ( dlg ) ;
// set somme regime convenzionale
if ( ( dlg = token_dlg ( " SOMREGCONV " ) ) ! = - 1 )
s . somregconv = m . get_real ( dlg ) ;
// set percentuale contributo 10%
if ( ( dlg = token_dlg ( " ALQIMP10 " ) ) ! = - 1 )
s . alqimp10 = m . get_real ( dlg ) ;
// set codice contributo 10%
if ( ( dlg = token_dlg ( " COD10 " ) ) ! = - 1 )
s . cod10 = m . get ( dlg ) ;
// set utili pagati
if ( ( dlg = token_dlg ( " UTPAGATI " ) ) ! = - 1 )
s . utpagati = m . get_real ( dlg ) ;
// set utili spettanti
if ( ( dlg = token_dlg ( " UTSPETT " ) ) ! = - 1 )
s . utspett = m . get_real ( dlg ) ;
// set ritenuta utili pagati
if ( ( dlg = token_dlg ( " RITUTPAG " ) ) ! = - 1 )
s . ritutpag = m . get_real ( dlg ) ;
// set ritenuta utili spettanti
if ( ( dlg = token_dlg ( " RITUTSPE " ) ) ! = - 1 )
s . ritutspe = m . get_real ( dlg ) ;
// set numero quote
if ( ( dlg = token_dlg ( " NQUOTE " ) ) ! = - 1 )
s . nquote = m . get_real ( dlg ) ;
// set somme non sogg.ritenuta
if ( ( dlg = token_dlg ( " SOMNSRIT " ) ) ! = - 1 )
s . somnsrit = m . get_real ( dlg ) ;
// set ammontare lordo
if ( ( dlg = token_dlg ( " AMMLORDO " ) ) ! = - 1 )
s . ammlordo = m . get_real ( dlg ) ;
// set quota provvigioni
if ( ( dlg = token_dlg ( " QUOTAPROV " ) ) ! = - 1 )
s . quotaprov = m . get_real ( dlg ) ;
// set imponibile al netto ritenute
if ( ( dlg = token_dlg ( " IMPNETTO " ) ) ! = - 1 )
s . impnetto = m . get_real ( dlg ) ;
// set compenso al netto ritenute
if ( ( dlg = token_dlg ( " COMNETTO " ) ) ! = - 1 )
s . comnetto = m . get_real ( dlg ) ;
// set numero versamento collegato
if ( ( dlg = token_dlg ( " NUMVERS " ) ) ! = - 1 )
s . numvers = m . get_long ( dlg ) ;
return s ;
}
void TSchedaPercipienti : : from_struct_to_mask ( const Pag_struct & s , TMask & m ) const
{
// reperisco la Token_string pilota
TToken_string columns ( pilot_sheet ( ) ) ;
// identificatore del token all'interno della maschera
int dlg ;
// set data pagamento
if ( ( dlg = token_dlg ( " DATAPAG " ) ) ! = - 1 )
m . set ( dlg , s . datapag ) ;
// set imponibile
if ( ( dlg = token_dlg ( " IMPONIBILE " ) ) ! = - 1 )
m . set ( dlg , s . imponibile ) ;
// set percentuale ritenuta
if ( ( dlg = token_dlg ( " PERC " ) ) ! = - 1 )
m . set ( dlg , s . perc ) ;
// set ritenuta
if ( ( dlg = token_dlg ( " RITENUTA " ) ) ! = - 1 )
m . set ( dlg , s . ritenuta ) ;
// set compenso
if ( ( dlg = token_dlg ( " COMPENSO " ) ) ! = - 1 )
m . set ( dlg , s . compenso ) ;
// set compenso netto
if ( ( dlg = token_dlg ( " NETTO " ) ) ! = - 1 )
m . set ( dlg , s . netto ) ;
// set spesa
if ( ( dlg = token_dlg ( " SPESA " ) ) ! = - 1 )
m . set ( dlg , s . spesa ) ;
// set contr.10% percipiente
if ( ( dlg = token_dlg ( " CTSSNPERC " ) ) ! = - 1 )
m . set ( dlg , s . ctssnperc ) ;
// set contr.10% complessivo
if ( ( dlg = token_dlg ( " CTSSNCOMP " ) ) ! = - 1 )
m . set ( dlg , s . ctssncomp ) ;
// set ritenuta lorda
if ( ( dlg = token_dlg ( " RITLORDA " ) ) ! = - 1 )
m . set ( dlg , s . ritlorda ) ;
// set contributi obbligatori
if ( ( dlg = token_dlg ( " CONTROBB " ) ) ! = - 1 )
m . set ( dlg , s . controbb ) ;
// set detrazioni famigliari
if ( ( dlg = token_dlg ( " DETFAMIL " ) ) ! = - 1 )
m . set ( dlg , s . detfamil ) ;
// set detrazioni lavoro dipendente
if ( ( dlg = token_dlg ( " DETLAVDIP " ) ) ! = - 1 )
m . set ( dlg , s . detlavdip ) ;
// set totale detrazioni
if ( ( dlg = token_dlg ( " TOTDET " ) ) ! = - 1 )
m . set ( dlg , s . totdet ) ;
// set giorni lavoro dipendente
if ( ( dlg = token_dlg ( " GIOLAVDIP " ) ) ! = - 1 )
m . set ( dlg , s . giolavdip ) ;
// set importo CPA
if ( ( dlg = token_dlg ( " IMPCPA " ) ) ! = - 1 )
m . set ( dlg , s . impcpa ) ;
// set somme regime convenzionale
if ( ( dlg = token_dlg ( " SOMREGCONV " ) ) ! = - 1 )
m . set ( dlg , s . somregconv ) ;
// set percentuale contributo 10%
if ( ( dlg = token_dlg ( " ALQIMP10 " ) ) ! = - 1 )
m . set ( dlg , s . alqimp10 ) ;
// set codice contributo 10%
if ( ( dlg = token_dlg ( " COD10 " ) ) ! = - 1 )
m . set ( dlg , s . cod10 ) ;
// set utili pagati
if ( ( dlg = token_dlg ( " UTPAGATI " ) ) ! = - 1 )
m . set ( dlg , s . utpagati ) ;
// set utili spettanti
if ( ( dlg = token_dlg ( " UTSPETT " ) ) ! = - 1 )
m . set ( dlg , s . utspett ) ;
// set ritenuta utili pagati
if ( ( dlg = token_dlg ( " RITUTPAG " ) ) ! = - 1 )
m . set ( dlg , s . ritutpag ) ;
// set ritenuta utili spettanti
if ( ( dlg = token_dlg ( " RITUTSPE " ) ) ! = - 1 )
m . set ( dlg , s . ritutspe ) ;
// set numero quote
if ( ( dlg = token_dlg ( " NQUOTE " ) ) ! = - 1 )
m . set ( dlg , s . nquote ) ;
// set somme non sogg.ritenuta
if ( ( dlg = token_dlg ( " SOMNSRIT " ) ) ! = - 1 )
m . set ( dlg , s . somnsrit ) ;
// set ammontare lordo
if ( ( dlg = token_dlg ( " AMMLORDO " ) ) ! = - 1 )
m . set ( dlg , s . ammlordo ) ;
// set quota provvigioni
if ( ( dlg = token_dlg ( " QUOTAPROV " ) ) ! = - 1 )
m . set ( dlg , s . quotaprov ) ;
// set imponibile al netto ritenute
if ( ( dlg = token_dlg ( " IMPNETTO " ) ) ! = - 1 )
m . set ( dlg , s . impnetto ) ;
// set compenso al netto ritenute
if ( ( dlg = token_dlg ( " COMNETTO " ) ) ! = - 1 )
m . set ( dlg , s . comnetto ) ;
// set numero versamento collegato
if ( ( dlg = token_dlg ( " NUMVERS " ) ) ! = - 1 )
m . set ( dlg , s . numvers ) ;
}
Pag_struct & TSchedaPercipienti : : clear_struct ( Pag_struct & s ) const
{
s . datapag = NULLDATE ;
s . imponibile = ZERO ;
s . perc = ZERO ;
s . ritenuta = ZERO ;
s . compenso = ZERO ;
s . netto = ZERO ;
s . numvers = - 1L ;
s . spesa = ZERO ;
s . ctssnperc = ZERO ;
s . ctssncomp = ZERO ;
s . ritlorda = ZERO ;
s . controbb = ZERO ;
s . detfamil = ZERO ;
s . detlavdip = ZERO ;
s . totdet = ZERO ;
s . giolavdip = 0 ;
s . impcpa = ZERO ;
s . somregconv = ZERO ;
s . alqimp10 = ZERO ;
s . cod10 = " " ;
s . utpagati = ZERO ;
s . utspett = ZERO ;
s . ritutpag = ZERO ;
s . ritutspe = ZERO ;
s . nquote = ZERO ;
s . somnsrit = ZERO ;
s . ammlordo = ZERO ;
s . quotaprov = ZERO ;
s . impnetto = ZERO ;
s . comnetto = ZERO ;
s . numreg = 0L ;
return s ;
}
Pag_struct & TSchedaPercipienti : : calcola_riga_pag ( Pag_struct & s ,
Pag_struct & c ,
bool force ,
const real & h_PercAssImp ,
const real & h_PercCassaPrev ,
const real & h_PercRitenuta ,
const real & h_PercInps ,
const real & h_PercAssImpInps ,
const real & h_PercCommitInps ) const
{
const int fdec = TCurrency : : get_firm_dec ( ) ;
// azzera struttura di valori calcolati
clear_struct ( c ) ;
// calcolo CPA
c . impcpa = s . compenso * h_PercCassaPrev / ( CENTO + h_PercCassaPrev ) ;
c . impcpa . round ( fdec ) ;
if ( s . impcpa . is_zero ( ) | | force )
s . impcpa = c . impcpa ;
// calcolo imponibile
c . imponibile = ( s . compenso - s . impcpa ) * h_PercAssImp / CENTO ;
c . imponibile . round ( fdec ) ;
//if (s.imponibile.is_zero() || force) // 18-02-2016 imponibile nullo ammissibile per minimi
if ( force )
s . imponibile = c . imponibile ;
// percentuale ritenuta acconto
if ( s . perc . is_zero ( ) | | force )
s . perc = h_PercRitenuta ;
// calcolo ritenuta lorda
c . ritlorda = s . imponibile * s . perc / CENTO ;
c . ritlorda . round ( fdec ) ;
s . ritlorda = c . ritlorda ;
// calcolo totale detrazioni
c . totdet = s . detfamil + s . detlavdip ;
if ( abs ( c . totdet ) > abs ( s . ritlorda ) )
c . totdet = s . ritlorda ;
s . totdet = c . totdet ;
// calcolo ritenuta
c . ritenuta = s . ritlorda - s . totdet ;
if ( s . ritenuta . is_zero ( ) | | force )
s . ritenuta = c . ritenuta ;
// percentuale assoggettamento Inps
if ( s . alqimp10 . is_zero ( ) | | force )
s . alqimp10 = h_PercAssImpInps ;
// calcolo contributo Inps complessivo
c . ctssncomp = ( ( s . compenso * s . alqimp10 / CENTO ) * h_PercInps ) / CENTO ;
c . ctssncomp . round ( fdec ) ;
if ( s . ctssncomp . is_zero ( ) | | force )
s . ctssncomp = c . ctssncomp ;
// calcolo contributo Inps del percipiente
if ( h_PercCommitInps < = ZERO )
2016-09-16 11:03:16 +00:00
c . ctssnperc = s . ctssncomp - ( s . ctssncomp * DUE / TRE ) ;
2016-09-09 13:58:28 +00:00
else
c . ctssnperc = s . ctssncomp - ( s . ctssncomp * h_PercCommitInps / CENTO ) ;
c . ctssnperc . round ( fdec ) ;
if ( s . ctssnperc = = ZERO | | force )
s . ctssnperc = c . ctssnperc ;
// calcolo utili pagati
if ( abs ( s . utpagati ) > abs ( s . imponibile ) )
s . utpagati = s . imponibile ;
// calcolo ritenute utili pagati
c . ritutpag = s . utpagati * s . perc / CENTO ;
c . ritutpag . round ( fdec ) ;
if ( s . ritutpag = = ZERO | | force )
s . ritutpag = c . ritutpag ;
if ( abs ( s . ritutpag ) > abs ( s . ritenuta ) )
s . ritutpag = s . ritenuta ;
// calcolo utili spettanti
s . utspett = s . imponibile - s . utpagati ;
// calcolo ritenute utili spettanti
s . ritutspe = s . ritenuta - s . ritutpag ;
// calcolo compenso netto
s . netto = s . compenso + s . spesa - s . ritenuta - s . ctssnperc ;
// calcolo somme non soggette a ritenuta
s . somnsrit = s . compenso - s . imponibile + s . spesa - s . impcpa - s . somregconv ;
// calcolo ammontare lordo
s . ammlordo = s . imponibile + s . somnsrit + s . controbb + s . somregconv ;
// calcolo quota provvigioni
s . quotaprov = s . somnsrit - s . spesa ;
// calcolo imponibile al netto delle ritenute
s . impnetto = s . imponibile - s . ritenuta ;
// calcolo compenso al netto delle ritenute
s . comnetto = s . compenso - s . ritenuta ;
return s ;
}
TSheet_field & TSchedaPercipienti : : enable_pag_sheet ( TMask & m , const TString & quadro ) const
{
TSheet_field * s = NULL ;
TSheet_field & s_C = ( TSheet_field & ) m . field ( F_PAGAMENTI_C ) ;
if ( quadro = = " SC " | | quadro = = " SE " )
{
s_C . show ( ) ;
s = & s_C ;
}
else s_C . hide ( ) ;
TSheet_field & s_F = ( TSheet_field & ) m . field ( F_PAGAMENTI_D ) ;
if ( quadro = = " SF " | | quadro = = " SG " )
{
s_F . show ( ) ;
s = & s_F ;
}
else s_F . hide ( ) ;
// abilito sheet di default nel caso il quadro non fosse uno dei previsti
if ( s = = NULL )
{
s_C . show ( ) ;
s = & s_C ;
}
return * s ;
}
void TSchedaPercipienti : : set_pag_handler ( TSheet_field & s ) const
{
// aggancio handler notify dei pagamenti
s . set_notify ( pags_notify ) ;
// aggancio handler data pagamento
int dlg = token_dlg ( " DATAPAG " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler imponibile
dlg = token_dlg ( " IMPONIBILE " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler percentuale ritenuta
dlg = token_dlg ( " PERC " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler ritenuta
dlg = token_dlg ( " RITENUTA " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler compensi
dlg = token_dlg ( " COMPENSO " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler spesa
dlg = token_dlg ( " SPESA " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler contributo Inps percipiente
dlg = token_dlg ( " CTSSNPERC " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler contributo Inps complessivo
dlg = token_dlg ( " CTSSNCOMP " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler contributi obbligatori
dlg = token_dlg ( " CONTROBB " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler detrazioni familiari a carico
dlg = token_dlg ( " DETFAMIL " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler contributo Inps complessivo
dlg = token_dlg ( " DETLAVDIP " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler CPA
dlg = token_dlg ( " IMPCPA " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler contributo Inps complessivo
dlg = token_dlg ( " SOMREGCONV " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler percentuale assogg.imponibile Inps
dlg = token_dlg ( " ALQIMP10 " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler utili pagati
dlg = token_dlg ( " UTPAGATI " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler ritenute utili pagati
dlg = token_dlg ( " RITUTPAG " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler numero quote
dlg = token_dlg ( " NQUOTE " ) ;
if ( dlg ! = - 1 ) s . sheet_mask ( ) . set_handler ( dlg , pag_standard_handler ) ;
// aggancio handler button azzera
s . sheet_mask ( ) . set_handler ( DLG_AZZERAPAG , pag_azzera ) ;
}
void TSchedaPercipienti : : build_causqua_items ( TMask & m , const TString & quadro ) const
{
// reference al campo causale quadro
TEdit_field & f_causqua = m . efield ( F_CAUSQUA ) ;
// refernce allo sheet del campo causale quadro
TString_array & Items = f_causqua . sheet ( ) - > rows_array ( ) ;
// rimuovo tutti gli items
Items . destroy ( ) ;
// genero i nuovi items
if ( quadro = = " SC " )
for ( int i = 0 ; ITEMS_SC [ i ] ; i + + )
Items . add ( ITEMS_SC [ i ] ) ;
if ( quadro = = " SE " )
for ( int i = 0 ; ITEMS_SE [ i ] ; i + + )
Items . add ( ITEMS_SE [ i ] ) ;
if ( quadro = = " SF " )
for ( int i = 0 ; ITEMS_SF [ i ] ; i + + )
Items . add ( ITEMS_SF [ i ] ) ;
if ( quadro = = " SG " )
for ( int i = 0 ; ITEMS_SG [ i ] ; i + + )
Items . add ( ITEMS_SG [ i ] ) ;
if ( quadro = = " LA " )
for ( int i = 0 ; ITEMS_LA [ i ] ; i + + )
2016-09-16 11:03:16 +00:00
Items . add ( ITEMS_LA [ i ] ) ;
2016-09-09 13:58:28 +00:00
}
int SchedaPerc ( int argc , char * argv [ ] )
{
TSchedaPercipienti a ;
a . run ( argc , argv , TR ( " Scheda Percipienti " ) ) ;
return 0 ;
}