1995-09-01 09:38:25 +00:00
// cg3400 - Stampa libro giornale
2006-12-13 16:22:33 +00:00
# include "cglib01.h"
# include "cglib03.h"
# include "cg2103.h"
# include "cg3400a.h"
# include "cg3400b.h"
1995-09-01 09:38:25 +00:00
# include <config.h>
1999-04-06 15:34:39 +00:00
# include <currency.h>
1995-09-01 09:38:25 +00:00
# include <mask.h>
# include <tabutil.h>
# include <printapp.h>
# include <progind.h>
1997-06-19 14:33:52 +00:00
# include <recarray.h>
1995-09-01 09:38:25 +00:00
# include <mov.h>
# include <rmov.h>
# include <rmoviva.h>
# include <nditte.h>
# include <anagr.h>
# include <anafis.h>
# include <anagiu.h>
# include <causali.h>
# include <comuni.h>
# include <pconti.h>
# include <clifo.h>
# include <occas.h>
1997-10-20 14:23:01 +00:00
HIDDEN const char * REAL_PICTURE = " ###.###.###.###.### " ;
1995-09-01 09:38:25 +00:00
HIDDEN const int RIGHE_FOOTER = 3 ;
HIDDEN const int WCAUS132 = 20 ;
HIDDEN const int WOPER132 = 28 ;
HIDDEN const int WCONTO132 = 35 ;
HIDDEN const int POSCONTO = 74 ;
HIDDEN const int DARE132 = 95 ;
HIDDEN const int AVERE132 = 112 ;
1997-10-20 14:23:01 +00:00
HIDDEN const int DARE198 = 152 ;
1995-09-01 09:38:25 +00:00
HIDDEN const int AVERE198 = 174 ;
1997-10-20 14:23:01 +00:00
HIDDEN const int SCRITTA = 26 ;
HIDDEN const int TOTDARE132 = 84 ;
HIDDEN const int SEZA132 = 108 ;
HIDDEN const int TOTAVERE132 = 110 ;
1995-11-17 14:29:24 +00:00
2004-04-28 20:45:59 +00:00
enum descr { causale , conto , operazione } ;
enum tipo_sospensione { nessuna , normale , vol_affari , liquidazione } ;
1999-04-06 15:34:39 +00:00
1995-09-01 09:38:25 +00:00
class TContoOccas : public TBill
{
1999-04-06 15:34:39 +00:00
TString16 _occfpi ;
TAssoc_array _desc ;
1995-09-01 09:38:25 +00:00
public :
const TContoOccas & set ( int g = 0 , int c = 0 , long s = 0L , char t = ' ' ,
1999-04-06 15:34:39 +00:00
const char * occfpi = NULL ) ;
1995-09-01 09:38:25 +00:00
const TString & descrizione ( ) ;
1999-04-06 15:34:39 +00:00
TContoOccas ( ) ;
virtual ~ TContoOccas ( ) { }
1995-09-01 09:38:25 +00:00
} ;
1999-04-06 15:34:39 +00:00
TContoOccas : : TContoOccas ( )
{ }
const TContoOccas & TContoOccas : : set ( int g , int c , long s , char t , const char * occfpi )
1995-09-01 09:38:25 +00:00
{
1999-04-06 15:34:39 +00:00
TBill : : set ( g , c , s , t ) ;
2004-06-25 10:18:43 +00:00
_occfpi = t > ' ' ? occfpi : " " ;
1995-09-01 09:38:25 +00:00
return * this ;
}
const TString & TContoOccas : : descrizione ( )
1999-04-06 15:34:39 +00:00
{
2004-06-04 11:20:51 +00:00
if ( tipo ( ) > ' ' & & _occfpi . not_empty ( ) )
1995-09-01 09:38:25 +00:00
{
1999-04-06 15:34:39 +00:00
TString16 code ; code < < tipo ( ) < < ' | ' < < sottoconto ( ) ;
2004-06-04 11:20:51 +00:00
const bool really_occas = cache ( ) . get ( LF_CLIFO , code , CLI_OCCAS ) . not_empty ( ) ;
1999-04-06 15:34:39 +00:00
if ( really_occas )
2003-03-14 15:13:36 +00:00
return cache ( ) . get ( LF_OCCAS , _occfpi , " RAGSOC " ) ;
1995-09-01 09:38:25 +00:00
}
1996-10-07 14:07:39 +00:00
1999-04-06 15:34:39 +00:00
TString16 code ; code . format ( " %c%03d%03d%06ld " ,
tipo ( ) , gruppo ( ) , conto ( ) , sottoconto ( ) ) ;
TString * d = ( TString * ) _desc . objptr ( code ) ;
if ( d = = NULL )
{
d = new TString ( TBill : : descrizione ( ) ) ;
_desc . add ( code , d ) ;
}
return * d ;
1995-09-01 09:38:25 +00:00
}
1997-05-21 09:42:14 +00:00
class TStampa_giornale : public TPrintapp
1995-09-01 09:38:25 +00:00
{
static bool mask_a_cod_reg ( TMask_field & f , KEY k ) ;
static bool data_a_hndl ( TMask_field & f , KEY k ) ;
static bool data_da_hndl ( TMask_field & f , KEY k ) ;
static bool mask_b_ripristina ( TMask_field & f , KEY k ) ;
static bool mask_b_warning ( TMask_field & f , KEY k ) ;
static bool filter_func ( const TRelation * r ) ;
static bool filtra_reg ( const TRelation * r ) ;
1999-04-06 15:34:39 +00:00
int righe_rimaste ( ) const ;
1996-01-05 11:55:13 +00:00
1995-09-01 09:38:25 +00:00
private :
TRelation * _rel ;
TCursor * _cur ;
TRectype * _RecPartoDa , * _RecArrivoA ;
1996-09-06 14:00:50 +00:00
int _ae ; // anno esercizio di ALLA_DATA
int _ae_solare ; // anno esercizio solare usato per la tabella registri
1995-09-01 09:38:25 +00:00
int _tipo ; // tipo del registro
int _annoEsMov ; // anno esercizio letto da mov
TString16 _reg ;
int _anno_iva ;
bool _stampa_definitiva ;
bool _MovGiaStampato ;
1996-10-16 09:56:27 +00:00
bool _totals_updated ;
1996-10-11 14:21:57 +00:00
1995-09-01 09:38:25 +00:00
bool _gia_settato_ariportare ;
bool _forza_ariportare ;
2004-05-20 15:43:37 +00:00
int _devo_riportare ; // Guy: Togliere 'sto casino se non funziona
1996-10-11 14:21:57 +00:00
1995-09-01 09:38:25 +00:00
bool _nuovo_mese ; // Finito il mese ?
long _num_rig ;
real _importo ;
char _sezione ;
1996-03-08 08:09:23 +00:00
int _pagine_contate ; // cnt pag. stampate.
1997-06-19 14:33:52 +00:00
1999-04-06 15:34:39 +00:00
TContoOccas _tc ;
1995-09-01 09:38:25 +00:00
public :
TRigaiva_array _iva_array ;
TString16 _reg_cod ;
TString80 _reg_descr ;
TDate _data_da , _data_a , _last_data ;
real _tot_dare , _tot_avere ; // valori di partenza
real _tot_dare_progr , _tot_avere_progr ; // progressivi anno in corso
real _tot_dare_progr_ap , _tot_avere_progr_ap ; // progr. anno prec.
real _tot_dare_gg , _tot_avere_gg ; // giornalieri
real _tot_dare_gg_ap , _tot_avere_gg_ap ; // giornalieri anno precedente
real _tot_dare_generale , _tot_avere_generale ; // tot. generali
long _nprog_da , _nprog_mov ;
int _stampa_width , _stampa_len ;
int _pagine_stampate , _pagine_numerate , _stampa_ok , _pagina_da ;
TDate _data_corr , _data_succ , _ultima_data_mov ;
int _mese_corr , _mese_succ ;
int _last_header ; // prima riga di intestazione "libera"
bool _stampa_stesso_registro ;
2002-12-20 16:15:03 +00:00
bool _libro_giornale_iva_unico , _libro_cronologico , _stampa_intesta , _stampa_num_pag ;
1995-09-01 09:38:25 +00:00
// bool _gia_settata_riga_mov; // per la stampa no iva
TString80 _ragsoc , _paiva , _comunefis , _viafis ;
TString16 _provfis , _cap , _occfpi ;
TString80 _cofi ;
2003-03-14 15:13:36 +00:00
1999-04-06 15:34:39 +00:00
TTable * _tabreg ;
1995-09-01 09:38:25 +00:00
1997-06-19 14:33:52 +00:00
1995-09-01 09:38:25 +00:00
public :
virtual void preprocess_header ( ) ;
virtual void preprocess_footer ( ) ;
virtual bool preprocess_page ( int , int ) ;
virtual print_action postprocess_page ( int , int ) ;
1996-01-05 11:55:13 +00:00
virtual print_action postprocess_print ( int , int ) ;
1995-09-01 09:38:25 +00:00
virtual bool preprocess_print ( int , int ) ;
virtual void postclose_print ( ) ;
// virtual bool cancel_hook();
virtual bool set_print ( int ) ;
1999-04-06 15:34:39 +00:00
virtual void on_firm_change ( ) ;
1995-09-01 09:38:25 +00:00
virtual bool user_create ( ) ;
virtual bool user_destroy ( ) ;
void set_rows ( int file , int counter ) ;
int setta_righe_indirizzo ( char tipocf , long codcf , int rdesc ) ;
int setta_righe_iva ( ) ;
int setta_righe_valuta ( int start_riga ) ;
int setta_righe_descr ( TParagraph_string & , enum descr ) ;
void fill_page ( int start_riga , int righe_iva ) ;
void calcola_iva ( ) ;
void init_print ( ) ;
bool init_cursor ( ) ;
void init_totals ( ) ;
int stampa_intestazione_ditta ( ) ;
int set_headers ( ) ;
bool leggi_tabreg ( const char * codreg , int annoes ) ;
bool controlla_mov_aep ( ) ;
bool competenza_ep ( ) const { return _ae ! = _annoEsMov ; }
bool competenza_ec ( ) const { return ! competenza_ep ( ) ; } // tertium non datur ?
1996-09-06 14:00:50 +00:00
void aggiorna_tabreg ( int , int ) ;
1995-09-01 09:38:25 +00:00
void aggiorna_mov ( ) ;
int set_totali_giorno ( const TDate & giorno , const int righeivasettate ) ;
int set_totali_pagina ( int r ) ;
void get_dati_ditta ( ) ;
2003-03-14 15:13:36 +00:00
const TString & get_descr_caus ( const char * codcaus ) ;
1999-04-06 15:34:39 +00:00
const TRectype & look_com ( const char * cod , const char * stato = " " ) ;
const TString & get_codiva_des ( const char * codiva ) ;
1995-09-01 09:38:25 +00:00
void update_totals ( char sezione , real & importo ) ;
void set_reg_filter ( TMask & m ) ;
1997-05-21 09:42:14 +00:00
TStampa_giornale ( ) : _pagine_contate ( 0 ) { } ;
virtual ~ TStampa_giornale ( ) { } ;
1995-09-01 09:38:25 +00:00
} ;
1997-05-21 09:42:14 +00:00
HIDDEN TStampa_giornale & app ( ) { return ( TStampa_giornale & ) main_app ( ) ; }
1995-09-01 09:38:25 +00:00
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : filtra_reg ( const TRelation * r )
1995-09-01 09:38:25 +00:00
{
1997-05-21 09:42:14 +00:00
bool ok = TRUE ;
1998-04-30 15:59:34 +00:00
if ( app ( ) . _ae_solare )
1995-09-01 09:38:25 +00:00
{
1997-05-21 09:42:14 +00:00
const TRectype & rec = r - > lfile ( ) . curr ( ) ;
const int anno = atoi ( rec . get ( " CODTAB " ) . left ( 4 ) ) ;
1998-04-30 15:59:34 +00:00
ok = anno = = app ( ) . _ae_solare ;
1995-09-01 09:38:25 +00:00
}
1997-05-21 09:42:14 +00:00
return ok ;
1995-09-01 09:38:25 +00:00
}
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : filter_func ( const TRelation * r )
1995-09-01 09:38:25 +00:00
{
2000-10-03 13:45:12 +00:00
const TRectype & recmov = r - > curr ( ) ;
1995-09-01 09:38:25 +00:00
// Scarto SEMPRE i provvisori
1996-10-07 14:07:39 +00:00
const TString & provvis = recmov . get ( MOV_PROVVIS ) ;
if ( ! provvis . blank ( ) )
1995-09-01 09:38:25 +00:00
return FALSE ;
1999-04-06 15:34:39 +00:00
// Scarto i movimenti che hanno il registro ai soli fini della liquidazione
2000-10-03 13:45:12 +00:00
const TRectype & reg = r - > lfile ( " REG " ) . curr ( ) ;
const tipo_sospensione ts = reg . get_bool ( " B1 " ) ? ( tipo_sospensione ) reg . get_int ( " I9 " ) : nessuna ;
1999-04-06 15:34:39 +00:00
if ( ts = = liquidazione )
return FALSE ;
1995-09-01 09:38:25 +00:00
// In caso di NO libro con iva scarta quelli che non hanno righe contabili
if ( ! app ( ) . _libro_giornale_iva_unico )
{
1996-10-07 14:07:39 +00:00
const long numreg = recmov . get_long ( " NUMREG " ) ;
2000-10-03 13:45:12 +00:00
TRectype & recrmov = r - > curr ( LF_RMOV ) ;
1995-09-01 09:38:25 +00:00
recrmov . zero ( ) ;
1996-10-07 14:07:39 +00:00
recrmov . put ( " NUMREG " , numreg ) ;
1997-05-21 09:42:14 +00:00
recrmov . put ( " NUMRIG " , 1 ) ;
1996-10-07 14:07:39 +00:00
if ( r - > lfile ( LF_RMOV ) . read ( ) ! = NOERR )
1995-09-01 09:38:25 +00:00
{
const long numreg2 = recrmov . get_long ( " NUMREG " ) ;
1996-10-07 14:07:39 +00:00
return numreg2 = = numreg ;
1995-09-01 09:38:25 +00:00
}
}
return TRUE ;
}
//////////////////////////////////////////////////////////////////////////
// Funzioni legate ai parametri ditta
//////////////////////////////////////////////////////////////////////////
1997-10-22 12:24:43 +00:00
1999-04-06 15:34:39 +00:00
const TRectype & TStampa_giornale : : look_com ( const char * cod , const char * stato )
1995-09-01 09:38:25 +00:00
{
1999-04-06 15:34:39 +00:00
TString16 codice ;
codice < < stato < < ' | ' < < cod ;
2002-12-20 16:15:03 +00:00
return cache ( ) . get ( LF_COMUNI , codice ) ;
1995-09-01 09:38:25 +00:00
}
2003-03-14 15:13:36 +00:00
const TString & TStampa_giornale : : get_descr_caus ( const char * codcaus )
1995-09-01 09:38:25 +00:00
{
2003-03-14 15:13:36 +00:00
return cache ( ) . get ( LF_CAUSALI , codcaus ) . get ( " DESCR " ) ;
1995-09-01 09:38:25 +00:00
}
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : get_dati_ditta ( )
1995-09-01 09:38:25 +00:00
{
1999-04-06 15:34:39 +00:00
TString16 codanagr ;
char tipoa ;
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
const TRectype & nditte = cache ( ) . get ( LF_NDITTE , get_firm ( ) ) ;
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
_ragsoc = nditte . get ( NDT_RAGSOC ) ;
codanagr = nditte . get ( NDT_CODANAGR ) ;
tipoa = nditte . get_char ( NDT_TIPOA ) ;
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
TToken_string key ;
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
key . add ( tipoa ) ;
key . add ( codanagr ) ;
const TRectype & anag = cache ( ) . get ( LF_ANAG , key ) ;
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
_cofi = anag . get ( ANA_COFI ) ;
_paiva = anag . get ( ANA_PAIV ) ;
_comunefis = anag . get ( ANA_COMRF ) ;
_cap = anag . get ( ANA_CAPRF ) ;
1995-09-01 09:38:25 +00:00
if ( _comunefis . empty ( ) )
2003-03-14 15:13:36 +00:00
_comunefis = anag . get ( ANF_COMRES ) ;
1995-09-01 09:38:25 +00:00
2000-10-03 13:45:12 +00:00
const TRectype & dep = look_com ( _comunefis ) ;
_comunefis = dep . get ( COM_DENCOM ) ;
_provfis = dep . get ( COM_PROVCOM ) ;
if ( _cap . empty ( ) )
_cap = dep . get ( COM_CAPCOM ) ;
1995-09-01 09:38:25 +00:00
if ( _comunefis . empty ( ) )
{
2003-03-14 15:13:36 +00:00
_viafis = anag . get ( ANA_INDRF ) ;
1995-09-01 09:38:25 +00:00
_viafis . rtrim ( ) ;
2003-03-14 15:13:36 +00:00
_viafis < < " " < < anag . get ( ANA_CIVRF ) ;
1995-09-01 09:38:25 +00:00
}
else
{
2003-03-14 15:13:36 +00:00
_viafis = anag . get ( ANA_INDRES ) ;
1995-09-01 09:38:25 +00:00
_viafis . rtrim ( ) ;
2003-03-14 15:13:36 +00:00
_viafis < < " " < < anag . get ( ANA_CIVRES ) ;
1995-09-01 09:38:25 +00:00
}
}
1999-04-06 15:34:39 +00:00
void TStampa_giornale : : on_firm_change ( )
{
TConfig conf ( CONFIG_DITTA ) ;
_libro_giornale_iva_unico = conf . get_bool ( " StLgiU " ) ;
_libro_cronologico = conf . get_bool ( " GsLbCn " ) ;
}
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : user_create ( )
1995-09-01 09:38:25 +00:00
{
_ae = 0 ;
1996-09-06 14:00:50 +00:00
_ae_solare = 0 ;
2003-03-14 15:13:36 +00:00
open_files ( LF_TABCOM , LF_TAB , LF_NDITTE , LF_ANAG , LF_COMUNI , LF_CLIFO , LF_PCON , LF_OCCAS , 0 ) ;
1995-09-01 09:38:25 +00:00
_tabreg = new TTable ( " REG " ) ;
2003-03-14 15:13:36 +00:00
1995-09-01 09:38:25 +00:00
_rel = new TRelation ( LF_MOV ) ;
2000-10-03 13:45:12 +00:00
_rel - > add ( LF_RMOV , " NUMREG==NUMREG " ) ;
_rel - > add ( LF_RMOVIVA , " NUMREG==NUMREG " ) ;
_rel - > add ( " REG " , " CODTAB[1,4]==ANNOIVA|CODTAB[5,7]==REG " ) ; // CM500302 senza == si incasina con registri vuoti!
1995-09-01 09:38:25 +00:00
_cur = new TCursor ( _rel , " " , 2 ) ; // usa la chiave 2: DATAREG+NUMREG
2000-10-03 13:45:12 +00:00
_RecPartoDa = new TRectype ( _cur - > curr ( ) ) ;
_RecArrivoA = new TRectype ( _cur - > curr ( ) ) ;
1995-09-01 09:38:25 +00:00
add_cursor ( _cur ) ;
add_file ( LF_MOV ) ;
add_file ( LF_RMOV ) ;
add_file ( LF_RMOVIVA ) ;
return TRUE ;
}
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : user_destroy ( )
1995-09-01 09:38:25 +00:00
{
delete _rel ;
delete _RecPartoDa ;
delete _RecArrivoA ;
1999-04-06 15:34:39 +00:00
delete _tabreg ;
1995-09-01 09:38:25 +00:00
return TRUE ;
}
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : aggiorna_mov ( )
1995-09-01 09:38:25 +00:00
{
TLocalisamfile & mov = _cur - > file ( LF_MOV ) ;
long nprog = _nprog_da + 1 ;
2000-10-03 13:45:12 +00:00
_cur - > setregion ( * _RecPartoDa , * _RecArrivoA ) ;
1995-09-01 09:38:25 +00:00
1997-06-19 14:33:52 +00:00
const long items = _cur - > items ( ) ;
2003-03-14 15:13:36 +00:00
TProgind prnd ( items , TR ( " Aggiornamento movimenti ... " ) , FALSE , TRUE ) ;
1995-09-01 09:38:25 +00:00
1997-06-19 14:33:52 +00:00
for ( ( * _cur ) = 0L ; _cur - > pos ( ) < items ; + + ( * _cur ) )
1995-09-01 09:38:25 +00:00
{
const bool gia_stampato = _cur - > file ( LF_MOV ) . get_bool ( MOV_STAMPATO ) ;
if ( ! gia_stampato )
{
_cur - > file ( LF_MOV ) . put ( MOV_STAMPATO , TRUE ) ;
_cur - > file ( LF_MOV ) . put ( MOV_NUMGIO , nprog ) ;
mov . rewrite ( ) ;
nprog + + ;
}
prnd . addstatus ( 1 ) ;
}
}
1997-05-21 09:42:14 +00:00
int TStampa_giornale : : set_totali_giorno ( const TDate & data , const int righeiva )
1995-09-01 09:38:25 +00:00
{
1996-10-16 09:56:27 +00:00
int r = righeiva + 1 ;
1995-09-01 09:38:25 +00:00
char dep [ 200 ] ;
const int SHIFT = 15 ;
const int STACC = 51 + SHIFT ;
1995-11-17 14:29:24 +00:00
// Se e' l'unico totale lo stampo anche se e' zero
1995-09-01 09:38:25 +00:00
if ( competenza_ec ( ) | | ( _tot_avere_gg ! = ZERO | | _tot_dare_gg ! = ZERO ) )
{
1999-04-06 15:34:39 +00:00
TString80 td ; real2currency ( td , _tot_dare_gg ) ;
TString80 ta ; real2currency ( ta , _tot_avere_gg ) ;
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
sprintf ( dep , FR ( " @b@%dgTotale operazioni del %s @%dg%c %s @%dg%c @%dg%s " ) ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? SCRITTA : DARE198 - STACC ,
1995-09-01 09:38:25 +00:00
data . string ( ) ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? TOTDARE132 : DARE198 - 2 ,
1995-09-01 09:38:25 +00:00
' D ' ,
( const char * ) td ,
1997-10-20 14:23:01 +00:00
_stampa_width = = 132 ? SEZA132 : AVERE198 - 2 ,
1995-09-01 09:38:25 +00:00
' A ' ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? TOTAVERE132 : AVERE198 ,
1995-09-01 09:38:25 +00:00
( const char * ) ta
) ;
set_row ( r + + , " %s " , dep ) ;
_tot_dare_gg = _tot_avere_gg = ZERO ;
}
if ( competenza_ep ( ) | | ( _tot_avere_gg_ap ! = ZERO | | _tot_dare_gg_ap ! = ZERO ) )
{
1999-04-06 15:34:39 +00:00
TString80 tdp ; real2currency ( tdp , _tot_dare_gg_ap ) ;
TString80 tap ; real2currency ( tap , _tot_avere_gg_ap ) ;
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
sprintf ( dep , FR ( " @b@%dgTotale operazioni del %s Anno precedente @%dg%c %s @%dg%c @%dg%s " ) ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? SCRITTA : DARE198 - STACC ,
1995-09-01 09:38:25 +00:00
data . string ( ) ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? TOTDARE132 : DARE198 - 2 ,
1995-09-01 09:38:25 +00:00
' D ' ,
( const char * ) tdp ,
1997-10-20 14:23:01 +00:00
_stampa_width = = 132 ? SEZA132 : AVERE198 - 2 ,
1995-09-01 09:38:25 +00:00
' A ' ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? TOTAVERE132 : AVERE198 ,
1995-09-01 09:38:25 +00:00
( const char * ) tap
) ;
set_row ( r + + , " %s " , dep ) ;
_tot_avere_gg_ap = _tot_dare_gg_ap = ZERO ;
}
return r ;
}
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : postclose_print ( )
1995-09-01 09:38:25 +00:00
{
2003-03-14 15:13:36 +00:00
if ( _stampa_definitiva & & yesno_box ( TR ( " La stampa e' corretta? " ) ) )
1995-09-01 09:38:25 +00:00
{
1999-04-06 15:34:39 +00:00
const int ultima_fatta = _pagine_contate ;
aggiorna_mov ( ) ;
aggiorna_tabreg ( _pagina_da , ultima_fatta ) ;
1995-09-01 09:38:25 +00:00
}
}
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : preprocess_footer ( )
1995-09-01 09:38:25 +00:00
{
TString progr_dare_ap ( 22 ) , progr_avere_ap ( 22 ) ;
1995-11-17 14:29:24 +00:00
TString progr_dare ( 25 ) , progr_avere ( 25 ) , dts ( 25 ) , ats ( 25 ) ;
1995-09-01 09:38:25 +00:00
TString256 riga ;
bool ap = FALSE ;
1996-10-14 16:14:25 +00:00
int r = 1 ; // was 2
1995-09-01 09:38:25 +00:00
const int STUMB = 42 ;
real dt , at ;
reset_footer ( ) ;
if ( _tot_avere_progr_ap ! = ZERO | | _tot_dare_progr_ap ! = ZERO )
{
1999-04-06 15:34:39 +00:00
real2currency ( progr_dare_ap , _tot_dare_progr_ap ) ;
real2currency ( progr_avere_ap , _tot_avere_progr_ap ) ;
1995-09-01 09:38:25 +00:00
ap = TRUE ;
}
//
// Non stampo "A riportare"
// SE :
// 1. E' gia' stato stampato
// OPPURE
// 2. Sono sull'ultima riga
//
1996-10-11 14:21:57 +00:00
1998-03-30 14:18:57 +00:00
const int riporta = _devo_riportare ;
1995-09-01 09:38:25 +00:00
if ( riporta )
{
dt = _tot_dare_progr + _tot_dare_progr_ap ;
at = _tot_avere_progr + _tot_avere_progr_ap ;
1999-04-06 15:34:39 +00:00
real2currency ( dts , dt ) ;
real2currency ( ats , at ) ;
1995-09-01 09:38:25 +00:00
riga . format ( " @b@%dg%s@%dg%c %s @%dg%c @%dg%s " ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? SCRITTA : DARE198 - STUMB ,
2003-03-14 15:13:36 +00:00
TR ( " A riportare " ) ,
2004-06-04 11:20:51 +00:00
_stampa_width = = 132 ? TOTDARE132 : DARE198 - 2 ,
1995-09-01 09:38:25 +00:00
' D ' ,
( const char * ) dts ,
1997-10-20 14:23:01 +00:00
_stampa_width = = 132 ? SEZA132 : AVERE198 - 2 ,
1995-09-01 09:38:25 +00:00
' A ' ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? TOTAVERE132 : AVERE198 ,
1995-09-01 09:38:25 +00:00
( const char * ) ats ) ;
set_footer ( r + + , ( const char * ) riga ) ;
_forza_ariportare = FALSE ;
1996-10-11 14:21:57 +00:00
2003-03-28 16:23:23 +00:00
if ( _devo_riportare > 1 )
1996-10-11 16:37:07 +00:00
_devo_riportare = FALSE ;
1995-09-01 09:38:25 +00:00
}
}
1997-05-21 09:42:14 +00:00
int TStampa_giornale : : set_totali_pagina ( int righe )
1995-09-01 09:38:25 +00:00
{
TString progr_dare_ap ( 22 ) , progr_avere_ap ( 22 ) ;
1995-11-17 14:29:24 +00:00
TString progr_dare ( 22 ) , progr_avere ( 22 ) , dts ( 22 ) , ats ( 22 ) ;
1995-09-01 09:38:25 +00:00
TString256 riga ;
bool ap = FALSE ;
const int SHIFT = 15 ;
const int STUMB = 51 + SHIFT ;
real dt , at ;
int r = righe = = 0 ? 1 : righe ;
if ( _tot_avere_progr_ap ! = ZERO | | _tot_dare_progr_ap ! = ZERO )
{
1999-04-06 15:34:39 +00:00
real2currency ( progr_dare_ap , _tot_dare_progr_ap ) ;
real2currency ( progr_avere_ap , _tot_avere_progr_ap ) ;
1995-09-01 09:38:25 +00:00
ap = TRUE ;
}
if ( _cur - > pos ( ) = = _cur - > items ( ) - 1 ) // se sono sull'ultimo
{
// I totali distinti tra anno precedente e corrente SOLO SE STAMPA DI PROVA
if ( ! _stampa_definitiva )
{
1999-04-06 15:34:39 +00:00
real2currency ( progr_dare , _tot_dare_progr ) ;
real2currency ( progr_avere , _tot_avere_progr ) ;
1995-09-01 09:38:25 +00:00
riga = " " ;
2003-03-14 15:13:36 +00:00
riga . format ( FR ( " @b@%dgTotale progressivi @%dg%c %s @%dg%c @%dg%s " ) ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? SCRITTA : DARE198 - STUMB ,
_stampa_width = = 132 ? TOTDARE132 : DARE198 - 2 ,
1995-09-01 09:38:25 +00:00
' D ' ,
( const char * ) progr_dare ,
1997-10-20 14:23:01 +00:00
_stampa_width = = 132 ? SEZA132 : AVERE198 - 2 ,
1995-09-01 09:38:25 +00:00
' A ' ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? TOTAVERE132 : AVERE198 ,
1995-09-01 09:38:25 +00:00
( const char * ) progr_avere
) ;
set_row ( r + + , ( const char * ) riga ) ;
1996-01-05 11:55:13 +00:00
1995-09-01 09:38:25 +00:00
if ( ap )
{
2003-03-14 15:13:36 +00:00
riga . format ( FR ( " @b@%dgTotale progressivi anno precedente @%dg%c %s @%dg%c @%dg%s " ) ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? SCRITTA : DARE198 - STUMB ,
_stampa_width = = 132 ? TOTDARE132 : DARE198 - 2 ,
1995-09-01 09:38:25 +00:00
' D ' ,
( const char * ) progr_dare_ap ,
1997-10-20 14:23:01 +00:00
_stampa_width = = 132 ? SEZA132 : AVERE198 - 2 ,
1995-09-01 09:38:25 +00:00
' A ' ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? TOTAVERE132 : AVERE198 ,
1995-09-01 09:38:25 +00:00
( const char * ) progr_avere_ap
) ;
set_row ( r + + , ( const char * ) riga ) ;
}
1996-01-05 11:55:13 +00:00
} // stampa_definitiva
1995-09-01 09:38:25 +00:00
_tot_dare_generale = _tot_dare_progr + _tot_dare_progr_ap ;
_tot_avere_generale = _tot_avere_progr + _tot_avere_progr_ap ;
1999-04-06 15:34:39 +00:00
real2currency ( dts , _tot_dare_generale ) ;
real2currency ( ats , _tot_avere_generale ) ;
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
riga . format ( FR ( " @b@%dgTotale progressivi generali @%dg%c %s @%dg%c @%dg%s " ) ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? SCRITTA : DARE198 - STUMB ,
_stampa_width = = 132 ? TOTDARE132 : DARE198 - 2 ,
1995-09-01 09:38:25 +00:00
' D ' ,
( const char * ) dts ,
1997-10-20 14:23:01 +00:00
_stampa_width = = 132 ? SEZA132 : AVERE198 - 2 ,
1995-09-01 09:38:25 +00:00
' A ' ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? TOTAVERE132 : AVERE198 ,
1995-09-01 09:38:25 +00:00
( const char * ) ats
) ;
set_row ( r + + , ( const char * ) riga ) ;
}
else // Non ancora totale generale
{
1996-01-05 11:55:13 +00:00
// Determina se le righe settate finora stanno in questa pagina oppure no
_gia_settato_ariportare = righe_rimaste ( ) > righe ;
1995-09-01 09:38:25 +00:00
1996-01-05 11:55:13 +00:00
// La fill_page mette forza_ariportare a TRUE
// nel caso di pagine con solo i totali (v. fax VLADIMIRO) bisogna impedire
// che venga stampato di nuovo "Totale ..." nella preprocess_footer
_forza_ariportare = FALSE ;
1995-09-01 09:38:25 +00:00
dt = _tot_dare_progr + _tot_dare_progr_ap ;
at = _tot_avere_progr + _tot_avere_progr_ap ;
1999-04-06 15:34:39 +00:00
real2currency ( dts , dt ) ;
real2currency ( ats , at ) ;
1995-09-01 09:38:25 +00:00
1995-11-17 14:29:24 +00:00
// "Se il mese e' finito devo scrivere Totale progressivi generali
// invece che A riportare"
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
riga . format ( FR ( " @b@%dgTotale progressivi generali @%dg%c %s @%dg%c @%dg%s " ) ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? SCRITTA : DARE198 - STUMB ,
_stampa_width = = 132 ? TOTDARE132 : DARE198 - 2 ,
1995-09-01 09:38:25 +00:00
' D ' ,
( const char * ) dts ,
1997-10-20 14:23:01 +00:00
_stampa_width = = 132 ? SEZA132 : AVERE198 - 2 ,
1995-09-01 09:38:25 +00:00
' A ' ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? TOTAVERE132 : AVERE198 ,
1995-09-01 09:38:25 +00:00
( const char * ) ats ) ;
set_row ( r + + , ( const char * ) riga ) ;
}
return r ;
}
1997-05-21 09:42:14 +00:00
int TStampa_giornale : : stampa_intestazione_ditta ( )
1995-09-01 09:38:25 +00:00
{
int r = 1 ;
TString256 intes ;
TString riga ( _stampa_width ) ;
get_dati_ditta ( ) ;
riga . fill ( ' - ' ) ;
set_header ( r , riga ) ;
2003-03-14 15:13:36 +00:00
set_header ( + + r , FR ( " Ditta: %5ld %-.50s %.35s %.5s %.20s %.2s " ) ,
1995-09-01 09:38:25 +00:00
get_firm ( ) ,
( const char * ) _ragsoc ,
( const char * ) _viafis , ( const char * ) _cap ,
( const char * ) _comunefis , ( const char * ) _provfis ) ;
if ( _stampa_definitiva )
2003-03-14 15:13:36 +00:00
intes . format ( FR ( " Partita iva %s @24gCodice fiscale %s " ) ,
1995-09-01 09:38:25 +00:00
( const char * ) _paiva , ( const char * ) _cofi ,
_stampa_width = = 132 ? 102 : 168
) ;
else
2003-03-14 15:13:36 +00:00
intes . format ( FR ( " Partita iva %s @24gCodice fiscale %s @%dg%s @%dgData @> " ) ,
1995-09-01 09:38:25 +00:00
( const char * ) _paiva , ( const char * ) _cofi ,
_stampa_width = = 132 ? 102 : 168 ,
2003-03-14 15:13:36 +00:00
FR ( " LIBRO DI PROVA " ) ,
1995-09-01 09:38:25 +00:00
_stampa_width = = 132 ? 117 : 183
) ;
set_header ( + + r , " %s " , ( const char * ) intes ) ;
r + + ;
return r ;
}
1997-05-21 09:42:14 +00:00
int TStampa_giornale : : set_headers ( )
1995-09-01 09:38:25 +00:00
{
int r = 1 ;
TString riga ( _stampa_width ) ;
TString16 data_da = _data_da . string ( ) ;
TString16 data_a = _data_a . string ( ) ;
if ( _stampa_intesta | | ! _stampa_definitiva )
r = stampa_intestazione_ditta ( ) ;
1996-10-07 14:07:39 +00:00
else
2002-12-20 16:15:03 +00:00
r + = 2 ;
1995-09-01 09:38:25 +00:00
if ( _stampa_definitiva )
2003-03-14 15:13:36 +00:00
set_header ( r + + , FR ( " Codice libro: %s %s " ) , ( const char * ) _reg_cod , ( const char * ) _reg_descr ) ;
1995-09-01 09:38:25 +00:00
else
2003-03-14 15:13:36 +00:00
set_header ( r + + , FR ( " Codice libro: %s %s @%dgdalla data: %s alla data: %s @%dgEsercizio: %04d " ) ,
1995-09-01 09:38:25 +00:00
( const char * ) _reg_cod , ( const char * ) _reg_descr ,
_stampa_width = = 132 ? 69 : 135 ,
( const char * ) data_da , ( const char * ) data_a ,
_stampa_width = = 132 ? 117 : 183 ,
_ae
) ;
riga . fill ( ' - ' ) ;
set_header ( r + + , riga ) ;
if ( _libro_cronologico )
2003-03-14 15:13:36 +00:00
set_header ( r , FR ( " @59gCodice Conto " ) ) ;
1995-09-01 09:38:25 +00:00
if ( ! _stampa_definitiva ) {
if ( _stampa_width = = 132 ) {
set_header ( r + + , " @131gS " ) ;
2003-03-14 15:13:36 +00:00
set_header ( r , FR ( " @1gN.riga " ) ) ;
1995-09-01 09:38:25 +00:00
}
else {
set_header ( r + + , " @197gS " ) ;
2003-03-14 15:13:36 +00:00
set_header ( r , FR ( " @1gN.riga " ) ) ;
1995-09-01 09:38:25 +00:00
}
}
else
if ( _libro_cronologico ) r + + ; // NON LASCIARE RIGHE IN BIANCO!!
2003-03-14 15:13:36 +00:00
set_header ( r , FR ( " @8gDescrizione operazione@36gCausale " ) ) ;
1995-09-01 09:38:25 +00:00
if ( _libro_cronologico )
// POSCONTO = 74;
2003-03-14 15:13:36 +00:00
set_header ( r , FR ( " @74gGeneralita' cliente/fornitore " ) ) ;
1995-09-01 09:38:25 +00:00
else
2003-03-14 15:13:36 +00:00
set_header ( r , FR ( " @59gCodice Conto " ) ) ;
1995-09-01 09:38:25 +00:00
if ( _stampa_width = = 132 )
2003-03-14 15:13:36 +00:00
set_header ( r , FR ( " @120gImporto " ) ) ;
1995-09-01 09:38:25 +00:00
else
2003-03-14 15:13:36 +00:00
set_header ( r , FR ( " @161gDare @184gAvere " ) ) ;
1995-09-01 09:38:25 +00:00
if ( ! _stampa_definitiva )
set_header ( r , _stampa_width = = 132 ? " @131gB " : " @197gB " ) ;
r + + ;
riga . fill ( ' - ' ) ;
set_header ( r , riga ) ;
return r ;
}
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : preprocess_header ( )
1995-09-01 09:38:25 +00:00
{
int r = _last_header + 1 ;
int pag = printer ( ) . getcurrentpage ( ) ;
real riporto_dare , riporto_avere ;
2002-12-20 16:15:03 +00:00
if ( _stampa_num_pag ) // Stampa numero di pagina in alto a destra
{
2004-05-20 15:43:37 +00:00
TEsercizi_contabili esc ;
const int esercizio = esc . date2esc ( _data_a ) ; //codice esercizio correntemente selezionato
const int anno = esc [ esercizio ] . inizio ( ) . year ( ) ; //anno finale dell'esercizio
TString16 numpag , riga ;
numpag . format ( " %d/%d " , anno , _pagina_da + pag ) ;
2002-12-20 16:15:03 +00:00
const int tab = _stampa_width - numpag . len ( ) ;
riga . format ( " @%dg%s " , tab , ( const char * ) numpag ) ;
set_header ( 2 , riga ) ; // Sempre quasi sulla prima riga!
}
1995-09-01 09:38:25 +00:00
1996-01-05 11:55:13 +00:00
// _gia_settato_ariportare = FALSE;
1996-10-11 14:21:57 +00:00
1995-09-01 09:38:25 +00:00
if ( pag > 0 ) // Stampa riporti
{
riporto_dare = _tot_dare_progr + _tot_dare_progr_ap ;
riporto_avere = _tot_avere_progr + _tot_avere_progr_ap ;
// Non stampa nulla se ZERO SOLO SE DI PROVA <<<<<---------------------
// Lascio una riga senno' vado a finire sull'intestazione
if ( ! _stampa_definitiva )
if ( riporto_dare = = ZERO & & riporto_avere = = ZERO )
{
set_header ( r , " " ) ;
return ;
}
1999-04-06 15:34:39 +00:00
TString80 dare ; real2currency ( dare , riporto_dare ) ;
TString80 avere ; real2currency ( avere , riporto_avere ) ;
1995-09-01 09:38:25 +00:00
2002-12-20 16:15:03 +00:00
TString256 riporto ;
2003-03-14 15:13:36 +00:00
riporto . format ( FR ( " @b@%dgRiporto: @%dg%c %17s @%dg%c@%dg%17s " ) , // prima erano %15s
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? SCRITTA : DARE198 - 11 ,
1997-11-18 14:32:52 +00:00
_stampa_width = = 132 ? TOTDARE132 : DARE198 - 2 ,
1995-09-01 09:38:25 +00:00
_stampa_width = = 132 ? ' D ' : ' ' ,
1995-11-17 14:29:24 +00:00
( const char * ) dare ,
_stampa_width = = 132 ? SEZA132 : SEZA132 ,
1995-09-01 09:38:25 +00:00
_stampa_width = = 132 ? ' A ' : ' ' ,
1995-11-17 14:29:24 +00:00
_stampa_width = = 132 ? TOTAVERE132 : AVERE198 ,
1995-09-01 09:38:25 +00:00
( const char * ) avere
) ;
set_header ( r + + , " %s " , ( const char * ) riporto ) ;
}
}
//
// PREPROCESS_PRINT
//
// Se non ci sono items nel cursore (= se non ci sono movimenti)
// la stampa e' abortita.
//
// stampa_ok = -1 -> la stampa precedente era OK
// stampa_ok = x -> la stampa precedente non e' andata a buon fine
// ed era partita dalla pagina x.
//
// Se la stampa precedente e' andata male, setto la pagina corrente a
// quella salvata in stampa_ok, e la pagina da cui parte la stampa vera e
// propria a quella che mi dice l'utente:
//
// set_page_number (stampa_ok)
// setfrompage (pagina_da)
//
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : preprocess_print ( int file , int counter )
1995-09-01 09:38:25 +00:00
{
switch ( file )
{
case LF_MOV :
_nuovo_mese = FALSE ;
_iva_array . destroy ( ) ;
_nprog_mov = _nprog_da ;
2000-10-03 13:45:12 +00:00
* _RecPartoDa = _cur - > curr ( ) ;
1995-09-01 09:38:25 +00:00
break ;
default :
break ;
}
return TRUE ;
}
1997-05-21 09:42:14 +00:00
int TStampa_giornale : : righe_rimaste ( ) const
1996-01-05 11:55:13 +00:00
{
1996-10-11 16:37:07 +00:00
const TPrinter & p = printer ( ) ;
int rows_left = p . rows_left ( ) ;
1996-01-05 11:55:13 +00:00
if ( rows_left < = 0 )
1996-10-11 16:37:07 +00:00
rows_left = p . formlen ( ) - ( p . headersize ( ) + 1 ) - p . footersize ( ) ;
1996-01-05 11:55:13 +00:00
return rows_left ;
}
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : fill_page ( int righe_da_stampare , int righe_iva_settate )
1995-09-01 09:38:25 +00:00
{
1996-10-11 14:21:57 +00:00
const TPrinter & p = printer ( ) ;
1995-09-01 09:38:25 +00:00
TString256 rigas ;
1996-10-16 09:56:27 +00:00
int r = righe_da_stampare + 1 ;
int r_l = p . rows_left ( ) - righe_da_stampare ;
1996-10-14 16:14:25 +00:00
if ( r_l < 0 )
r_l + = p . formlen ( ) - ( p . headersize ( ) /*+1*/ ) - p . footersize ( ) ;
1996-01-05 11:55:13 +00:00
// Se sono rimaste righe da riempire
1995-09-01 09:38:25 +00:00
if ( r_l > 0 )
{
rigas . fill ( ' = ' , _stampa_width ) ;
1996-10-16 09:56:27 +00:00
set_row ( r + + , " %s " , ( const char * ) rigas ) ;
1995-09-01 09:38:25 +00:00
int j = 0 ;
// Calcola una specie di coefficiente angolare
int alfa = ( _stampa_width - 6 ) / r_l ;
1996-10-14 16:14:25 +00:00
r_l - - ;
1995-09-01 09:38:25 +00:00
1996-10-11 14:21:57 +00:00
for ( ; r_l > 0 ; r_l - - ) // Non stampare sulla riga orizzontale!
1995-09-01 09:38:25 +00:00
{
rigas . format ( " @%dg====== " , j ) ;
1996-10-16 09:56:27 +00:00
set_row ( r + + , rigas ) ;
1995-09-01 09:38:25 +00:00
j + = alfa ;
}
}
}
1997-05-21 09:42:14 +00:00
print_action TStampa_giornale : : postprocess_print ( int file , int counter )
1996-01-05 11:55:13 +00:00
{
if ( file = = LF_MOV )
_pagine_contate = printer ( ) . getcurrentpage ( ) - 1 ;
return NEXT_PAGE ;
}
1997-05-21 09:42:14 +00:00
print_action TStampa_giornale : : postprocess_page ( int file , int counter )
1995-09-01 09:38:25 +00:00
{
int righe_iva_settate = 0 ;
2004-04-28 20:45:59 +00:00
// bool FINITO = FALSE;
1995-09-01 09:38:25 +00:00
if ( counter )
{
1996-10-11 16:37:07 +00:00
if ( _nuovo_mese )
{
printer ( ) . formfeed ( ) ;
1995-09-01 09:38:25 +00:00
_nuovo_mese = FALSE ;
}
return NEXT_PAGE ;
}
switch ( file )
{
case LF_MOV :
{
1996-10-11 16:37:07 +00:00
reset_print ( ) ;
righe_iva_settate = 0 ;
if ( _libro_giornale_iva_unico )
1995-09-01 09:38:25 +00:00
{
1996-10-11 16:37:07 +00:00
righe_iva_settate = setta_righe_iva ( ) ;
righe_iva_settate = setta_righe_valuta ( righe_iva_settate ) ;
1995-09-01 09:38:25 +00:00
}
1996-10-11 16:37:07 +00:00
_cur - > save_status ( ) ;
+ + ( * _cur ) ;
_data_succ = _cur - > file ( LF_MOV ) . get_date ( MOV_DATAREG ) ;
_mese_succ = _data_succ . month ( ) ;
- - ( * _cur ) ;
_cur - > restore_status ( ) ;
_devo_riportare = TRUE ;
const bool last_row = _cur - > pos ( ) = = _cur - > items ( ) - 1 ;
if ( _data_corr ! = _data_succ | | last_row )
{
_nuovo_mese = ( _mese_succ ! = _mese_corr ) ;
int righe = set_totali_giorno ( _data_corr , righe_iva_settate ) ;
if ( _nuovo_mese | | last_row )
{
righe = set_totali_pagina ( righe ) ;
1996-10-16 09:56:27 +00:00
if ( righe - 1 > ( int ) printer ( ) . rows_left ( ) )
1996-10-11 16:37:07 +00:00
_devo_riportare = 3 ; // Very TRUE!
else
_devo_riportare = FALSE ;
// Nella stampa su bollato metto un segno su tutte le righe
if ( _stampa_definitiva )
1996-10-14 16:14:25 +00:00
fill_page ( righe - 1 , righe_iva_settate ) ;
1996-10-11 16:37:07 +00:00
}
return REPEAT_PAGE ;
}
if ( righe_iva_settate > 0 )
return REPEAT_PAGE ;
1995-09-01 09:38:25 +00:00
}
break ;
case LF_RMOV :
// Sposto qui per evitare di aggiornare i progressivi con una riga della
// pagina dopo
1996-10-16 09:56:27 +00:00
if ( ! _totals_updated )
update_totals ( _sezione , _importo ) ;
1996-01-05 11:55:13 +00:00
_gia_settato_ariportare = FALSE ;
1995-09-01 09:38:25 +00:00
break ;
default :
break ;
}
return NEXT_PAGE ;
}
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : update_totals ( char sezione , real & importo )
1995-09-01 09:38:25 +00:00
{
# ifdef DBG
TString dgap ( _tot_dare_gg_ap . string ( ) ) ;
TString dgpp ( _tot_dare_progr_ap . string ( ) ) ;
TString dgac ( _tot_dare_gg . string ( ) ) ;
TString dgpc ( _tot_dare_progr . string ( ) ) ;
TString agap ( _tot_avere_gg_ap . string ( ) ) ;
TString agpp ( _tot_avere_progr_ap . string ( ) ) ;
TString agac ( _tot_avere_gg . string ( ) ) ;
TString agpc ( _tot_avere_progr . string ( ) ) ;
# endif
if ( sezione = = ' D ' )
{
if ( _annoEsMov ! = _ae ) {
_tot_dare_gg_ap + = importo ; // prog. anno precedente
_tot_dare_progr_ap + = importo ;
}
else {
_tot_dare_gg + = importo ; // prog. giornalieri
_tot_dare_progr + = importo ; // prog. generali
}
}
else
{
if ( _annoEsMov ! = _ae ) {
_tot_avere_gg_ap + = importo ;
_tot_avere_progr_ap + = importo ;
}
else {
_tot_avere_gg + = importo ;
_tot_avere_progr + = importo ;
}
}
# ifdef DBG
dgap = _tot_dare_gg_ap . string ( ) ;
dgpp = _tot_dare_progr_ap . string ( ) ;
dgac = _tot_dare_gg . string ( ) ;
dgpc = _tot_dare_progr . string ( ) ;
agap = _tot_avere_gg_ap . string ( ) ;
agpp = _tot_avere_progr_ap . string ( ) ;
agac = _tot_avere_gg . string ( ) ;
agpc = _tot_avere_progr . string ( ) ;
# endif
}
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : set_rows ( int file , int counter )
1995-09-01 09:38:25 +00:00
{
TString16 datadoc_str , datareg_str , numdoc , frm , caus ;
TDate datadoc , datareg ;
TString80 mov_descr , rmv_descr ;
long numreg , protiva ;
int r = 1 ;
int g , c ;
long s ;
static char cf = ' ' ;
static int rdes = 1 ;
switch ( file )
{
case LF_MOV :
1999-04-06 15:34:39 +00:00
{
const TRectype & mov = _cur - > curr ( LF_MOV ) ;
reset_row ( 1 ) ;
reset_row ( 2 ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
datareg = mov . get_date ( " DATAREG " ) ;
datadoc = mov . get_date ( " DATADOC " ) ;
datareg_str = datareg . string ( ) ;
// "Fai vedere lo stesso ..-..-.... anche se non c'e' la data..."
if ( datareg_str . empty ( ) )
datareg_str = " - - " ;
datadoc_str = datadoc . string ( ) ;
if ( datadoc_str . empty ( ) )
datadoc_str = " - - " ;
numdoc = mov . get ( " NUMDOC " ) ;
numreg = mov . get_long ( " NUMREG " ) ;
mov_descr = mov . get ( " DESCR " ) ;
// Usati in setta_righe_iva per determinare tipo attivita'
_reg = mov . get ( MOV_REG ) ;
_anno_iva = mov . get_int ( MOV_ANNOIVA ) ;
protiva = mov . get_long ( MOV_PROTIVA ) ;
caus = mov . get ( MOV_CODCAUS ) ;
_occfpi = mov . get ( MOV_OCFPI ) ;
_annoEsMov = mov . get_int ( MOV_ANNOES ) ;
_MovGiaStampato = mov . get_bool ( MOV_STAMPATO ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
if ( _stampa_definitiva )
{
2003-03-14 15:13:36 +00:00
set_row ( r , FR ( " Operazione n. @b%-7ld@r " ) , _nprog_mov ) ;
set_row ( r , FR ( " del @b%s@r " ) , ( const char * ) datareg_str ) ; // XX/XX/XXXX
set_row ( r , FR ( " doc. n. @b%-7s@r " ) , ( const char * ) numdoc ) ;
set_row ( r , FR ( " del @b%s@r %-50s " ) , ( const char * ) datadoc_str ,
1999-04-06 15:34:39 +00:00
( const char * ) mov_descr ) ;
}
else
{
2003-03-14 15:13:36 +00:00
set_row ( r , FR ( " Operazione n. @b%-7ld@r " ) , numreg ) ;
set_row ( r , FR ( " del @b%s@r " ) , ( const char * ) datareg_str ) ;
set_row ( r , FR ( " doc. n. @b%-7s@r " ) , ( const char * ) numdoc ) ;
set_row ( r , FR ( " del @b%s@r %-50s " ) , ( const char * ) datadoc_str , ( const char * ) mov_descr ) ;
1999-04-06 15:34:39 +00:00
}
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
if ( _annoEsMov ! = _ae )
2003-03-14 15:13:36 +00:00
set_row ( r , FR ( " Comp. %04d " ) , _annoEsMov ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
if ( _MovGiaStampato & & ! _stampa_definitiva )
{
TString16 fmt ;
fmt . format ( " @%dg* " , _stampa_width = = 132 ? 131 : 197 ) ;
set_row ( r , fmt ) ;
}
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
if ( caus . not_empty ( ) )
{
const char * desc_caus = get_descr_caus ( caus ) ;
2003-03-14 15:13:36 +00:00
set_row ( r + 1 , FR ( " @36gCausale %3s %-50s " ) , ( const char * ) caus , desc_caus ) ;
1999-04-06 15:34:39 +00:00
if ( _reg . not_empty ( ) )
2003-03-14 15:13:36 +00:00
set_row ( r + 1 , FR ( " (R.IVA @b%3s@r Prot. @b%ld@r) " ) , ( const char * ) _reg , protiva ) ;
1999-04-06 15:34:39 +00:00
}
}
1995-09-01 09:38:25 +00:00
break ;
case LF_RMOV :
1999-04-06 15:34:39 +00:00
{
const TRectype & rmov = _cur - > curr ( LF_RMOV ) ;
_num_rig + + ;
reset_print ( ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
g = rmov . get_int ( " GRUPPO " ) ;
c = rmov . get_int ( " CONTO " ) ;
s = rmov . get_long ( " SOTTOCONTO " ) ;
cf = rmov . get_char ( RMV_TIPOC ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
if ( cf ! = ' C ' & & cf ! = ' F ' )
cf = ' ' ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
numreg = rmov . get_long ( " NUMREG " ) ;
datareg = rmov . get ( " DATAREG " ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
_sezione = rmov . get_char ( RMV_SEZIONE ) ;
_importo = rmov . get_real ( RMV_IMPORTO ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
rmv_descr = rmov . get ( RMV_DESCR ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
r = 1 ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
// Num. progressivo di operazione. Azzerato in preprocess_page
if ( ! _stampa_definitiva ) set_row ( r , " %7ld " , _num_rig ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
set_row ( r , " @8g%-50s " , ( const char * ) rmv_descr ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
set_row ( r , " @59g%03d. " , g ) ;
if ( c ! = 0 )
set_row ( r , " %03d. " , c ) ;
if ( s ! = 0L )
set_row ( r , " %06ld " , s ) ;
1995-09-01 09:38:25 +00:00
2004-06-04 11:20:51 +00:00
if ( cf > ' ' & & _occfpi . not_empty ( ) & & s = = _cur - > curr ( LF_MOV ) . get_long ( MOV_CODCF ) )
_tc . set ( g , c , s , cf , _occfpi ) ;
else
_tc . set ( g , c , s , cf , " " ) ;
1999-04-06 15:34:39 +00:00
TParagraph_string descr_conto ( " " , 198 ) ;
if ( _stampa_width = = 132 )
descr_conto . set_width ( WCONTO132 ) ;
else // se a 198 non spezzo le descrizioni
descr_conto . set_width ( 198 ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
descr_conto = _tc . descrizione ( ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
if ( _stampa_width = = 132 )
rdes = setta_righe_descr ( descr_conto , conto ) ;
else
{
rdes = 2 ;
frm . format ( " @%dg%%-%ds " , POSCONTO , 50 ) ;
set_row ( r , frm , ( const char * ) descr_conto ) ;
}
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
if ( cf > ' ' )
if ( _libro_cronologico )
rdes = setta_righe_indirizzo ( cf , s , rdes ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
// NB Totali aggiornati in postprocess_page (update_totals())
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
if ( _stampa_width = = 132 )
{
set_row ( r , " @110g%r %c " , & _importo , _sezione ) ;
}
else // stampa_width == 198
set_row ( r , _sezione = = ' D ' ? " @152g%r " : " @174g%r " , & _importo ) ;
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
if ( _MovGiaStampato & & ! _stampa_definitiva )
{
TString16 fmt ;
fmt . format ( " @%dg* " , _stampa_width = = 132 ? 131 : 197 ) ;
set_row ( r , fmt ) ;
}
1997-10-20 14:23:01 +00:00
1996-10-16 09:56:27 +00:00
{
1999-04-06 15:34:39 +00:00
const int rows = rdes - 1 ;
const int left = printer ( ) . rows_left ( ) ;
if ( left > 0 & & left < rows )
{
_totals_updated = TRUE ;
update_totals ( _sezione , _importo ) ;
}
else
_totals_updated = FALSE ;
1996-10-16 09:56:27 +00:00
}
1999-04-06 15:34:39 +00:00
}
1995-09-01 09:38:25 +00:00
break ;
default :
break ;
}
}
//
// PREPROCESS_PAGE
//
// Non scarto nulla qui, non si deve mai vedere una stampa vuota
//
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : preprocess_page ( int file , int counter )
1995-09-01 09:38:25 +00:00
{
if ( counter ) return TRUE ;
1999-04-06 15:34:39 +00:00
switch ( file )
{
1995-09-01 09:38:25 +00:00
case LF_MOV :
1999-04-06 15:34:39 +00:00
{
_annoEsMov = _anno_iva = 0 ;
_iva_array . destroy ( ) ;
* _RecArrivoA = _cur - > file ( LF_MOV ) . curr ( ) ;
_nprog_mov + + ;
// Il numero di operazione deve ripartire da 0 per ogni movimento
_num_rig = 0 ;
_data_corr = _cur - > file ( LF_MOV ) . get_date ( MOV_DATAREG ) ;
// _ultima_data_mov finisce sul registro come ultima data di stampa
if ( _data_corr > _ultima_data_mov )
_ultima_data_mov = _data_corr ;
_mese_corr = _data_corr . month ( ) ;
_devo_riportare = TRUE ;
}
1995-09-01 09:38:25 +00:00
break ;
case LF_RMOV :
break ;
case LF_RMOVIVA :
if ( _libro_giornale_iva_unico ) calcola_iva ( ) ;
break ;
default :
break ;
}
set_rows ( file , counter ) ;
return TRUE ;
}
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : calcola_iva ( )
1995-09-01 09:38:25 +00:00
{
2006-12-13 16:22:33 +00:00
const TRectype & iva = _cur - > curr ( LF_RMOVIVA ) ;
1995-09-01 09:38:25 +00:00
if ( ! iva . empty ( ) )
2006-12-13 16:22:33 +00:00
_iva_array . add_riga ( iva ) ;
1995-09-01 09:38:25 +00:00
}
1997-05-21 09:42:14 +00:00
int TStampa_giornale : : setta_righe_descr ( TParagraph_string & str , enum descr des )
1995-09-01 09:38:25 +00:00
{
int i = 1 ;
TString16 frm ;
const char * r ;
// char descr[51];
TString80 descr ;
switch ( des )
{
case causale : // lunga 20
if ( _libro_giornale_iva_unico )
frm . format ( " @10g \0 x25%ds " , _stampa_width = = 132 ? WCAUS132 : 40 ) ;
else
frm . format ( " @48g%%d " , WCAUS132 ) ;
break ;
case conto : // lunga 21
// if (_libro_giornale_iva_unico)
frm . format ( " @%dg%%-%ds " , POSCONTO , WCONTO132 ) ;
/*
else
frm . format ( " @26g%%d " , POSCONTO , WCONTO132 ) ; */
break ;
case operazione : // lunga 28
if ( _libro_giornale_iva_unico )
frm . format ( " @31g%%d " , WOPER132 ) ;
else
frm . format ( " @69g%%d " , WOPER132 ) ;
break ;
default :
break ;
}
while ( ( r = str . get ( ) ) ! = NULL )
{
descr = r ;
descr . ltrim ( ) ;
set_row ( i + + , ( const char * ) frm , ( const char * ) descr ) ;
}
return i ;
}
1999-04-06 15:34:39 +00:00
const TString & TStampa_giornale : : get_codiva_des ( const char * codiva )
1995-09-01 09:38:25 +00:00
{
2003-03-14 15:13:36 +00:00
return cache ( ) . get ( " %IVA " , codiva ) . get ( " S0 " ) ;
1995-09-01 09:38:25 +00:00
}
// NB
// Questa funzione ritorna il numero di righe che ha settato.
// Se questo e' diverso da 0 viene fatta una REPEAT_PAGE
// Attenzione quindi se si modifica la variabile r
1997-05-21 09:42:14 +00:00
int TStampa_giornale : : setta_righe_iva ( )
1995-09-01 09:38:25 +00:00
{
int r = 0 , j ;
2006-12-13 16:22:33 +00:00
TString80 rig , impon_str , impos_str ;
1995-09-01 09:38:25 +00:00
for ( j = 0 ; j < _iva_array . items ( ) ; j + + )
{
2006-12-13 16:22:33 +00:00
const TRigaiva & riga = _iva_array . riga ( j ) ;
1995-09-01 09:38:25 +00:00
r = j + 1 ;
2006-12-13 16:22:33 +00:00
real2currency ( impon_str , riga . _imponibile ) ;
real2currency ( impos_str , riga . _imposta ) ;
set_row ( r , FR ( " Imponibile@15g%15s " ) , ( const char * ) impon_str ) ;
set_row ( r , FR ( " @35gImposta@43g%15s " ) , ( const char * ) impos_str ) ;
2003-03-14 15:13:36 +00:00
set_row ( r , FR ( " @64gCod.Iva %3s " ) , ( const char * ) riga . _codiva ) ;
1999-04-06 15:34:39 +00:00
const TString & codiva_des = get_codiva_des ( riga . _codiva ) ;
const int tipoatt = riga . _tipoatt ;
1995-09-01 09:38:25 +00:00
if ( _stampa_width = = 132 )
1998-04-30 15:59:34 +00:00
set_row ( r , " @76g%-.17s " , ( const char * ) codiva_des ) ;
1995-09-01 09:38:25 +00:00
else
1998-04-30 15:59:34 +00:00
set_row ( r , " @76g%-.50s " , ( const char * ) codiva_des ) ;
const int S132 = 97 ;
const int S198 = 127 ;
1995-09-01 09:38:25 +00:00
rig . format ( " @%dg " , _stampa_width = = 132 ? S132 : S198 ) ;
2006-12-13 16:22:33 +00:00
rig < < riga . descr_det ( ) ;
1995-09-01 09:38:25 +00:00
set_row ( r , ( const char * ) rig ) ;
1998-04-30 15:59:34 +00:00
const int meseliq = _cur - > file ( LF_MOV ) . get_int ( MOV_MESELIQ ) ;
if ( meseliq > 0 )
2003-03-14 15:13:36 +00:00
set_row ( r , FR ( " Mese liq. %2d " ) , meseliq ) ;
1998-04-30 15:59:34 +00:00
1999-04-06 15:34:39 +00:00
if ( tipoatt ! = 0 )
{
TRegistro reg ( _reg , _anno_iva ) ;
const bool att_mista_ev = reg . attivita_mista ( ) ;
if ( att_mista_ev )
2003-03-14 15:13:36 +00:00
set_row ( r , FR ( " Tipo attivita' %d " ) , tipoatt ) ;
1999-04-06 15:34:39 +00:00
}
1995-09-01 09:38:25 +00:00
}
_iva_array . destroy ( ) ;
return r ;
}
1999-04-06 15:34:39 +00:00
int TStampa_giornale : : setta_righe_valuta ( int r )
1995-09-01 09:38:25 +00:00
{
1999-04-06 15:34:39 +00:00
const real corrval = current_cursor ( ) - > file ( LF_MOV ) . get_real ( MOV_CORRVALUTA ) ;
1995-09-01 09:38:25 +00:00
if ( corrval ! = ZERO )
{
1999-04-06 15:34:39 +00:00
const TString16 codvali = current_cursor ( ) - > file ( LF_MOV ) . get ( MOV_CODVALI ) ;
const TCurrency cur ( corrval , codvali ) ;
2003-03-14 15:13:36 +00:00
set_row ( + + r , FR ( " @56gValuta %3s " ) , ( const char * ) codvali ) ;
1995-09-01 09:38:25 +00:00
if ( _stampa_width = = 132 )
2003-03-14 15:13:36 +00:00
set_row ( r , FR ( " @89gCorr.in valuta @109g%20v " ) , & cur ) ;
1995-09-01 09:38:25 +00:00
else
2003-03-14 15:13:36 +00:00
set_row ( r , FR ( " @119gCorr.in valuta @171g%20v " ) , & cur ) ;
1995-09-01 09:38:25 +00:00
}
return r ;
}
// Cerca l'indirizzo del C/F.
// Legge CLIFO o OCCAS a seconda di _occas
// Setta le righe 2 e 3 che vengono poi resettate al record successivo
1997-05-21 09:42:14 +00:00
int TStampa_giornale : : setta_righe_indirizzo ( char tipocf , long codcf , int rdes )
1995-09-01 09:38:25 +00:00
{
TString16 prov , comcf , capcf , civcf , statocf ;
TString80 viacf , comune ;
char tipoa ;
long codanagr ;
char riga [ 256 ] ;
int r = rdes ;
2003-03-14 15:13:36 +00:00
TToken_string key ;
key . add ( tipocf ) ;
key . add ( codcf ) ;
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
const TRectype & clifo = cache ( ) . get ( LF_CLIFO , key ) ;
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
if ( _occfpi . not_empty ( ) & & clifo . get_bool ( CLI_OCCAS ) ) // => e' un occasionale...
1995-09-01 09:38:25 +00:00
{
2003-03-14 15:13:36 +00:00
const TRectype & occ = cache ( ) . get ( LF_OCCAS , _occfpi ) ;
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
viacf = occ . get ( OCC_INDIR ) ;
civcf = occ . get ( OCC_CIV ) ;
capcf = occ . get ( OCC_CAP ) ;
comcf = occ . get ( OCC_COM ) ;
1995-09-01 09:38:25 +00:00
}
1996-10-07 14:07:39 +00:00
else
{
2003-03-14 15:13:36 +00:00
viacf = clifo . get ( CLI_INDCF ) ;
civcf = clifo . get ( CLI_CIVCF ) ;
comcf = clifo . get ( CLI_COMCF ) ;
capcf = clifo . get ( CLI_CAPCF ) ;
statocf = clifo . get ( CLI_STATOCF ) ;
tipoa = clifo . get_char ( CLI_TIPOAPER ) ;
codanagr = clifo . get_long ( CLI_CODANAGPER ) ;
1996-10-07 14:07:39 +00:00
}
1995-09-01 09:38:25 +00:00
1999-04-06 15:34:39 +00:00
const TRectype & rec = look_com ( comcf , statocf ) ;
1996-10-07 14:07:39 +00:00
comune = rec . get ( COM_DENCOM ) ;
prov = rec . get ( COM_PROVCOM ) ;
2003-03-14 15:13:36 +00:00
if ( comcf . empty ( ) )
comune = clifo . get ( CLI_LOCCF ) ;
1995-09-01 09:38:25 +00:00
1996-10-07 14:07:39 +00:00
if ( viacf . not_empty ( ) )
{
sprintf ( riga , " @%dg%s %s " ,
POSCONTO ,
( const char * ) viacf ,
( const char * ) civcf
) ;
1995-09-01 09:38:25 +00:00
1996-10-07 14:07:39 +00:00
set_row ( r + + , riga ) ;
}
if ( comune . not_empty ( ) | | prov . not_empty ( ) | | capcf . not_empty ( ) )
1995-09-01 09:38:25 +00:00
{
1996-10-07 14:07:39 +00:00
sprintf ( riga , " @%dg%s %s %s " ,
POSCONTO ,
( const char * ) capcf , ( const char * ) comune ,
( const char * ) prov
) ;
set_row ( r + + , riga ) ;
}
// Se fisica prendo anche data nascita e luogo
if ( tipoa = = ' F ' )
{
TString80 comna ;
TString16 datana , codcomna , provna , capna , statona ;
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
datana = clifo . get ( " DATANASC " ) ;
1995-09-01 09:38:25 +00:00
1996-10-07 14:07:39 +00:00
if ( datana . not_empty ( ) )
{
2003-03-14 15:13:36 +00:00
codcomna = clifo . get ( " COMNASC " ) ;
statona = clifo . get ( " STATONASC " ) ;
1999-04-06 15:34:39 +00:00
const TRectype & dep = look_com ( codcomna , statona ) ;
1996-10-07 14:07:39 +00:00
comna = dep . get ( COM_DENCOM ) ;
provna = dep . get ( COM_PROVCOM ) ;
capna = dep . get ( COM_CAPCOM ) ;
sprintf ( riga , " @%dg%s %s %s %s " , POSCONTO ,
( const char * ) datana ,
( const char * ) comna ,
( const char * ) provna , ( const char * ) capna ) ;
set_row ( r + + , riga ) ;
}
1995-09-01 09:38:25 +00:00
}
1996-10-07 14:07:39 +00:00
return r ;
1995-09-01 09:38:25 +00:00
}
//
// Lettura/aggiornamento tabella registri
//
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : aggiorna_tabreg ( int partito_da , int stampate )
1995-09-01 09:38:25 +00:00
{
TString16 codtab ;
1996-09-06 14:00:50 +00:00
codtab . format ( " %04d%-3s " , _ae_solare , ( const char * ) _reg_cod ) ;
1995-09-01 09:38:25 +00:00
1997-05-21 09:42:14 +00:00
_tabreg - > zero ( ) ;
1995-09-01 09:38:25 +00:00
_tabreg - > put ( " CODTAB " , codtab ) ;
1997-05-21 09:42:14 +00:00
_tabreg - > read ( _isequal , _lock ) ;
1995-09-01 09:38:25 +00:00
if ( _tabreg - > good ( ) )
{
2000-10-03 13:45:12 +00:00
_tabreg - > put ( " I1 " , ( long ) _pagina_da + stampate ) ; // pagine stampate
1995-09-01 09:38:25 +00:00
_tabreg - > put ( " I6 " , _nprog_mov ) ; // ultimo numero di riga
_tabreg - > put ( " R1 " , _tot_dare_generale ) ;
_tabreg - > put ( " R2 " , _tot_avere_generale ) ;
_tabreg - > put ( " D3 " , _ultima_data_mov ) ; // Data piu' alta trovata
_tabreg - > rewrite ( ) ;
}
}
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : controlla_mov_aep ( )
1995-09-01 09:38:25 +00:00
{
1997-05-21 09:42:14 +00:00
TWait_cursor hourglass ;
2000-10-03 13:45:12 +00:00
TEsercizi_contabili esc ;
const int aep = esc . pred ( _ae ) ;
1995-09-01 09:38:25 +00:00
TDate inizio_ep , fine_ep ;
2000-10-03 13:45:12 +00:00
if ( aep > 0 )
{
inizio_ep = esc [ aep ] . inizio ( ) ;
fine_ep = esc [ aep ] . fine ( ) ;
}
1996-10-07 14:07:39 +00:00
else
2000-10-03 13:45:12 +00:00
return TRUE ; // = e' il primo esercizio
1995-09-01 09:38:25 +00:00
2000-10-03 13:45:12 +00:00
TRectype da ( LF_MOV ) , a ( LF_MOV ) ;
1995-09-01 09:38:25 +00:00
da . put ( MOV_DATAREG , inizio_ep ) ;
a . put ( MOV_DATAREG , fine_ep ) ;
_cur - > setregion ( da , a ) ;
2000-10-03 13:45:12 +00:00
_cur - > setfilter ( " " ) ;
1999-04-06 15:34:39 +00:00
_cur - > set_filterfunction ( filter_func , TRUE ) ;
2000-10-03 13:45:12 +00:00
const TRecnotype items = _cur - > items ( ) ;
_cur - > freeze ( ) ;
2003-03-14 15:13:36 +00:00
TProgind pi ( items , TR ( " Controllo movimenti esercizio precedente " ) , FALSE , TRUE ) ;
1996-10-07 14:07:39 +00:00
bool gia_stampati = TRUE ;
2000-10-03 13:45:12 +00:00
for ( * _cur = 0L ; _cur - > pos ( ) < items ; + + ( * _cur ) )
{
pi . addstatus ( 1 ) ;
1995-09-01 09:38:25 +00:00
gia_stampati = _cur - > file ( ) . get_bool ( " STAMPATO " ) ;
if ( ! gia_stampati ) break ; // basta trovarne uno ancora da stampare
}
2000-10-03 13:45:12 +00:00
_cur - > freeze ( FALSE ) ;
if ( ! gia_stampati )
2003-03-14 15:13:36 +00:00
error_box ( TR ( " Impossibile proseguire con la stampa: \n "
2000-10-03 13:45:12 +00:00
" Esistono movimenti nell'esercizio precedente \n "
2003-03-14 15:13:36 +00:00
" che non sono ancora stati stampati su bollato. " ) ) ;
2000-10-03 13:45:12 +00:00
return gia_stampati ;
1995-09-01 09:38:25 +00:00
}
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : leggi_tabreg ( const char * reg_cod , int reg_anno )
1995-09-01 09:38:25 +00:00
{
TString16 codtab ;
codtab . format ( " %04d%-3s " , reg_anno , reg_cod ) ;
_tabreg - > put ( " CODTAB " , codtab ) ;
2002-12-20 16:15:03 +00:00
const bool ok = _tabreg - > read ( ) = = NOERR ;
if ( ! ok )
_tabreg - > zero ( ) ;
1995-09-01 09:38:25 +00:00
_pagine_stampate = _tabreg - > get_int ( " I1 " ) ;
_pagine_numerate = _tabreg - > get_int ( " I2 " ) ;
2002-12-20 16:15:03 +00:00
_stampa_num_pag = _tabreg - > get_bool ( " S11 " ) ;
1995-09-01 09:38:25 +00:00
_nprog_da = _tabreg - > get_long ( " I6 " ) ;
_tot_dare = _tabreg - > get_real ( " R1 " ) ;
_tot_avere = _tabreg - > get_real ( " R2 " ) ;
_last_data = _tabreg - > get_date ( " D3 " ) ;
_stampa_intesta = _tabreg - > get_bool ( " B9 " ) ;
_stampa_stesso_registro = _tabreg - > get_bool ( " B8 " ) ;
_reg_descr = _tabreg - > get ( " S0 " ) ;
_tipo = _tabreg - > get_int ( " I0 " ) ;
return ok ;
}
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : set_reg_filter ( TMask & m )
1995-09-01 09:38:25 +00:00
{
TEdit_field & reg = m . efield ( CODREG ) ;
reg . browse ( ) - > cursor ( ) - > set_filterfunction ( filtra_reg ) ;
}
//-----------------------------------------------------------------------
//
// MASCHERE
//
//-----------------------------------------------------------------------
// NB
// Qui viene compilato app()._ae
2004-05-20 15:43:37 +00:00
// L'anno di esercizio e' quello iniziale (in caso di esercizio a cavallo di 2 anni!)
1995-09-01 09:38:25 +00:00
//
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : data_a_hndl ( TMask_field & f , KEY k )
1995-09-01 09:38:25 +00:00
{
1996-10-07 14:07:39 +00:00
TMask & m = f . mask ( ) ;
1995-09-01 09:38:25 +00:00
if ( f . to_check ( k ) )
{
1996-10-07 14:07:39 +00:00
const TDate data_a ( f . get ( ) ) ;
1995-09-01 09:38:25 +00:00
1996-10-07 14:07:39 +00:00
if ( ! data_a . ok ( ) )
return TRUE ;
1996-09-06 14:00:50 +00:00
1998-04-30 15:59:34 +00:00
TEsercizi_contabili esc ;
2004-05-20 15:43:37 +00:00
const int esercizio = esc . date2esc ( data_a ) ;
if ( esercizio < = 0 )
2003-03-14 15:13:36 +00:00
return f . error_box ( TR ( " La data non appartiene a nessun esercizio " ) ) ;
1998-04-30 15:59:34 +00:00
2004-05-20 15:43:37 +00:00
app ( ) . _ae_solare = esc [ esercizio ] . inizio ( ) . year ( ) ; //in caso di esercizio a cavallo di 2 anni va preso il primo anno
app ( ) . _ae = esercizio ;
1996-10-07 14:07:39 +00:00
m . set ( ANNO_ESER , app ( ) . _ae_solare ) ;
m . send_key ( K_TAB , CODREG ) ;
1995-09-01 09:38:25 +00:00
}
if ( k = = K_ENTER )
{
const bool definitiva = m . get_bool ( STAMPA_DEF ) ;
const TDate data_da ( m . get ( DATA_DA ) ) ;
const TDate data_a ( f . get ( ) ) ;
TString16 dtda ( data_da . string ( ) ) ;
if ( definitiva )
{
1996-10-07 14:07:39 +00:00
if ( dtda . not_empty ( ) )
1995-09-01 09:38:25 +00:00
{
1999-04-16 12:02:04 +00:00
if ( data_da . year ( ) ! = data_a . year ( ) )
2003-03-14 15:13:36 +00:00
return f . warning_box ( TR ( " Le date specificate non appartengono allo stesso anno " ) ) ;
1995-09-01 09:38:25 +00:00
if ( data_da > data_a )
2003-03-14 15:13:36 +00:00
return f . warning_box ( TR ( " La data di partenza non puo' essere maggiore della data finale " ) ) ;
1995-09-01 09:38:25 +00:00
}
}
} // if K_ENTER
return TRUE ;
}
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : data_da_hndl ( TMask_field & f , KEY k )
1995-09-01 09:38:25 +00:00
{
TMask & m = f . mask ( ) ;
// if (f.to_check(k))
if ( k = = K_TAB )
{
1996-10-07 14:07:39 +00:00
const TDate data_da ( f . get ( ) ) ;
const TDate data_a ( m . get ( DATA_A ) ) ;
if ( ! data_da . ok ( ) | | ! data_a . ok ( ) )
1995-09-01 09:38:25 +00:00
return TRUE ;
1996-10-07 14:07:39 +00:00
if ( data_da . year ( ) ! = data_a . year ( ) )
2003-03-14 15:13:36 +00:00
return f . error_box ( TR ( " Le due date non appartengono allo stesso anno " ) ) ;
1995-09-01 09:38:25 +00:00
}
if ( k = = K_ENTER )
{
const bool definitiva = m . get_bool ( STAMPA_DEF ) ;
const TDate data_a ( m . get ( DATA_A ) ) ;
const TDate data_da ( f . get ( ) ) ;
// Controlli sulle date
// se la stampa e' di prova DALLA_DATA e' obbligatoria
1996-10-07 14:07:39 +00:00
if ( ! definitiva & & ! data_da . ok ( ) )
2003-03-14 15:13:36 +00:00
return f . warning_box ( TR ( " Manca la data di partenza " ) ) ;
1995-09-01 09:38:25 +00:00
1996-10-07 14:07:39 +00:00
if ( data_da . ok ( ) & & data_da > data_a )
2003-03-14 15:13:36 +00:00
return f . warning_box ( TR ( " La data di partenza non puo' essere maggiore della data finale " ) ) ;
1995-09-01 09:38:25 +00:00
}
return TRUE ;
}
//
// MASK_A_COD_REG
//
// ----------->>>> SCRIVO ANCHE QUI _ae <<<<----------------
//
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : mask_a_cod_reg ( TMask_field & f , KEY k )
1995-09-01 09:38:25 +00:00
{
if ( f . to_check ( k ) )
{
TMask & m = f . mask ( ) ;
1997-05-21 09:42:14 +00:00
TStampa_giornale & a = app ( ) ;
2004-04-28 20:45:59 +00:00
// const bool definitiva = m.get_bool(STAMPA_DEF); //qui verificare
1995-09-01 09:38:25 +00:00
const TString16 data_astr ( m . get ( DATA_A ) ) ;
const TDate data_a ( m . get ( DATA_A ) ) ;
// 25/11 controlli sul registro solo DOPO aver messo la DATA_A
if ( data_astr . empty ( ) )
return TRUE ;
1996-09-06 14:00:50 +00:00
else
{
1998-04-30 15:59:34 +00:00
TEsercizi_contabili esc ;
2004-05-20 15:43:37 +00:00
const int esercizio = esc . date2esc ( data_a ) ;
if ( esercizio > 0 )
{
a . _ae_solare = esc [ esercizio ] . inizio ( ) . year ( ) ; // Anno solare usato per la tabella dei registriin caso di esercizio a cavallo di 2 anni va preso il primo anno
a . _ae = esercizio ; // Anno esercizio
}
1996-09-06 14:00:50 +00:00
}
1995-09-01 09:38:25 +00:00
2003-03-14 15:13:36 +00:00
const TString16 reg_cod ( f . get ( ) ) ;
2004-04-28 20:45:59 +00:00
a . leggi_tabreg ( reg_cod , a . _ae_solare ) ;
1995-09-01 09:38:25 +00:00
// Output da qui della descrizione del registro e dell'anno
m . set ( REG_DESC , a . _reg_descr ) ;
2003-03-14 15:13:36 +00:00
m . set ( ANNO_ESER , a . _ae_solare ) ;
1995-09-01 09:38:25 +00:00
}
return TRUE ;
}
//
// mask_b_ripristina
//
// Se premo il bottone <Ripristina> rimetto i valori precedenti
// dentro ai campi (per ripetere la stampa)
//
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : mask_b_ripristina ( TMask_field & f , KEY k )
1995-09-01 09:38:25 +00:00
{
if ( k = = K_SPACE )
1997-05-21 09:42:14 +00:00
{
TMask & m = f . mask ( ) ;
TStampa_giornale & a = ( TStampa_giornale & ) main_app ( ) ;
m . set ( PROGR_DARE , a . _tot_dare . string ( ) ) ;
m . set ( ULTIMA_DATA , a . _last_data . string ( ) ) ;
m . set ( N_RIGA_STAMPATO , a . _nprog_da ) ;
m . set ( PAGINA_DA , a . _pagine_stampate ) ;
1995-09-01 09:38:25 +00:00
}
return TRUE ;
}
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : mask_b_warning ( TMask_field & f , KEY k )
1995-09-01 09:38:25 +00:00
{
static bool gia_detto = FALSE ;
1997-05-21 09:42:14 +00:00
if ( k = = K_TAB & & ! f . mask ( ) . is_running ( ) )
gia_detto = FALSE ;
1995-09-01 09:38:25 +00:00
if ( ! gia_detto )
1997-05-21 09:42:14 +00:00
{
1995-09-01 09:38:25 +00:00
if ( k = = K_SPACE )
{
2003-03-14 15:13:36 +00:00
f . warning_box ( TR ( " Le modifiche a questi progressivi saranno scritte nel registro " ) ) ;
1995-09-01 09:38:25 +00:00
gia_detto = TRUE ;
return TRUE ;
}
1997-05-21 09:42:14 +00:00
}
1995-09-01 09:38:25 +00:00
return TRUE ;
}
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : init_print ( )
1995-09-01 09:38:25 +00:00
{
// 17.5.95 Leggo parametri di stampa del registro
TString16 config ;
1996-10-07 14:07:39 +00:00
config . format ( " REG%05ld%03s " , get_firm ( ) , ( const char * ) _reg_cod ) ;
1995-09-01 09:38:25 +00:00
printer ( ) . read_configuration ( config ) ;
if ( _stampa_len ! = 0 )
printer ( ) . formlen ( _stampa_len ) ;
printer ( ) . footerlen ( RIGHE_FOOTER ) ;
reset_print ( ) ;
reset_header ( ) ;
reset_footer ( ) ;
set_background ( ) ;
for ( int i = 1 ; i < RIGHE_FOOTER ; i + + ) set_footer ( i , " %s " , " " ) ;
1997-10-20 14:23:01 +00:00
set_real_picture ( REAL_PICTURE ) ;
1995-09-01 09:38:25 +00:00
set_print_zero ( TRUE ) ;
if ( _stampa_width = = 1 )
_stampa_width = 132 ;
else
_stampa_width = 198 ;
1997-05-21 09:42:14 +00:00
/* Guy: sarebbe interessante ma non funziona mai!
1995-09-01 09:38:25 +00:00
// Solo se _pagina_da diversa da 0
if ( _pagina_da )
1997-05-21 09:42:14 +00:00
printer ( ) . set_from_page ( _pagina_da - _pagine_stampate ) ;
*/
1995-09-01 09:38:25 +00:00
// la stampa precedente era andata male
// if (_stampa_ok != -1) set_page_number (_stampa_ok);
_last_header = set_headers ( ) ;
}
1997-05-21 09:42:14 +00:00
void TStampa_giornale : : init_totals ( )
1995-09-01 09:38:25 +00:00
{
_tot_dare_gg_ap = ZERO ;
_tot_avere_gg_ap = ZERO ;
_tot_dare_progr_ap = ZERO ;
_tot_avere_progr_ap = ZERO ;
_tot_dare_gg = ZERO ;
_tot_avere_gg = ZERO ;
_tot_dare_generale = ZERO ;
_tot_avere_generale = ZERO ;
if ( _stampa_definitiva )
{
_tot_dare_progr = _tot_dare ;
_tot_avere_progr = _tot_avere ;
}
else
{
_tot_dare_progr = ZERO ;
_tot_avere_progr = ZERO ;
}
}
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : init_cursor ( )
1995-09-01 09:38:25 +00:00
{
2004-04-28 20:45:59 +00:00
// bool gia_stampati = FALSE;
1995-09-01 09:38:25 +00:00
1996-10-07 14:07:39 +00:00
TRectype da ( LF_MOV ) ;
TRectype a ( LF_MOV ) ;
1995-09-01 09:38:25 +00:00
da . put ( MOV_DATAREG , _data_da ) ;
a . put ( MOV_DATAREG , _data_a ) ;
_cur - > setregion ( da , a ) ;
1999-04-06 15:34:39 +00:00
_cur - > set_filterfunction ( filter_func , TRUE ) ;
1995-10-25 10:19:24 +00:00
_cur - > setfilter ( _stampa_definitiva ? " STAMPATO!= \" X \" " : " " ) ;
1995-09-01 09:38:25 +00:00
( * _cur ) = 0L ;
if ( _cur - > items ( ) = = 0L )
{
_cur - > setfilter ( " " ) ;
2003-03-14 15:13:36 +00:00
return warning_box ( TR ( " Non ci sono movimenti da stampare nel periodo selezionato. \n La stampa e' annullata " ) ) ;
1995-09-01 09:38:25 +00:00
}
return TRUE ;
}
1997-05-21 09:42:14 +00:00
bool TStampa_giornale : : set_print ( int )
1995-09-01 09:38:25 +00:00
{
TMask ma ( " cg3400a " ) ;
ma . set_handler ( CODREG , mask_a_cod_reg ) ;
ma . set_handler ( DATA_A , data_a_hndl ) ;
ma . set_handler ( DATA_DA , data_da_hndl ) ;
// set_reg_filter(ma);
_pagina_da = 0 ; // Parto dall'inizio
_forza_ariportare = FALSE ;
1999-04-06 15:34:39 +00:00
KEY tasto ;
1995-09-01 09:38:25 +00:00
while ( ( tasto = ma . run ( ) ) ! = K_QUIT )
{
_reg_cod = ma . get ( CODREG ) ;
_stampa_definitiva = ma . get_bool ( STAMPA_DEF ) ;
_data_da = ma . get ( DATA_DA ) ;
_data_a = ma . get ( DATA_A ) ;
_stampa_width = ma . get_int ( STAMPA_WIDTH ) ;
_stampa_len = ma . get_int ( STAMPA_LEN ) ;
1999-04-06 15:34:39 +00:00
set_magic_currency ( TRUE ) ;
2001-05-01 08:17:07 +00:00
// set_curr_codval(ma.get(F_CODVAL));
1999-04-06 15:34:39 +00:00
1995-09-01 09:38:25 +00:00
// Se stampa definitiva DALLA_DATA e' la data di inizio esercizio
// e si scartano i movimenti gia' stampati su bollato
if ( _stampa_definitiva )
{
1998-04-30 15:59:34 +00:00
TEsercizi_contabili esc ;
2000-10-03 13:45:12 +00:00
_ae = esc . date2esc ( _data_a ) ;
_data_da = esc [ _ae ] . inizio ( ) ;
2005-05-16 23:44:23 +00:00
_ae_solare = _data_da . year ( ) ; // qui modificato
1995-09-01 09:38:25 +00:00
// Controlla che non siano rimasti movimenti ancora da stampare dell'es.prec.
if ( _stampa_stesso_registro )
if ( ! controlla_mov_aep ( ) )
continue ;
}
if ( ! init_cursor ( ) ) continue ;
if ( _stampa_definitiva )
{
TMask mb ( " cg3400b " ) ;
mb . set_handler ( DLG_RIPRISTINA , mask_b_ripristina ) ;
mb . set_handler ( PROGR_DARE , mask_b_warning ) ;
mb . set_handler ( N_RIGA_STAMPATO , mask_b_warning ) ;
mb . set_handler ( ULTIMA_DATA , mask_b_warning ) ;
mb . set ( PROGR_DARE , _tot_dare . string ( ) ) ;
mb . set ( N_RIGA_STAMPATO , _nprog_da ) ;
mb . set ( ULTIMA_DATA , _last_data . string ( ) ) ;
mb . set ( PAGINA_DA , _pagine_stampate ) ;
tasto = mb . run ( ) ;
if ( tasto = = K_ENTER )
{
_nprog_da = mb . get_long ( N_RIGA_STAMPATO ) ;
_last_data = mb . get ( ULTIMA_DATA ) ;
1995-10-18 11:00:49 +00:00
real dare2 ( mb . get ( PROGR_DARE ) ) ;
1995-09-01 09:38:25 +00:00
_pagina_da = mb . get_int ( PAGINA_DA ) ;
// "Se l'utente cambia il progressivo dare, esso viene uguagliato all'avere"
if ( dare2 ! = _tot_dare )
{
_tot_dare = dare2 ;
_tot_avere = dare2 ;
}
}
else
continue ;
}
init_print ( ) ;
init_totals ( ) ;
return TRUE ;
}
return FALSE ;
}
int cg3400 ( int argc , char * argv [ ] )
{
1997-05-21 09:42:14 +00:00
TStampa_giornale app ;
2003-03-14 15:13:36 +00:00
app . run ( argc , argv , TR ( " Stampa libro giornale " ) ) ;
1995-09-01 09:38:25 +00:00
return TRUE ;
}