diff --git a/cg/cg3400.cpp b/cg/cg3400.cpp index 75ec38eb8..f5be2d552 100755 --- a/cg/cg3400.cpp +++ b/cg/cg3400.cpp @@ -22,19 +22,22 @@ #include #include +#include "conto.h" #include "cglib03.h" #include "cg2103.h" #include "cg3400a.h" #include "cg3400b.h" -#define RIGHE_FOOTER 10 #define REAL_PICTURE "###.###.###.###" -static TString256 tmp; +HIDDEN const int RIGHE_MODULO = 66; +HIDDEN const int RIGHE_FOOTER = 10; + +HIDDEN TString256 tmp; HIDDEN int date2esc(const TDate& d, int* prevesc = NULL); -enum descr { causale, conto, operazione }; +HIDDEN enum descr { causale, conto, operazione }; class CG3400_application : public TPrintapp { @@ -48,8 +51,8 @@ public: TCursor * _cur; TRectype * _RecPartoDa, *_RecArrivoA; - int _ae; // anno esercizio di ALLA_DATA - TString _reg_cod, _reg_descr; + 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 @@ -58,9 +61,9 @@ public: long _nprog_da, _nprog_mov; int _num_rig, _stampa_width, _stampa_len; - TParagraph_string *_descr_conto; - TParagraph_string *_descr_causale; - TParagraph_string *_descr_operazione; + TParagraph_string* _descr_conto; + TParagraph_string* _descr_causale; + TParagraph_string* _descr_operazione; int _pagine_stampate, _pagine_numerate, _stampa_ok, _pagina_da; TDate _data_corr, _data_succ; @@ -68,16 +71,19 @@ public: int _last_header; // prima riga di intestazione "libera" bool _libro_giornale_iva_unico, _libro_cronologico, _stampa_intesta; - bool _occas; // se e' cliente occasionale bool _gia_settata_riga_mov; // per la stampa no iva - TString _viacf, _civcf, _comcf, _capcf, _statocf; // dati C/F - TString _ragsoc, _paiva, _comunefis, _provfis, _viafis; // dati ditta - TString _cofi, _cap; - TLocalisamfile * _com, *_clifo,*_pconti,*_nditte,*_anag, *_caus; + + TString80 _ragsoc, _paiva, _comunefis, _viafis; + TString16 _provfis, _cap, _occfpi; + TString80 _cofi; + TString16 _caus; + + TLocalisamfile * _com, *_clifo,*_pconti,*_nditte,*_anag, *_causali; TTable *_tabreg, *_tabval, *_tabes; public: - int _annoEsMov; + int _ae; // anno esercizio di ALLA_DATA + int _annoEsMov; // anno esercizio letto da mov bool _stampa_definitiva; TDate _inizioEs, _fineEs; // date inizio e fine esercizio TString256 _riporto; // riga di stampa per i riporti @@ -89,15 +95,13 @@ public: virtual bool preprocess_print(int, int); virtual print_action postprocess_print(int, int); virtual void postclose_print(); - virtual void user_create(); virtual void user_destroy(); - virtual void set_page (int, int); void set_rows (int, int); void set_page_132(int, int); void set_page_198(int, int); - void setta_righe_indirizzo(); + void setta_righe_indirizzo(char tipocf, long codcf); int setta_righe_iva(); void setta_righe_valuta(); void setta_righe_descr(TParagraph_string*, enum descr); @@ -113,16 +117,13 @@ public: void aggiorna_tabreg(int, int); void aggiorna_mov(); void scrivi_numgio(long); - void stampa_totali_giorno(TDate, bool); + void set_totali_giorno(const TDate& giorno, const int righeivasettate); void get_dati_ditta (); - TLocalisamfile * get_descr (TLocalisamfile*,TLocalisamfile*,int, int, long); + const char* SimboloValuta (const char * cod); + const char* get_descr_caus (const char * codcaus); + TRectype& look_com (const char * cod); - bool IsInEsercizio (TDate& da, TDate& a, int anno_eser); - const char * SimboloValuta (const char * cod); - const char * get_descr_caus (const char * codcaus); - - CG3400_application() : _reg_cod(3), _tot_dare_progr(0.00), - _tot_avere_progr (0.00), _data_da(""), _data_a("") {}; + CG3400_application() : _tot_dare_progr(ZERO),_tot_avere_progr (ZERO) {}; virtual ~CG3400_application() {}; }; @@ -133,58 +134,24 @@ HIDDEN CG3400_application * app() { return (CG3400_application*) MainApp(); } ////////////////////////////////////////////////////////////////////////// HIDDEN bool libro_giornale_iva_unico() { - static bool lgiu = 2; - - if (lgiu == 2) - { - TConfig conf(CONFIG_DITTA); - lgiu = conf.get_bool("StLgiU"); - } - return lgiu; + TConfig conf(CONFIG_DITTA); + return conf.get_bool("StLgiU"); } HIDDEN bool libro_cronologico() { - static bool lc = 2; - - if (lc == 2) - { - TConfig conf(CONFIG_DITTA); - lc = conf.get_bool("GsLbCn"); - } - return lc; + TConfig conf(CONFIG_DITTA); + return conf.get_bool("GsLbCn"); } -TRectype& look_com (const char * cod, TLocalisamfile *comuni) +TRectype& CG3400_application::look_com (const char * cod) { - comuni->zero(); - comuni->put(COM_COM, cod); - comuni->read(); - if (comuni->bad()) - comuni->zero(); + _com->zero(); + _com->put(COM_COM, cod); + if (_com->read() == NOERR) + _com->zero(); - return comuni->curr(); -} - -bool CG3400_application::IsInEsercizio (TDate& da, TDate& a, int anno_eser) -{ - TTable& TabEs = *_tabes; - TString16 codtab; - - if (!da.ok() || !a.ok()) return FALSE; - - codtab.format ("%04d", anno_eser); - TabEs.zero(); - TabEs.put ("CODTAB", codtab); - TabEs.read(); - - if (TabEs.good()) - { - _inizioEs = TabEs.get_date ("D0"); - _fineEs = TabEs.get_date ("D1"); - return (da >= _inizioEs && a <= _fineEs); - } - return FALSE; + return _com->curr(); } const char * CG3400_application::SimboloValuta (const char * cod) @@ -208,7 +175,7 @@ const char * CG3400_application::SimboloValuta (const char * cod) const char * CG3400_application::get_descr_caus (const char * codcaus) { - TLocalisamfile& caus = *_caus; + TLocalisamfile& caus = *_causali; caus.zero(); caus.put (CAU_CODCAUS, codcaus); @@ -216,49 +183,12 @@ const char * CG3400_application::get_descr_caus (const char * codcaus) tmp = caus.get(CAU_DESCR); return tmp; -} - -TLocalisamfile * CG3400_application::get_descr (TLocalisamfile *pconti, - TLocalisamfile *clifo, - int g, int c, long s) -{ - pconti->zero(); - pconti->put (PCN_GRUPPO, g); - pconti->put (PCN_CONTO , c); - pconti->put (PCN_SOTTOCONTO, s); - - pconti->read(); - - if (pconti->good()) - return pconti; - - TString tipocf = pconti->get(PCN_TMCF); - long codcf = s; - - clifo->zero(); - clifo->put(CLI_CODCF, codcf); - clifo->put(CLI_TIPOCF, tipocf); - - clifo->read(); - - if (clifo->good()) - { - _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); - _occas = clifo->get_bool(CLI_OCCAS); - return clifo; - } - - return NULL; -} +} void CG3400_application::get_dati_ditta () { - TString codanagr; - TString tipoa; + TString16 codanagr; + TString16 tipoa; _nditte->zero(); _nditte->put(NDT_CODDITTA, get_firm()); @@ -285,11 +215,12 @@ void CG3400_application::get_dati_ditta () if (_comunefis.empty()) _comunefis = _anag->get(ANF_COMRES); - TRectype dep = look_com (_comunefis, _com); + TRectype dep = look_com (_comunefis); _comunefis = dep.get(COM_DENCOM); _provfis = dep.get(COM_PROVCOM); _cap = dep.get(COM_CAPCOM); + if (_comunefis.empty()) { _viafis = _anag->get(ANA_INDRF); @@ -306,33 +237,31 @@ void CG3400_application::get_dati_ditta () void CG3400_application::user_create() { - _libro_giornale_iva_unico = libro_giornale_iva_unico(); - _libro_cronologico = libro_cronologico(); - _tabreg = new TTable ("REG"); _tabval = new TTable ("%VAL"); _tabes = new TTable ("ESC"); - _nditte = new TLocalisamfile(LF_NDITTE); - _anag = new TLocalisamfile (LF_ANAG); - _com = new TLocalisamfile(LF_COMUNI); - _clifo = new TLocalisamfile(LF_CLIFO); - _pconti = new TLocalisamfile(LF_PCON); - _caus = new TLocalisamfile(LF_CAUSALI); + _nditte = new TLocalisamfile(LF_NDITTE); + _anag = new TLocalisamfile (LF_ANAG); + _com = new TLocalisamfile(LF_COMUNI); + _clifo = new TLocalisamfile(LF_CLIFO); + _pconti = new TLocalisamfile(LF_PCON); + _causali = new TLocalisamfile(LF_CAUSALI); - _descr_conto = new TParagraph_string ("",10); - _descr_operazione = new TParagraph_string ("",10); - _descr_causale = new TParagraph_string ("",10); + _descr_conto = new TParagraph_string ("",21); + _descr_operazione = new TParagraph_string ("",28); + _descr_causale = new TParagraph_string ("",20); - disable_print_menu(); +// disable_print_menu(); _rel = new TRelation (LF_MOV); _rel->add (LF_RMOV, "NUMREG=NUMREG"); _rel->add (LF_RMOVIVA, "NUMREG=NUMREG"); _cur = new TCursor (_rel, "", 2); // usa la chiave 2 su MOV - _RecPartoDa = new TRectype(_cur->file(LF_MOV).curr()); - _RecArrivoA = new TRectype(_cur->file(LF_MOV).curr()); + + _RecPartoDa = new TRectype(_cur->file(LF_MOV)); + _RecArrivoA = new TRectype(_cur->file(LF_MOV)); add_cursor (_cur); @@ -348,7 +277,7 @@ void CG3400_application::user_destroy() delete _RecPartoDa; delete _RecArrivoA; - delete _com; delete _clifo; delete _caus; delete _pconti; + delete _com; delete _clifo; delete _causali; delete _pconti; delete _nditte; delete _anag; delete _tabreg; delete _tabes; delete _tabval; @@ -389,49 +318,44 @@ void CG3400_application::aggiorna_mov() void CG3400_application::scrivi_numgio(long nprog) { TLocalisamfile &mov = current_cursor()->file(LF_MOV); + mov.reread(_lock); mov.put (MOV_NUMGIO, nprog); mov.rewrite(); } -void CG3400_application::stampa_totali_giorno(TDate data, bool ff) +// NB +// Se si usa un codice @g dopo un +// @b (bold) il primo pezzo perde qualche carattere in visualizzazione +// (in stampa su carta non ho provato) +// +void CG3400_application::set_totali_giorno(const TDate& data, const int righeiva) { + int r = 1 + righeiva; TString dep(_stampa_width); - dep = "@10gOperazioni del "; - dep << data.string(); - // dep.center_just(); - - set_row (1, "%s", (const char *)dep); + dep = "Operazioni del "; dep << data.string(); if (_stampa_width == 132) - // set_row (1, "@94g %15r @112g %15r", &_tot_dare_gg, &_tot_avere_gg ); - set_row (1, "@94g %r @112g %r", &_tot_dare_gg, &_tot_avere_gg ); + set_row (r++, "@b@10g%s Dare: %r Avere: %r", (const char *)dep, &_tot_dare_gg, &_tot_avere_gg ); else - set_row (1, "@142g %r @164g %r", &_tot_dare_gg, &_tot_avere_gg ); + set_row (r++, "@b@10g%s Dare: %r Avere: %r", (const char *)dep, &_tot_dare_gg, &_tot_avere_gg ); - if ( (_tot_avere_ac != 0) || (_tot_dare_ac != 0) ) + if ( _tot_avere_ac != ZERO || _tot_dare_ac != ZERO ) { - dep = "@10gOperazioni del "; - dep << data.string() << " " << "Anno precedente"; - // dep.center_just(); - set_row (2, "%s", (const char *)dep); + dep = "Operazioni del "; dep << data.string() << " " << "Anno precedente"; + if (_stampa_width == 132) - set_row (2, "@95g %r @112g %r", &_tot_dare_ac, - &_tot_avere_ac ); + set_row (r++, "@b@10g%s Dare: %r Avere: %r", (const char *)dep, &_tot_dare_ac, &_tot_avere_ac ); else - set_row (2, "@142g %r @164g %r", &_tot_dare_ac, - &_tot_avere_ac ); - _tot_avere_ac = 0.00; - _tot_dare_ac = 0.00; - set_row (3, ""); + set_row (r++, "@b@10g%s Dare: %r Avere: %r", (const char *)dep, &_tot_dare_ac, &_tot_avere_ac ); + + _tot_avere_ac = _tot_dare_ac = ZERO; + + set_row (r, ""); } else - set_row (2, ""); // Lascio una riga vuota dopo il totale - - if (ff) printer().formfeed(); - // if (ff) set_auto_ff (TRUE); - // else set_auto_ff (FALSE); + set_row (r, ""); // Lascio una riga vuota dopo il totale } // -------------------------------------------------------------------------- @@ -442,13 +366,13 @@ void CG3400_application::stampa_totali_giorno(TDate data, bool ff) void CG3400_application::set_page_132 (int file, int counter) { int r = 1; - switch (file) + switch (file) { case LF_MOV: if (_libro_giornale_iva_unico) { if (_stampa_definitiva) - set_row(r,"Registrazione n. #-7ld del @d documento n. @7s del @d @56g@s Anno di competenza %04d", + set_row(r,"Registrazione n. #-3ld del @d documento n. @3n del @d @s Anno di competenza %04d", &_nprog_mov, FLD(LF_MOV, MOV_DATAREG), FLD(LF_MOV, MOV_NUMDOC), @@ -456,7 +380,7 @@ void CG3400_application::set_page_132 (int file, int counter) FLD(LF_MOV, MOV_DESCR), _ae); else - set_row(r,"Registrazione n. @7,lpn del @d documento n. @7s del @d @56g@s Anno di competenza %04d", + set_row(r,"Registrazione n. @3,lpn del @d documento n. @7s del @d @s Anno di competenza %04d", FLD(LF_MOV, MOV_NUMREG, "#######"), FLD(LF_MOV, MOV_DATAREG), FLD(LF_MOV, MOV_NUMDOC), @@ -473,8 +397,33 @@ void CG3400_application::set_page_132 (int file, int counter) } break; - + case LF_RMOV: + if (_libro_giornale_iva_unico) + { + if (!_stampa_definitiva) + set_row (r, "%3d", _num_rig); + + set_row (r, "@5g@3s@56g@pn@pn@pn", + FLD(LF_MOV, MOV_CODCAUS), + FLD(LF_RMOV, RMV_GRUPPO, "@@."), + FLD(LF_RMOV, RMV_CONTO , "@@."), + FLD(LF_RMOV, RMV_SOTTOCONTO, "@@@@@@") + ); + } + else // no libro_giornale_iva_unico + { + if (_stampa_definitiva) + set_row (r, "#-3ld", &_nprog_mov); + else + set_row (r, "@3,rn", FLD(LF_RMOV, RMV_NUMREG)); + set_row (r, "@4g@d@13g@pn@pn@pn", + FLD(LF_RMOV, RMV_DATAREG), + FLD(LF_RMOV, RMV_GRUPPO, "@@."), + FLD(LF_RMOV, RMV_CONTO , "@@."), + FLD(LF_RMOV, RMV_SOTTOCONTO, "@@@@@@") + ); + } break; case LF_RMOVIVA: break; @@ -525,40 +474,6 @@ void CG3400_application::set_page_198 (int file, int counter) } } -void CG3400_application::set_rows(int file, int counter) -{ - int r=1; - switch (file) - { - case LF_RMOV: - if (_libro_giornale_iva_unico) - { - if (!_stampa_definitiva) set_row (r, "%3d", _num_rig); - set_row (r, "@5g@3s@60g@pn@pn@pn", - FLD(LF_MOV, MOV_CODCAUS), - FLD(LF_RMOV, RMV_GRUPPO, "@@."), - FLD(LF_RMOV, RMV_CONTO , "@@."), - FLD(LF_RMOV, RMV_SOTTOCONTO, "@@@@@@") - ); - } - else // no libro_giornale_iva_unico - { - if (_stampa_definitiva) - set_row (r, "#-7ld", &_nprog_mov); - else - set_row (r, "@7,rn", FLD(LF_RMOV, RMV_NUMREG)); - set_row (r, "@10g@d@28g@pn@pn@pn", - FLD(LF_RMOV, RMV_DATAREG), - FLD(LF_RMOV, RMV_GRUPPO, "@@."), - FLD(LF_RMOV, RMV_CONTO , "@@."), - FLD(LF_RMOV, RMV_SOTTOCONTO, "@@@@@@") - ); - } - break; - default: - break; - } -} void CG3400_application::set_page (int file, int counter) { @@ -573,15 +488,9 @@ void CG3400_application::set_page (int file, int counter) print_action CG3400_application::postprocess_print(int file, int counter) { - switch (file) - { - case LF_RMOV: - break; + switch (file) { case LF_MOV: - { - printer().formfeed(); *_RecArrivoA = _cur->file(LF_MOV).curr(); - } break; default: break; @@ -591,30 +500,34 @@ print_action CG3400_application::postprocess_print(int file, int counter) void CG3400_application::postclose_print() { - const int ultima_fatta = printer().getcurrentpage(); - const int stampate = ultima_fatta - _pagina_da + 1; - if (yesno_box("La stampa e' corretta ? ")) + if (_stampa_definitiva) { - _pagina_da = -1; - aggiorna_mov (); + const int ultima_fatta = printer().getcurrentpage(); + const int stampate = ultima_fatta - _pagina_da + 1; + + if (yesno_box("La stampa e' corretta ? ")) + { + _pagina_da = -1; + aggiorna_mov (); + } + aggiorna_tabreg (_pagina_da, stampate); } - aggiorna_tabreg (_pagina_da, stampate); } void CG3400_application::preprocess_footer() { - TString dare = _tot_dare_progr.string("###.###.###.###"); - TString avere = _tot_dare_progr.string("###.###.###.###"); - int r=1; + TString16 dare = _tot_dare_progr.string("###.###.###.###"); + TString16 avere = _tot_avere_progr.string("###.###.###.###"); + int r=2; if (_stampa_width == 132) - set_footer (r, "@65gTotale progressivi generali: @95g%s @112g%s", - (const char *)dare, - (const char *)avere); + set_footer (r, "@b@u@65gTotale progressivi generali@r @bDare: %s Avere: %s", + (const char *) dare, + (const char *) avere); else - set_footer (r, "@100gTotale progressivi generali: %s @164gTotale avere: %s", - (const char *)dare, - (const char *)avere); + set_footer (r, "@b@100gTotale progressivi generali Totale dare %s Totale avere %s", + (const char *) dare, + (const char *) avere); } @@ -623,15 +536,23 @@ int CG3400_application::stampa_intestazione_ditta() int r=1; get_dati_ditta(); - set_header (r, "Ditta: %s Via %s %s %s %s", (const char *)_ragsoc, + +#if XVT_OS == XVT_OS_SCOUNIX + riga.fill('-'); + set_header(r, riga); +#endif + + set_header (++r, "Ditta: %s Via %s %s %s %s", (const char *)_ragsoc, (const char *)_viafis, (const char *)_cap, (const char *)_comunefis, (const char *)_provfis); - r++; + _intes = "Data @>"; _intes.right_just(_stampa_width-15); // perche' il codice viene espanso nella data con l'anno in 4 caratteri _intes.overwrite (format ("Partita iva %s @24gCodice fiscale %s", (const char*)_paiva, (const char*)_cofi)); - set_header (r, "%s", (const char*) _intes); - r++; + + set_header (++r, "%s", (const char*) _intes); + + r += 2; return r; } @@ -640,13 +561,12 @@ int CG3400_application::set_header_198() { int r=1; TString riga(_stampa_width); - TString data_da = _data_da.string(); - TString data_a = _data_a.string(); + TString16 data_da = _data_da.string(); + TString16 data_a = _data_a.string(); - if (_stampa_intesta) - r = stampa_intestazione_ditta(); + if (_stampa_intesta) r = stampa_intestazione_ditta(); - set_header(r, "Codice libro: %s %s @40gdalla data: %s alla data: %s", + set_header(r, "@iCodice libro: %s %s @40gdalla data: %s alla data: %s", (const char *) _reg_cod, (const char *) _reg_descr, (const char *) data_da, (const char *) data_a); r++; @@ -684,28 +604,38 @@ int CG3400_application::set_header_198() return r; } +//////////////////////////////////////////////////////////////////// +// HEADER 132 +//////////////////////////////////////////////////////////////////// int CG3400_application::set_header_132() { int r=1; TString riga(_stampa_width); - TString data_da = _data_da.string(); - TString data_a = _data_a.string(); + TString16 data_da = _data_da.string(); + TString16 data_a = _data_a.string(); + if (_stampa_intesta) r = stampa_intestazione_ditta(); + +#if XVT_OS != XVT_OS_SCOUNIX if (_stampa_intesta) - r = stampa_intestazione_ditta(); - - set_header(r, "Codice libro: %s %s @50gdalla data: %s alla data: %s", - (const char *) _reg_cod, (const char *) _reg_descr, - (const char *) data_da, (const char *) data_a); - r++; - + set_background("W4l{1 1 132 1}W4l{1 4 132 4}W1l{1 8 132 8}"); + else + { + set_background("W4l{1 1 132 1}W1l{1 5 132 5}"); + r++; + } +#else riga.fill('-'); set_header(r, riga); - r++; +#endif - //////////////////////////////////////////////////////////////////// - // LIBRO GIORNALE IVA UNICO - //////////////////////////////////////////////////////////////////// + set_header(r++, "@bCodice libro:@r %s %s @50g@bdalla data:@r %s @balla data:@r %s", + (const char *) _reg_cod, (const char *) _reg_descr, + (const char *) data_da, (const char *) data_a); + +//////////////////////////////////////////////////////////////////// +// LIBRO GIORNALE IVA UNICO +//////////////////////////////////////////////////////////////////// if (_libro_giornale_iva_unico) { set_header(r, "Ri"); @@ -723,9 +653,9 @@ int CG3400_application::set_header_132() r++; } else - //////////////////////////////////////////////////////////////////// - // NO LIBRO GIORNALE IVA UNICO - //////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////// +// NO LIBRO GIORNALE IVA UNICO +//////////////////////////////////////////////////////////////////// { set_header(r, "Numero@12gDocumento@28gCodice@115gImporti@127g A S"); r++; @@ -738,9 +668,11 @@ int CG3400_application::set_header_132() r++; } +#if XVT_OS == XVT_OS_SCOUNIX riga.fill('-'); set_header(r, riga); - r++; +#endif + return r; } @@ -748,21 +680,22 @@ void CG3400_application::preprocess_header() { int pag = printer().getcurrentpage(); TString dare = _tot_dare_progr.string(REAL_PICTURE); - TString avere = _tot_dare_progr.string(REAL_PICTURE); - int r = _last_header; + TString avere = _tot_avere_progr.string(REAL_PICTURE); + int r = _last_header + 1; if (pag > 0) // Stampa riporti { dare.right_just(); avere.right_just(); if (_stampa_width == 132) - _riporto.format ("@86gRiporto:@95g %15s @112g %15s", + _riporto.format ("@b@86gRiporto: %15s %15s", (const char *) dare, (const char *) avere ); else - _riporto.format ("@100gRiporto %s @140g %s", (const char *) dare, + _riporto.format ("@b@100gRiporto %s @140g %s", (const char *) dare, (const char *) avere ); - set_header (r, "%s", (const char *) _riporto); + set_header (r++, "%s", (const char *) _riporto); + set_header (r, ""); } } @@ -789,24 +722,20 @@ bool CG3400_application::preprocess_print(int file, int counter) switch (file) { case LF_MOV: - reset_print(); - reset_header(); - printer().footerlen(RIGHE_FOOTER); + _gia_settata_riga_mov = FALSE; // Stampa o no la riga di mov (solo se - // NO stampa giornale_iva_unico - _num_rig = 0; - _tot_dare_ac = 0.00; - _tot_avere_ac = 0.00; - _tot_dare_gg = 0.00; - _tot_avere_gg = 0.00; + // NO stampa giornale_iva_unico + _num_rig = 1; + _tot_dare_ac = ZERO; + _tot_avere_ac = ZERO; + _tot_dare_gg = ZERO; + _tot_avere_gg = ZERO; _tot_dare_progr = _tot_dare; _tot_avere_progr = _tot_avere; _iva_array.destroy(); - if (current_cursor()->items() == 0) - { - warning_box ("Non ci sono movimenti.\nLa stampa e' annullata"); - return FALSE; - } + + if (_cur->items() == 0) + return warning_box ("Non ci sono movimenti.\nLa stampa e' annullata"); _nprog_mov = _nprog_da; @@ -815,21 +744,6 @@ bool CG3400_application::preprocess_print(int file, int counter) for (i=1; i 0) - return REPEAT_PAGE; - // else - // return NEXT_PAGE; - } + righe_iva_settate = setta_righe_iva(); + _cur->save_status(); ++(*_cur); _data_succ = _cur->file(LF_MOV).get_date(MOV_DATAREG); _mese_succ = _data_succ.month(); --(*_cur); _cur->restore_status(); - if (_data_corr != _data_succ) + +// if (_data_corr != _data_succ || _cur->lastrec()) + if (_data_corr != _data_succ || _cur->pos() == _cur->items()) { - reset_print(); - if (_mese_succ != _mese_corr) nuovo_mese = TRUE; - else nuovo_mese = FALSE; - stampa_totali_giorno(_data_corr, nuovo_mese); - _tot_dare_gg = 0.00; - _tot_avere_gg = 0.00; + nuovo_mese = (_mese_succ != _mese_corr); + + set_totali_giorno(_data_corr, righe_iva_settate); + + _tot_dare_gg = _tot_avere_gg = ZERO; + _gia_settata_riga_mov = FALSE; + return REPEAT_PAGE; } else _gia_settata_riga_mov = TRUE; + + if (righe_iva_settate > 0) + return REPEAT_PAGE; + break; case LF_RMOVIVA: default: - // set_auto_ff(FALSE); // ff gia' fatto prima break; } return NEXT_PAGE; @@ -917,119 +835,95 @@ print_action CG3400_application::postprocess_page(int file, int counter) // bool CG3400_application::preprocess_page(int file, int counter) { - TLocalisamfile * boh; - int g, c; - long s; - bool gia_stampato=FALSE; - TString sezione, caus, rmv_descr; - real importo; - + static char cf; + int g, c; + long s; + bool gia_stampato=FALSE; + TString80 rmv_descr; + char sezione; + real importo; + TString16 frm; + TConto tc; + if (counter) return TRUE; - switch (file) - { + switch (file) { + case LF_MOV: - _num_rig=0; + _num_rig=1; _iva_array.destroy(); - if (!current_cursor()->is_first_match(LF_RMOV)) return FALSE; + if (!_cur->is_first_match(LF_RMOV)) return FALSE; + + gia_stampato = _cur->file(LF_MOV).get_bool(MOV_STAMPATO); - gia_stampato = current_cursor()->file(LF_MOV).get_bool(MOV_STAMPATO); if (gia_stampato) if (_stampa_definitiva) return FALSE; - else - set_row (1, "@131g*"); // stampo un * se mov. gia stampato + else { + if (_stampa_width == 132) + set_row (1, "@131g*"); // stampo un * se mov. gia stampato + else + set_row (1, "@197g*"); + } if (_libro_giornale_iva_unico) _nprog_mov++; _data_corr = _cur->file(LF_MOV).get_date(MOV_DATAREG); _mese_corr = _data_corr.month(); _annoEsMov = _cur->file(LF_MOV).get_int(MOV_ANNOES); - caus = _cur->file(LF_MOV).get(MOV_CODCAUS); - + _caus = _cur->file(LF_MOV).get(MOV_CODCAUS); + _occfpi = _cur->file(LF_MOV).get(MOV_OCFPI); + break; case LF_RMOV: - // set_auto_ff(FALSE); - _num_rig++; - reset_print(); - set_rows(file, counter); - if (_stampa_width == 132) + _num_rig++; + + if (!_libro_giornale_iva_unico) _nprog_mov++; + + if (cf > ' ') { // Per pulire le righe di indirizzo eventualmente settate prima. + reset_row(2); reset_row(3); + } + + g = _cur->file(LF_RMOV)->get_int(RMV_GRUPPO); + c = _cur->file(LF_RMOV)->get_int(RMV_CONTO); + s = _cur->file(LF_RMOV)->get_long(RMV_SOTTOCONTO); + cf = _cur->file(LF_RMOV)->get_char(RMV_TIPOC); + sezione = _cur->file(LF_RMOV)->get_char (RMV_SEZIONE); + importo = _cur->file(LF_RMOV)->get_real (RMV_IMPORTO); + rmv_descr = _cur->file(LF_RMOV)->get(RMV_DESCR); + + tc.set(g,c,s,cf); + + if (_stampa_width == 132) { - *_descr_causale = get_descr_caus(caus); - _descr_causale->set_width(10); + _descr_causale->set_width(20); + _descr_operazione->set_width(28); + _descr_conto->set_width(21); } - else + else // se a 198 non spezzo le descrizioni { - *_descr_causale = get_descr_caus(caus); _descr_causale->set_width(198); - } - setta_righe_descr(_descr_causale, causale); - rmv_descr = current_cursor()->file(LF_RMOV).get(RMV_DESCR); - if (_stampa_width == 132) - { - *_descr_operazione = (const char *)rmv_descr; - _descr_operazione->set_width(10); - } - else - { - *_descr_operazione = (const char *)rmv_descr; _descr_operazione->set_width(198); + _descr_conto->set_width(198); } - setta_righe_descr(_descr_operazione, operazione); + *_descr_causale = get_descr_caus(_caus); + *_descr_operazione = (const char *)rmv_descr; + *_descr_conto = tc.descrizione(); + + setta_righe_descr (_descr_causale, causale); + setta_righe_descr (_descr_operazione, operazione); + setta_righe_descr (_descr_conto, conto); + + if (cf > ' ') + if (_libro_cronologico) + setta_righe_indirizzo(cf, s); - if (!_libro_giornale_iva_unico) _nprog_mov++; - - g = current_cursor()->curr(LF_RMOV).get_int(RMV_GRUPPO); - c = current_cursor()->curr(LF_RMOV).get_int(RMV_CONTO); - s = current_cursor()->curr(LF_RMOV).get_long(RMV_SOTTOCONTO); - // _descr = get_descr (g,c,s); - boh = get_descr (_pconti, _clifo, g,c,s); - - if (boh!=NULL) - { - if (boh->num() == LF_PCON) - { - if (_stampa_width == 132) - { - *_descr_conto = (const char*)boh->get(PCN_DESCR); - _descr_conto->set_width(10); - } - else - { - *_descr_conto = (const char*)boh->get(PCN_DESCR); - _descr_conto->set_width(198); - } - setta_righe_descr(_descr_conto, conto); - } - else - if (boh->num() == LF_CLIFO) - { - if (_stampa_width == 132) - { - *_descr_conto = (const char*)boh->get(CLI_RAGSOC); - _descr_conto->set_width(10); - } - else - { - *_descr_conto = (const char*)boh->get(CLI_RAGSOC); - _descr_conto->set_width(198); - } - setta_righe_descr(_descr_conto, conto); - if (_libro_cronologico) - setta_righe_indirizzo(); - } - } - - sezione = _cur->file(LF_RMOV).get (RMV_SEZIONE); - importo = _cur->file(LF_RMOV).get_real (RMV_IMPORTO); - - // imp = importo.string ("######"); - if (sezione == "D") + if (sezione == 'D') { _tot_dare_progr += importo; // prog. generali if (_annoEsMov != _ae) @@ -1038,28 +932,31 @@ bool CG3400_application::preprocess_page(int file, int counter) _tot_dare_gg += importo; // prog. giornalieri if (_stampa_width == 132) - set_row (1, "@95g%r", &importo); + frm = "@95g%r"; else - set_row (1, "@142g%r", &importo); + frm = "@142g%r"; } else { _tot_avere_progr += importo; + if (_annoEsMov != _ae) _tot_avere_ac += importo; else _tot_avere_gg += importo; - if (_stampa_width == 132) - set_row (1, "@112g%r", &importo); - else - set_row (1, "@164g%r", &importo); - } + if (_stampa_width == 132) + frm = "@112g%r"; + else + frm = "@164g%r"; + } + + set_row (1, (const char *)frm, &importo); + break; case LF_RMOVIVA: - // set_auto_ff(FALSE); if (_libro_giornale_iva_unico) { calcola_iva (); @@ -1068,7 +965,6 @@ bool CG3400_application::preprocess_page(int file, int counter) break; default: - // set_auto_ff(FALSE); break; } return TRUE; @@ -1088,52 +984,52 @@ void CG3400_application::calcola_iva() tipocr = iva.get_int (RMI_TIPOCR); tipodet = iva.get_int (RMI_TIPODET); codiva = iva.get (RMI_CODIVA); - _iva_array.add_riga(impo,impos,codiva,tipodet,0.00,0.00); + _iva_array.add_riga(impo,impos,codiva,tipodet,ZERO,ZERO); } } void CG3400_application::setta_righe_descr(TParagraph_string* str, enum descr des) { - const char * r; int i = 1; - TString frm; - + TString16 frm; + const char * r; + switch (des) { - case causale: + case causale: // lunga 20 if (_libro_giornale_iva_unico) - frm = "@8g%s"; + frm = "@i@10g%.20s@r"; else - frm = "@57g%s"; + frm = "@i@48g%.20s@r"; break; - case conto: + case conto: // lunga 21 if (_libro_giornale_iva_unico) - frm = "@73g%s"; + frm = "@i@69g%s@r"; else - frm = "@41g%s"; + frm = "@i@26g%s@r"; break; - case operazione: + case operazione: // lunga 28 if (_libro_giornale_iva_unico) - frm = "@34g%s"; + frm = "@i@31g%s@r"; else - frm = "@68g%s"; + frm = "@i@69g%s@r"; break; default: break; } while ((r = str->get()) != NULL) - { - // reset_row(i); - set_row (i, (const char*)frm, r); - i++; - } + set_row (i++, (const char*)frm, r); } +// 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 int CG3400_application::setta_righe_iva() { - int r=0; + int r=0, j; - for (int j = 0; j < _iva_array.items(); j++) + for (j = 0; j < _iva_array.items(); j++) { TRigaiva& riga = (TRigaiva&)_iva_array[j]; r = j+1; @@ -1142,41 +1038,31 @@ int CG3400_application::setta_righe_iva() set_row(r, "@58gCodice Iva@68g%3s", (const char*)riga._codiva); switch (riga._tipodet) { - case 0 : - set_row(r, "@73gDetraibile"); - break; - case 1 : - set_row(r, "@73gIndetraibile su op.es."); - break; - case 3 : - set_row(r, "@73gPassaggi interni"); - break; - case 9 : - set_row(r, "@73gIndetraibile art.19"); - break; - default: - break; + case 0 : set_row(r, "@73gDetraibile"); + break; + case 1 : set_row(r, "@73gIndetraibile su op.es."); + break; + case 3 : set_row(r, "@73gPassaggi interni"); + break; + case 9 : set_row(r, "@73gIndetraibile art.19"); + break; + default: break; } } _iva_array.destroy(); + set_row (j+1, ""); // lascio una riga vuota dopo tutto cio' return r; } void CG3400_application::setta_righe_valuta() { - TString simbolo, codval; + TString16 simbolo, codval; bool intracom; codval = current_cursor()->file(LF_MOV).get(MOV_CODVAL); intracom = current_cursor()->curr(LF_RMOVIVA).get_bool(RMI_INTRA); simbolo = SimboloValuta(codval); - // _allegb = CausAlleg(_codcaus); - // _descr_doc = DescrDoc(_tipodoc); - // _totdocumenti += _totdoc; - // _ricser = current_cursor()->curr(LF_RMOVIVA).get_int(RMI_RICSER); - // long numeroreg = cur->curr(LF_RMOVIVA).get_long(RMI_NUMREG); - if ((codval != "LIT") && intracom) { reset_row(1); @@ -1191,37 +1077,54 @@ void CG3400_application::setta_righe_valuta() } } -void CG3400_application::setta_righe_indirizzo() +// 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 +void CG3400_application::setta_righe_indirizzo(char tipocf, long codcf) { - TString comune, prov; + TString16 comune, prov, comcf, capcf, civcf, statocf; + TString80 viacf; - // Se e' un cliente occasionale leggo indirizzo da mov, senno' e' stato - // gia' letto da clifo nella get_descr, richiamata nella preprocess_page - if (_occas) + if (_occfpi.not_empty()) // => e' un occasionale... { - TCursor * cur = current_cursor(); - TLocalisamfile & occ = cur->file(LF_OCCAS); + TLocalisamfile* occ = _cur->file(LF_OCCAS); - _viacf = occ.get (OCC_INDIR); - _civcf = occ.get (OCC_CIV); - _capcf = occ.get (OCC_CAP); - _comcf = occ.get (OCC_COM); + viacf = occ->get (OCC_INDIR); + civcf = occ->get (OCC_CIV); + capcf = occ->get (OCC_CAP); + comcf = occ->get (OCC_COM); } + else + { + _clifo->zero(); + _clifo->put(CLI_CODCF, codcf); + _clifo->put(CLI_TIPOCF, tipocf); - TRectype dep = look_com (_comcf, _com); + if (_clifo->read() == NOERR) + { + 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); + } + } + + TRectype dep = look_com (comcf); comune = dep.get(COM_DENCOM); prov = dep.get(COM_PROVCOM); + if (_libro_giornale_iva_unico) { - set_row (2, "@64g%s %s", (const char *)_viacf, (const char *)_civcf); - set_row (3, "@64g%s %s %s", (const char *)_capcf, (const char *)comune, - (const char *) prov); + set_row (2, "@69g%s %s", (const char *)viacf, (const char *)civcf); + set_row (3, "@69g%s %s %s", (const char *)capcf, (const char *)comune, + (const char *)prov); } else // no libro iva unico. Cambia la colonna di inizio { - set_row (2, "@31g%s %s", (const char *)_viacf, (const char *)_civcf); - set_row (3, "@31g%s %s %s", (const char *)_capcf, (const char *)comune, - (const char *) prov); + set_row (2, "@26g%s %s", (const char *)viacf, (const char *)civcf); + set_row (3, "@26g%s %s %s", (const char *)capcf, (const char *)comune, + (const char *)prov); } } @@ -1311,31 +1214,38 @@ bool CG3400_application::mask_a_data (TMask_field& f, KEY k) const TString16 codreg(m.get(CODREG)); const int ae = date2esc(data_a); // Anno esercizio const bool definitiva = m.get_bool(STAMPA_DEF); + + app()->_ae = ae; + if (ae == 0) return f.error_box("La data specificata non appartiene a nessun esercizio"); - const TRegistro reg(codreg, ae); - + TRegistro reg(codreg, ae); + if (!reg.ok()) - return f.warning_box("Non trovo il registro %s per l'esercizio %d", - (const char *)codreg, ae); - if (reg.tipo() != 5) - return f.warning_box("Il registro %s non e' di tipo libro giornale", - (const char *)codreg); + return f.warning_box("Non trovo il libro giornale %s per l'esercizio %d", + (const char *) codreg, ae); + + if (reg.tipo() != 5) + return f.warning_box("Il registro %s per l'anno %d non e' di tipo libro giornale", + (const char *) codreg, ae); + + const TDate data_da(m.get(DATA_DA)); + TString16 dtda(data_da.string()); - if (!definitiva) - { - const TDate data_da(m.get(DATA_DA)); - // se la stampa e' di prova DALLA_DATA e' obbligatoria - if (!data_da.ok()) + if (definitiva) + { + if (dtda.not_empty()) // senno' ci metto inizioEs + if (data_da < app()->_inizioEs || data_a > app()->_fineEs); + return f.warning_box("Le date specificate non appartengono allo stesso esercizio"); + } + else +// se la stampa e' di prova DALLA_DATA e' obbligatoria + if (dtda.empty()) return f.warning_box("Manca la data di partenza"); - if (data_da < app()->_inizioEs); - return f.error_box("La data iniziale non appartiene all'esercizio %d, che inizia il %s", - ae, (app()->_inizioEs).string()); - } - if (data_a > app()->_fineEs); - return f.error_box("La data finale non appartiene all'esercizio %d, che termina il %s)", - ae, (app()->_fineEs).string()); + else + if (data_da > data_a) + return f.warning_box("La data di inizio non puo' essere maggiore della data finale"); } return TRUE; } @@ -1397,7 +1307,6 @@ bool CG3400_application::set_print(int) KEY tasto; ma.set_handler (CODREG, mask_a_cod_reg); - // ma.set_handler (DATA_DA, mask_a_data); ma.set_handler (DATA_A, mask_a_data); // m.set_handler (REG_ANNO, mask_set_pagina_da); @@ -1407,6 +1316,9 @@ bool CG3400_application::set_print(int) if (tasto == K_ENTER) { + _libro_giornale_iva_unico = libro_giornale_iva_unico(); + _libro_cronologico = libro_cronologico(); + _reg_cod = ma.get(CODREG); _stampa_definitiva = ma.get_bool(STAMPA_DEF); _data_da = ma.get(DATA_DA); @@ -1415,25 +1327,58 @@ bool CG3400_application::set_print(int) _stampa_width = ma.get_int(STAMPA_WIDTH); _stampa_len = ma.get_int(STAMPA_LEN); - // Se stampa definita DALLA_DATA e' l'ultima data di stampa del - // registro, se indicata, oppure la data di inizio esercizio +// Se stampa definita DALLA_DATA e' l'ultima data di stampa del +// registro, se indicata, oppure la data di inizio esercizio if (_stampa_definitiva) - if (!_last_data.ok()) _data_da = _inizioEs; + if (_last_data.ok()) + _data_da = _last_data; + else + _data_da = _inizioEs; - if (_stampa_len) printer().formlen(_stampa_len); - if (_stampa_width == 1) _stampa_width = 132; - else _stampa_width = 198; + leggi_tabreg(_reg_cod, _ae); + + if (_stampa_len != 0) + printer().formlen(_stampa_len); + else + printer().formlen(RIGHE_MODULO); + + printer().footerlen(RIGHE_FOOTER); + + if (_stampa_width == 1) + _stampa_width = 132; + else + _stampa_width = 198; TRectype da (_cur->file(LF_MOV).curr()); TRectype a (_cur->file(LF_MOV).curr()); - da.zero(); - a.zero(); + da.zero(); a.zero(); da.put(MOV_DATAREG, _data_da); a.put (MOV_DATAREG, _data_a); _cur->setregion(da, a); + force_setpage(TRUE); + + set_background(); + + reset_print(); + reset_header(); + reset_footer(); + + set_real_picture (REAL_PICTURE); + set_print_zero(TRUE); + + printer().set_from_page (_pagina_da); + + if (_stampa_ok != -1) // la stampa precedente era andata male + set_page_number (_stampa_ok); + + if (_stampa_width == 132) + _last_header = set_header_132(); + else + _last_header = set_header_198(); + if (_stampa_definitiva) { TMask mb("cg3400b"); @@ -1443,6 +1388,7 @@ bool CG3400_application::set_print(int) mb.set (ULTIMA_DATA, _last_data.string()); tasto = mb.run(); } + return TRUE; } return (tasto == K_ENTER); } diff --git a/cg/cg3400a.uml b/cg/cg3400a.uml index fd323c902..5e5c5c719 100755 --- a/cg/cg3400a.uml +++ b/cg/cg3400a.uml @@ -4,58 +4,59 @@ PAGE "Stampa Libro Giornale" -1 -1 70 15 STRING CODREG 3 BEGIN - PROMPT 1 1 "Codice registro " - USE REG SELECT (I0 = 5) || (I0 = 4) - INPUT CODTAB[1,4] ANNO_ESER - INPUT CODTAB[5,7] CODREG - DISPLAY "Anno" CODTAB[1,4] - DISPLAY "Codice" CODTAB[5,7] - DISPLAY "Descrizione@50" S0 - DISPLAY "Tipo" I0 -// OUTPUT ANNO_ESER CODTAB[1,4] - OUTPUT CODREG CODTAB[5,7] - OUTPUT REG_DESC S0 - OUTPUT PAGINA_DA I1 + PROMPT 1 1 "Codice registro " + USE REG SELECT (I0 = 5) || (I0 = 4) + INPUT CODTAB[1,4] ANNO_ESER + INPUT CODTAB[5,7] CODREG + DISPLAY "Anno" CODTAB[1,4] + DISPLAY "Codice" CODTAB[5,7] + DISPLAY "Descrizione@50" S0 + DISPLAY "Tipo" I0 +// OUTPUT ANNO_ESER CODTAB[1,4] + OUTPUT CODREG CODTAB[5,7] + OUTPUT REG_DESC S0 + OUTPUT PAGINA_DA I1 // OUTPUT DATA_DA D0 // OUTPUT DATA_A D1 -// CHECKTYPE NORMAL - FLAGS "R" +// CHECKTYPE NORMAL + FLAGS "RZ" END NUMBER ANNO_ESER 4 BEGIN - PROMPT 30 1 "Esercizio " - USE ESC - INPUT CODTAB ANNO_ESER - DISPLAY "Anno" CODTAB - DISPLAY "Data inizio " D0 - DISPLAY "Data fine " D1 - OUTPUT ANNO_ESER CODTAB -// CHECKTYPE REQUIRED - FLAGS "HRZ" + PROMPT 30 1 "Esercizio " + USE ESC + INPUT CODTAB ANNO_ESER + DISPLAY "Anno" CODTAB + DISPLAY "Data inizio " D0 + DISPLAY "Data fine " D1 + DISPLAY "Data scarico" D2 + OUTPUT ANNO_ESER CODTAB +// CHECKTYPE REQUIRED + FLAGS "HRZ" END STRING REG_DESC 50 BEGIN - PROMPT 1 3 "Descrizione: " - FLAGS "D" + PROMPT 1 3 "Descrizione: " + FLAGS "D" END GROUPBOX DLG_NULL 25 5 BEGIN - PROMPT 1 5 "Intervallo" + PROMPT 1 5 "Intervallo" END RADIOBUTTON DLG_NULL 20 BEGIN - PROMPT 1 5 "" - ITEM "1|Tutto" MESSAGE DISABLE, PAGINA_DA - ITEM "2|Da pagina" MESSAGE ENABLE, PAGINA_DA + PROMPT 1 5 "" + ITEM "1|Tutto" MESSAGE DISABLE, PAGINA_DA + ITEM "2|Da pagina" MESSAGE ENABLE, PAGINA_DA END NUMBER PAGINA_DA 5 BEGIN - PROMPT 13 8 "" + PROMPT 13 8 "" END GROUPBOX DLG_NULL 33 5 @@ -83,8 +84,8 @@ END DATE DATA_A BEGIN PROMPT 2 11 "Alla data " - VALIDATE DATE_CMP_FUNC >= DATA_DA - WARNING "Questa data deve essere posteriore alla precedente" +// VALIDATE DATE_CMP_FUNC >= DATA_DA + WARNING "Specificare la data di fine stampa" CHECKTYPE REQUIRED END