1996-06-17 08:46:44 +00:00
|
|
|
// 772100.cpp - Stampa schede percipienti
|
|
|
|
#include <mask.h>
|
|
|
|
#include <printapp.h>
|
|
|
|
#include <relation.h>
|
|
|
|
#include <config.h>
|
|
|
|
#include <tabutil.h>
|
|
|
|
#include <utility.h>
|
|
|
|
#include <sort.h>
|
|
|
|
#include <lffiles.h>
|
1996-06-17 10:04:38 +00:00
|
|
|
#include "scperc.h"
|
|
|
|
#include "rpag.h"
|
|
|
|
#include "rver.h"
|
1996-06-17 08:46:44 +00:00
|
|
|
#include <comuni.h>
|
|
|
|
#include <nditte.h>
|
|
|
|
#include <anagr.h>
|
|
|
|
#include <anafis.h>
|
1996-06-17 10:04:38 +00:00
|
|
|
#include "perc.h"
|
1996-06-17 08:46:44 +00:00
|
|
|
#include <mailbox.h>
|
|
|
|
#include <execp.h>
|
|
|
|
|
|
|
|
#include "772.h"
|
|
|
|
#include "772100.h"
|
|
|
|
#include "77lib.h"
|
|
|
|
|
|
|
|
//
|
|
|
|
// Lista modifiche
|
|
|
|
//
|
|
|
|
// 23.11.95 Nella stampa a 198 una colonna sola comprendente quote e
|
|
|
|
// spese non soggette
|
|
|
|
// 27.11.95 Scarta le schede con annodoc MAGGIORE di annodic
|
|
|
|
// 27.11.95 Se l'annopag e' successivo mette il pag. nei NON pagati e non lo stampa
|
|
|
|
// 7.12.95 Riparte da pag.1 con un nuovo percipiente
|
|
|
|
// 11. 1.96 Nel tot_comp_non_pagati somma anche i pagamenti di anni precedenti
|
|
|
|
// 11. 1.96 Scarta le schede SOLO SE non hanno NESSUN pag con annopag==annodic
|
|
|
|
// non piu' in base al loro annodoc
|
|
|
|
//
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
11.1.96
|
|
|
|
Layout della stampa a 198
|
|
|
|
I numeri indicati sono gia' calcolati come parametri per set_row() e set_header()
|
|
|
|
145
|
|
|
|
80 Somme o D
|
|
|
|
Cod. 43 60 70 Totale Data 101 115 122 134 quote T C Serie Numero 183
|
|
|
|
Caus. Descrizione Data Numero Imponibili Spese Imposte Documento Pagamento Imponibili % Ritenute Compensi non sogg. C B Data ABI CAB Importo versato
|
|
|
|
3 8 24 33 41 53 65 77 90 99 112 118 130 142 155 159 168 174 186
|
|
|
|
II I__I I_15__________I I______I I_____I I_IMPONIB__II_SPESE____II_IMPOSTE__II_TOTDOC___I I______I I_IMPOPAG__I I___I I_RITPAG___II_COMPENS__II_NSOGG____I I I I______I I___I I_________I I_IMPVERS__I
|
|
|
|
157
|
|
|
|
|
|
|
|
****************************************************************************/
|
|
|
|
void calcola_non_pagate(TSchedaP& sch_corr, real& comp_npag, real& spese_npag, const int anno_in_corso);
|
|
|
|
|
|
|
|
HIDDEN TString256 tmp;
|
|
|
|
HIDDEN const int RIGHE_FOOTER = 2;
|
|
|
|
HIDDEN const char* P198_REAL_PICTURE = "############";
|
|
|
|
|
|
|
|
class TStampa_perc : public TPrintapp
|
|
|
|
{
|
|
|
|
char _liv; // Se stampa a livello di studio
|
|
|
|
int _anno_dic; // Anno dichiarazione nei paramentri utente o studio
|
1996-06-17 10:04:38 +00:00
|
|
|
bool _changed_perc; // flag che segnala il passaggio a nuovo perc.
|
1996-06-17 08:46:44 +00:00
|
|
|
struct righe_pag
|
|
|
|
{
|
|
|
|
char codq[3];
|
|
|
|
char codc[5];
|
|
|
|
char perc[7];
|
|
|
|
real totale;
|
|
|
|
real somme;
|
|
|
|
real quote;
|
|
|
|
real imp;
|
|
|
|
real rit;
|
|
|
|
real netto;
|
|
|
|
};
|
|
|
|
|
|
|
|
TRelation* _rel;
|
|
|
|
TCursor* _cur;
|
|
|
|
righe_pag* _bil;
|
|
|
|
TSort* _sort;
|
1996-06-17 10:04:38 +00:00
|
|
|
TVersamento_stampa _stvers;
|
1996-06-17 08:46:44 +00:00
|
|
|
const char* _buf;
|
|
|
|
TLocalisamfile* _nditte, *_anag, *_rpag, *_rver, *_comuni;
|
|
|
|
TString16 _section;
|
|
|
|
TConfig* _cnf;
|
1996-06-17 10:04:38 +00:00
|
|
|
TString _ragsocER,_indER,_civER,_capER,_dencomER,_provER,_cofiER;
|
|
|
|
TString _ragsocPE,_indPE,_civPE,_capPE,_dencomPE,_provPE,_cofiPE;
|
|
|
|
TString _dencomnscER,_provnscER,_dencomnscPE,_provnscPE;
|
|
|
|
TString _datanascER,_datanascPE,_desc_cau,_numdoc;
|
|
|
|
TDate _datadoc;
|
1996-06-17 08:46:44 +00:00
|
|
|
int _nprog;
|
1996-06-17 10:04:38 +00:00
|
|
|
int _anno,_numcarat,_codcaus,_codtrib;
|
|
|
|
long _codditta,_codanagER,_codanagPE;
|
1996-06-17 08:46:44 +00:00
|
|
|
char _tipoa, _tipoaER;
|
1996-06-17 10:04:38 +00:00
|
|
|
real _impondoc,_spesedoc,_imposdoc,_totaledoc;
|
|
|
|
real _tot_comp,_tot_fatt;
|
|
|
|
real _tot_somme_non_soggette, _tot_comp_non_pagati; // tot.delle rimanenze di un percipiente
|
|
|
|
real _compenso_dovuto, _spese_dovute; // usati per calcolare rimanenza di una scheda
|
1996-06-17 08:46:44 +00:00
|
|
|
bool _rifai_sort,_stampa_modulo;
|
1996-06-17 10:04:38 +00:00
|
|
|
int _ind,_mesecomp,_annocomp;
|
|
|
|
bool _stampa_scheda; // stampo o no la scheda corrente
|
|
|
|
bool _almeno_una_scheda; // c'e' almeno una scheda stampabile
|
|
|
|
bool init_print();
|
|
|
|
void add(TVersamento& vers);
|
|
|
|
bool find(TVersamento& vers);
|
1996-06-17 08:46:44 +00:00
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void on_config_change();
|
|
|
|
virtual bool user_create() ;
|
|
|
|
virtual bool user_destroy();
|
|
|
|
virtual bool set_print(int m);
|
|
|
|
|
|
|
|
virtual bool preprocess_page (int,int);
|
|
|
|
virtual bool preprocess_print(int,int);
|
|
|
|
virtual print_action postprocess_page (int,int);
|
|
|
|
virtual void preprocess_header();
|
|
|
|
|
|
|
|
public:
|
|
|
|
int stampa_vers(TVersamento_stampa& vers, int riga, const int numvers, const real& ritenpag);
|
|
|
|
void dati_erogante();
|
|
|
|
void dati_percipiente();
|
|
|
|
int stampa_dati_erog_perc();
|
|
|
|
int ricerca_causale(TString&,TString&);
|
|
|
|
void setta_righe_documento();
|
|
|
|
void setta_righe_pagamenti (TDate& datapag, const real& imponpag,const TString& percent,const real& ritenpag,const real& compenpag,const real& spesepag, const real& quotepag,int i);
|
|
|
|
void setta_righe_versamenti(char luo, char tipo, TDate& dataver, const TString& serie, const TString& numero,const real& impvers,int j);
|
|
|
|
void do_sort(const TString&,int,const real&,const real&,const real&,const real&,const real&,const real&);
|
|
|
|
void setta_righe_documento_modulo();
|
|
|
|
int setta_righe_pagamenti_modulo(TDate& datapag, const real& imponpag,const TString& percent,const real& ritenpag,const real& compenpag,const real& spesepag, const real& quotepag,int j);
|
|
|
|
int setta_righe_versamenti_modulo(char luo,char tipo,TDate& dataver,const TString&,const TString&,const real&,int);
|
|
|
|
void init_sort();
|
|
|
|
void riempi_record(const TString&,int,const real&,const real&,const real&,const real&,const real&,const real&,const real&);
|
|
|
|
void set_bil_key(righe_pag* b,const char* codq,int codc,const real& perc);
|
|
|
|
void set_bil_val(righe_pag* b, const real& totale = ZERO,const real& somme = ZERO,
|
|
|
|
const real& quote = ZERO,const real& imp = ZERO,
|
|
|
|
const real& rit = ZERO,const real& netto = ZERO);
|
|
|
|
void intestazione_riepilogo(const bool redo_header=FALSE, const int start_riga=0);
|
|
|
|
real fatture();
|
|
|
|
static bool codditta_hnd(TMask_field& f, KEY k);
|
|
|
|
|
|
|
|
// D = stampa ditta, S = stampa a livello di studio
|
|
|
|
TStampa_perc(char livello='D') : _liv(toupper(livello)) {}
|
|
|
|
};
|
|
|
|
|
|
|
|
HIDDEN TStampa_perc& app() { return (TStampa_perc&) main_app(); }
|
|
|
|
|
|
|
|
void TStampa_perc::add(TVersamento& vers)
|
|
|
|
{
|
|
|
|
_stvers.add(vers);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TStampa_perc::find(TVersamento& vers)
|
|
|
|
{
|
|
|
|
return _stvers.find(vers);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TStampa_perc::codditta_hnd(TMask_field& f, KEY k)
|
|
|
|
{
|
|
|
|
if (k == K_TAB && !(f.mask().is_running()) )
|
|
|
|
{
|
|
|
|
TString16 codditta; codditta << app()._codditta;
|
|
|
|
if (codditta != "0")
|
|
|
|
{
|
|
|
|
f.set(codditta);
|
|
|
|
f.check();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::init_sort()
|
|
|
|
{
|
|
|
|
_sort->reset(sizeof(righe_pag));
|
|
|
|
_sort -> addsortkey ((char*)&(_bil->codq) - (char*)&(_bil->codq),2);
|
|
|
|
_sort -> addsortkey ((char*)&(_bil->codc) - (char*)&(_bil->codq),4);
|
|
|
|
_sort -> addsortkey ((char*)&(_bil->perc) - (char*)&(_bil->codq),6);
|
|
|
|
_sort -> init();
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::set_bil_key(righe_pag* b,const char* codq,int codc,const real& perc)
|
|
|
|
{
|
|
|
|
strcpy (b->codq, codq);
|
|
|
|
sprintf(b->codc , "%4d", codc);
|
|
|
|
TString16 pp(perc.string("###,@@"));
|
|
|
|
sprintf(b->perc, "%s", (const char*)pp);
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::set_bil_val(righe_pag* b, const real& totale,
|
|
|
|
const real& somme,const real& quote,
|
|
|
|
const real& imp,const real& rit, const real& netto)
|
|
|
|
{
|
|
|
|
b->totale = totale;
|
|
|
|
b->somme = somme;
|
|
|
|
b->quote = quote;
|
|
|
|
b->imp = imp;
|
|
|
|
b->rit = rit;
|
|
|
|
b->netto = netto;
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::riempi_record(const TString& codq,int codc,const real& perc,
|
|
|
|
const real& totale,const real& somme,
|
|
|
|
const real& quote,const real& imp,
|
|
|
|
const real& rit,const real& netto )
|
|
|
|
{
|
|
|
|
set_bil_key(_bil, codq, codc, perc);
|
|
|
|
set_bil_val(_bil, totale, somme, quote, imp, rit, netto);
|
|
|
|
_sort->sort ((const char*) _bil);
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::do_sort(const TString& codqua,int codcaus,const real& perc,const real& spese,
|
|
|
|
const real& quote,const real& imp,const real& rit,const real& comp)
|
|
|
|
{
|
|
|
|
real totale,netto;
|
|
|
|
netto = imp - rit;
|
|
|
|
totale = comp + spese ;
|
|
|
|
riempi_record(codqua,codcaus,perc,totale,spese,quote,imp,rit,netto);
|
|
|
|
}
|
|
|
|
|
|
|
|
int TStampa_perc::ricerca_causale(TString& desc,TString& codqua)
|
|
|
|
{
|
|
|
|
TTable ca7 ("%CA7");
|
|
|
|
TString16 dep;
|
|
|
|
int cod = 0;
|
|
|
|
|
|
|
|
ca7.zero();
|
|
|
|
dep.format("%02d", _codcaus);
|
|
|
|
ca7.put("CODTAB", dep);
|
|
|
|
if (ca7.read() == NOERR)
|
|
|
|
{
|
|
|
|
desc = ca7.get("S0");
|
|
|
|
cod = ca7.get_int("I0");
|
|
|
|
codqua = ca7.get("S1");
|
|
|
|
}
|
|
|
|
return cod;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TStampa_perc::preprocess_print(int file, int counter)
|
|
|
|
{
|
|
|
|
if (file == LF_SCPERC)
|
|
|
|
{
|
|
|
|
// _tot_comp_testata = ZERO;
|
|
|
|
// _tot_spese_testata = ZERO;
|
|
|
|
_tot_somme_non_soggette = _tot_comp_non_pagati = ZERO;
|
|
|
|
_almeno_una_scheda = FALSE;
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::setta_righe_documento()
|
|
|
|
{
|
|
|
|
reset_print();
|
|
|
|
TString spesedoc(20), imposdoc(20), totdoc(20), impondoc(20);
|
|
|
|
|
|
|
|
spesedoc = _spesedoc.string(P198_REAL_PICTURE);
|
|
|
|
imposdoc = _imposdoc.string(P198_REAL_PICTURE);
|
|
|
|
totdoc = _totaledoc.string(P198_REAL_PICTURE);
|
|
|
|
impondoc = _impondoc.string(P198_REAL_PICTURE);
|
|
|
|
|
|
|
|
if (_numcarat == 1)
|
|
|
|
{
|
|
|
|
set_row (1, "Documento del %10s", (const char*) _datadoc);
|
|
|
|
set_row (1, "@26gNumero@33g%-7s", (const char*) _numdoc);
|
|
|
|
set_row (1, "@41gPeriodo di competenza %2d / %4d", _mesecomp,_annocomp);
|
|
|
|
set_row (2, "Cod.");
|
|
|
|
if (_codtrib != 0)
|
|
|
|
set_row (2, "@5g%4d", _codtrib);
|
|
|
|
set_row (2, "@10g%.35s", (const char*) _desc_cau);
|
|
|
|
set_row (2, "@46gCompenso %12s", (const char*)impondoc);
|
|
|
|
set_row (2, "@69gSpese %12s", (const char*)spesedoc);
|
|
|
|
set_row (2, "@89gImposta %12s", (const char*)imposdoc);
|
|
|
|
set_row (2, "@111gTotale %12s", (const char*)totdoc);
|
|
|
|
/* set_row (2, "@46gCompenso %12r", &_impondoc);
|
|
|
|
set_row (2, "@69gSpese %12r", &_spesedoc);
|
|
|
|
set_row (2, "@89gImposta %12r", &_imposdoc);
|
|
|
|
set_row (2, "@111gTotale %12r", &_totaledoc);*/
|
|
|
|
}
|
|
|
|
else
|
|
|
|
if (_numcarat == 2)
|
|
|
|
{
|
|
|
|
reset_row(1);
|
|
|
|
set_row (1, "@0g%02d", _codcaus);
|
|
|
|
set_row (1, "@3g%4d", _codtrib);
|
|
|
|
set_row (1, "@8g%.15s", (const char*) _desc_cau);
|
|
|
|
TString16 dep(_datadoc.string(brief));
|
|
|
|
set_row (1, "@24g%8s", (const char*) dep);
|
|
|
|
set_row (1, "@33g%-7s", (const char*) _numdoc);
|
|
|
|
set_row (1, "@41g%12s", (const char*)impondoc);
|
|
|
|
set_row (1, "@53g%12s", (const char*)spesedoc);
|
|
|
|
set_row (1, "@65g%12s", (const char*)imposdoc);
|
|
|
|
set_row (1, "@77g%12s", (const char*)totdoc);
|
|
|
|
/* set_row (1, "@41g%12r", &_impondoc);
|
|
|
|
set_row (1, "@53g%12r", &_spesedoc);
|
|
|
|
set_row (1, "@65g%12r", &_imposdoc);
|
|
|
|
set_row (1, "@77g%12r", &_totaledoc); */
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::setta_righe_documento_modulo()
|
|
|
|
{
|
|
|
|
reset_print();
|
|
|
|
|
|
|
|
if (_numcarat == 1)
|
|
|
|
{
|
|
|
|
set_row (1, "@18g%10s", (const char*) _datadoc);
|
|
|
|
set_row (1, "@10g%7s", (const char*) _numdoc);
|
|
|
|
set_row (1, "@42g%.29s", (const char*) _desc_cau);
|
|
|
|
set_row (1, "@74g%12r", &_impondoc);
|
|
|
|
set_row (1, "@105g%12r", &_spesedoc);
|
|
|
|
set_row (1, "@89g%12r", &_imposdoc);
|
|
|
|
set_row (3, "@14g%12r", &_totaledoc);
|
|
|
|
set_row (4, "");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
if (_numcarat == 2)
|
|
|
|
{
|
|
|
|
set_row (1, "@0g%02d", _codcaus);
|
|
|
|
set_row (1, "@3g%4d", _codtrib);
|
|
|
|
set_row (1, "@8g%.15s", (const char*) _desc_cau);
|
|
|
|
TString16 dep(_datadoc.string(brief));
|
|
|
|
set_row (1, "@24g%10s", (const char*) dep);
|
|
|
|
set_row (1, "@33g%-7s", (const char*) _numdoc);
|
|
|
|
set_row (1, "@41g%12r", &_impondoc);
|
|
|
|
set_row (1, "@53g%12r", &_spesedoc);
|
|
|
|
set_row (1, "@65g%12r", &_imposdoc);
|
|
|
|
set_row (1, "@77g%12r", &_totaledoc);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::setta_righe_pagamenti(TDate& datapag,const real& imponpag,
|
|
|
|
const TString& percent,const real& ritenpag,const real& compenpag,
|
|
|
|
const real& spesepag, const real& quotepag,int i)
|
|
|
|
{
|
|
|
|
if (_numcarat == 1)
|
|
|
|
{
|
|
|
|
set_row (i, "%10s", (const char*) datapag.string());
|
|
|
|
set_row (i, "@11g%12r", &imponpag);
|
|
|
|
set_row (i, "@24g%s", (const char*)percent);
|
|
|
|
set_row (i, "@30g%12r", &ritenpag);
|
|
|
|
set_row (i, "@42g%12r", &compenpag);
|
|
|
|
set_row (i, "@54g%12r", &spesepag);
|
|
|
|
if (quotepag != ZERO)
|
|
|
|
set_row (i, "@67g%12r", "epag);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
if (_numcarat == 2)
|
|
|
|
{
|
|
|
|
TString16 dep(datapag.string(brief));
|
|
|
|
real quotepag198 = ZERO;
|
|
|
|
set_row (i, "@90g%8s", (const char*) dep);
|
|
|
|
set_row (i, "@99g%12r", &imponpag);
|
|
|
|
set_row (i, "@112g%s", (const char*)percent);
|
|
|
|
set_row (i, "@118g%12r", &ritenpag);
|
|
|
|
set_row (i, "@130g%12r", &compenpag);
|
|
|
|
// 23.11.95
|
|
|
|
// Nella stampa a 198 una colonna sola comprendente quote e spese non soggette
|
|
|
|
quotepag198 = compenpag - imponpag + spesepag;
|
|
|
|
set_row (i, "@142g%12r", "epag198);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
int TStampa_perc::setta_righe_pagamenti_modulo(TDate& datapag,const real& imponpag,
|
|
|
|
const TString& percent,const real& ritenpag,const real& compenpag,
|
|
|
|
const real& spesepag, const real& quotepag,int i)
|
|
|
|
{
|
|
|
|
if (_numcarat == 1)
|
|
|
|
{
|
|
|
|
set_row (i, "@29g%10s", (const char*) datapag.string());
|
|
|
|
i += 2;
|
|
|
|
set_row (i, "@56g%s", (const char*)percent);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
if (_numcarat == 2)
|
|
|
|
{
|
|
|
|
TString16 dep(datapag.string(brief));
|
|
|
|
real quotepag198 = ZERO;
|
|
|
|
set_row (i, "@89g%8s", (const char*) dep);
|
|
|
|
set_row (i, "@97g%12r", &imponpag);
|
|
|
|
TString16 app (percent.left(4));
|
|
|
|
app.ltrim();
|
|
|
|
set_row (i, "@110g%s", (const char*)app);
|
|
|
|
set_row (i, "@115g%12r", &ritenpag);
|
|
|
|
set_row (i, "@127g%12r", &compenpag);
|
|
|
|
// 23.11.95
|
|
|
|
// Nella stampa a 198 una colonna sola comprendente quote e spese non soggette
|
|
|
|
quotepag198 = compenpag - imponpag + spesepag;
|
|
|
|
set_row (i, "@139g%12r", "epag198);
|
|
|
|
}
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::setta_righe_versamenti(char luovers,char tipovers, TDate& dataver,
|
|
|
|
const TString& serie,const TString& numero,
|
|
|
|
const real& impvers,int j)
|
|
|
|
{
|
|
|
|
if (_numcarat == 1)
|
|
|
|
{
|
|
|
|
set_row (j, "@84g%c", luovers);
|
|
|
|
set_row (j, "@87g%c", tipovers);
|
|
|
|
set_row (j, "@91g%10s", (const char*) dataver.string());
|
|
|
|
set_row (j, "@102g%s", (const char*) serie);
|
|
|
|
set_row (j, "@108g%s", (const char*) numero);
|
|
|
|
set_row (j, "@120g%12r", &impvers);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
if (_numcarat == 2)
|
|
|
|
{
|
|
|
|
set_row (j, "@155g%c", luovers);
|
|
|
|
set_row (j, "@157g%c", tipovers);
|
|
|
|
TString16 dep(dataver.string(brief));
|
|
|
|
set_row (j, "@159g%8s", (const char*) dep);
|
|
|
|
set_row (j, "@168g%5s", (const char*) serie);
|
|
|
|
set_row (j, "@174g%-11s", (const char*)numero);
|
|
|
|
set_row (j, "@186g%12r", &impvers);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
int TStampa_perc::setta_righe_versamenti_modulo(char luovers,char tipovers,TDate& dataver,
|
|
|
|
const TString& serie,const TString& numero,
|
|
|
|
const real& impvers,int j)
|
|
|
|
{
|
|
|
|
if (_numcarat == 1)
|
|
|
|
{
|
|
|
|
j += 2;
|
|
|
|
set_row (j, "@80g%c", luovers);
|
|
|
|
set_row (j, "@84g%c", tipovers);
|
|
|
|
set_row (j, "@87g%10s", (const char*) dataver.string());
|
|
|
|
}
|
|
|
|
else
|
|
|
|
if (_numcarat == 2)
|
|
|
|
{
|
|
|
|
set_row (j, "@155g%c", luovers);
|
|
|
|
set_row (j, "@157g%c", tipovers);
|
|
|
|
TString dep(dataver.string(brief));
|
|
|
|
set_row (j, "@159g%8s", (const char*) dep);
|
|
|
|
set_row (j, "@168g%5s", serie);
|
|
|
|
set_row (j, "@174g%11s", numero);
|
|
|
|
set_row (j, "@186g%12r", &impvers);
|
|
|
|
}
|
|
|
|
return j;
|
|
|
|
}
|
|
|
|
|
|
|
|
int TStampa_perc::stampa_vers(TVersamento_stampa& ve, int nriga, const int numvers, const real& ritenpag)
|
|
|
|
{
|
|
|
|
TString16 serie, numero;
|
|
|
|
int j = nriga;
|
1996-06-17 10:04:38 +00:00
|
|
|
real vers_stampa = ZERO;
|
1996-06-17 08:46:44 +00:00
|
|
|
|
|
|
|
_rver->setkey(1);
|
|
|
|
_rver->zero();
|
|
|
|
_rver->put(SPR_CODDITTA, _codditta);
|
|
|
|
_rver->put(SPR_TIPOA, _tipoa);
|
|
|
|
_rver->put(SPR_CODANAGR, _codanagPE);
|
|
|
|
_rver->put(SPR_NPROG, _nprog);
|
|
|
|
_rver->put(VER_NRIGA, numvers);
|
|
|
|
|
|
|
|
if (_rver->read(_isequal) == NOERR)
|
|
|
|
{
|
|
|
|
char luovers = _rver->get(VER_LUOVERS)[0];
|
|
|
|
char tipovers = _rver->get(VER_TIPOVERS)[0];
|
|
|
|
TDate dataver(_rver->get_date(VER_DATAVERS));
|
|
|
|
serie = _rver->get(VER_SERIE);
|
|
|
|
numero = _rver->get(VER_NUMERO);
|
|
|
|
real impvers = _rver->get_real(VER_IMPVERS);
|
|
|
|
|
|
|
|
ve.set(_codditta, _tipoa, _codanagPE, _nprog, numvers, impvers);
|
|
|
|
|
|
|
|
const bool gia_visto = find(ve);
|
|
|
|
|
|
|
|
if (gia_visto)
|
|
|
|
{
|
|
|
|
real vvee = ve.importo_versato_residuo();
|
|
|
|
impvers = vvee;
|
|
|
|
}
|
|
|
|
|
|
|
|
vers_stampa = ve.vers_stampa(_rpag, numvers, impvers, ritenpag);
|
|
|
|
|
|
|
|
if (_numcarat == 1 && !_stampa_modulo)
|
|
|
|
if (j == 3)
|
|
|
|
{
|
|
|
|
set_row (j++, "@83gEstremi versamento@102gSerie@108gNumero");
|
|
|
|
set_row (j++, "@83gTC DCB@91gData@102gABI@108gCAB@121gImp.versato");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_stampa_modulo)
|
|
|
|
j = setta_righe_versamenti_modulo(luovers,tipovers,dataver,serie,numero,vers_stampa,j);
|
|
|
|
else
|
|
|
|
setta_righe_versamenti(luovers,tipovers,dataver,serie,numero,vers_stampa,j);
|
|
|
|
|
|
|
|
j += _stampa_modulo ? 2 : 1;
|
|
|
|
}
|
|
|
|
return j;
|
|
|
|
}
|
|
|
|
|
|
|
|
void calcola_non_pagate(TSchedaP& sch, real& compensi_non_pagati,
|
|
|
|
real& spese_non_pagate, const int anno_in_corso)
|
|
|
|
{
|
1996-06-17 10:04:38 +00:00
|
|
|
real comp, spese;
|
|
|
|
real comp_doc, spese_doc, comp_pagato, spese_pagate;
|
|
|
|
TDate data_pag;
|
|
|
|
int anno_pag;
|
1996-06-17 08:46:44 +00:00
|
|
|
|
|
|
|
comp = spese = ZERO;
|
|
|
|
TLocalisamfile* rpag = new TLocalisamfile(LF_RPAG);
|
|
|
|
sch.read();
|
|
|
|
// anno_doc = sch.anno_doc();
|
|
|
|
comp_doc = sch.compenso_doc();
|
|
|
|
spese_doc = sch.spese_doc();
|
|
|
|
|
|
|
|
rpag->zero();
|
|
|
|
rpag->put(PAG_CODDITTA, sch.codditta());
|
|
|
|
rpag->put(PAG_TIPOA, sch.tipoa());
|
|
|
|
rpag->put(PAG_CODANAGR, sch.codanagr());
|
|
|
|
rpag->put(PAG_NPROG, sch.nprog());
|
|
|
|
TRectype mst(rpag->curr());
|
|
|
|
for (rpag->read(_isgteq); !rpag->eof(); rpag->next())
|
|
|
|
{
|
|
|
|
if (rpag->curr() > mst) break;
|
|
|
|
comp_pagato = rpag->get_real(PAG_COMPENSO);
|
|
|
|
spese_pagate = rpag->get_real(PAG_SPESA);
|
1996-06-17 10:04:38 +00:00
|
|
|
data_pag = rpag->get_date(PAG_DATAPAG);
|
|
|
|
anno_pag = data_pag.year();
|
1996-06-17 08:46:44 +00:00
|
|
|
if (anno_pag <= anno_in_corso)
|
|
|
|
{
|
|
|
|
comp_doc -= comp_pagato;
|
|
|
|
spese_doc -= spese_pagate;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
compensi_non_pagati = comp_doc;
|
|
|
|
spese_non_pagate = spese_doc;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TStampa_perc::preprocess_page(int file, int counter)
|
|
|
|
{
|
|
|
|
TString16 datapag,dataver;
|
|
|
|
TString16 codqua;
|
|
|
|
real imponpag,ritenpag,compenpag,spesepag,quotepag;
|
|
|
|
int i, rigaver, numvers, anno_doc;
|
|
|
|
bool pagato_anno_in_corso = FALSE;
|
|
|
|
|
|
|
|
if (counter)
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
if (!_stampa_modulo)
|
|
|
|
{
|
|
|
|
if (_numcarat == 1)
|
|
|
|
i = rigaver = 3;
|
|
|
|
else
|
|
|
|
if (_numcarat == 2)
|
|
|
|
i = rigaver = 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
i = rigaver = 1;
|
|
|
|
|
|
|
|
if (file == LF_SCPERC)
|
|
|
|
{
|
|
|
|
reset_print();
|
|
|
|
TRectype sch_curr(current_cursor()->curr(LF_SCPERC));
|
|
|
|
_tipoa = current_cursor()->curr(LF_SCPERC).get (SPR_TIPOA)[0];
|
|
|
|
_codanagPE = current_cursor()->curr(LF_SCPERC).get_long(SPR_CODANAGR);
|
|
|
|
_nprog = current_cursor()->curr(LF_SCPERC).get_int(SPR_NPROG);
|
|
|
|
_codcaus = current_cursor()->curr(LF_SCPERC).get_int (SPR_CODCAUS);
|
|
|
|
_codtrib = ricerca_causale(_desc_cau,codqua);
|
|
|
|
_datadoc = current_cursor()->curr(LF_SCPERC).get_date(SPR_DATADOC);
|
|
|
|
_numdoc = current_cursor()->curr(LF_SCPERC).get (SPR_NUMDOC);
|
|
|
|
_impondoc = current_cursor()->curr(LF_SCPERC).get_real(SPR_COMPENSO);
|
|
|
|
_spesedoc = current_cursor()->curr(LF_SCPERC).get_real(SPR_SPESE);
|
|
|
|
_imposdoc = current_cursor()->curr(LF_SCPERC).get_real(SPR_IVA);
|
|
|
|
_totaledoc = current_cursor()->curr(LF_SCPERC).get_real(SPR_TOTALE);
|
|
|
|
_mesecomp = current_cursor()->curr(LF_SCPERC).get_int (SPR_MESEC);
|
|
|
|
_annocomp = current_cursor()->curr(LF_SCPERC).get_int (SPR_ANNOC);
|
|
|
|
|
|
|
|
anno_doc = _datadoc.year();
|
|
|
|
|
|
|
|
_compenso_dovuto = _impondoc;
|
|
|
|
_spese_dovute = _spesedoc;
|
|
|
|
|
|
|
|
TSchedaP scheda(sch_curr);
|
|
|
|
bool esiste_pag_anno_in_corso = esiste_pag_in_anno(scheda, _anno_dic);
|
|
|
|
_stampa_scheda = anno_doc <= _anno_dic && esiste_pag_anno_in_corso;
|
|
|
|
|
|
|
|
TSchedaP sch_corr(_codditta, _tipoa, _codanagPE, _nprog);
|
|
|
|
|
|
|
|
if (_stampa_scheda)
|
|
|
|
{
|
|
|
|
_tot_fatt += _totaledoc;
|
|
|
|
|
|
|
|
if (_stampa_modulo)
|
|
|
|
setta_righe_documento_modulo();
|
|
|
|
else
|
|
|
|
setta_righe_documento();
|
|
|
|
|
|
|
|
_almeno_una_scheda = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_rifai_sort)
|
|
|
|
{
|
|
|
|
init_sort();
|
|
|
|
_rifai_sort = FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
TRectype recpag(_rpag->curr());
|
|
|
|
recpag.zero();
|
|
|
|
recpag.put(SPR_CODDITTA, _codditta);
|
|
|
|
recpag.put(SPR_TIPOA, _tipoa);
|
|
|
|
recpag.put(SPR_CODANAGR, _codanagPE);
|
|
|
|
recpag.put(SPR_NPROG, _nprog);
|
|
|
|
|
|
|
|
_rpag->setkey(1);
|
|
|
|
_rpag->zero();
|
|
|
|
_rpag->curr() = recpag;
|
|
|
|
|
|
|
|
TDate datapag;
|
|
|
|
TVersamento_stampa ve;
|
|
|
|
bool aggiorna_totali = FALSE;
|
|
|
|
for (_rpag->read(_isgteq); _rpag->good(); _rpag->next())
|
|
|
|
{
|
|
|
|
if (_rpag->curr() > recpag)
|
|
|
|
break;
|
|
|
|
|
|
|
|
datapag = _rpag->get_date(PAG_DATAPAG);
|
|
|
|
const int anno_pag = datapag.year();
|
|
|
|
|
|
|
|
compenpag = _rpag->get_real(PAG_COMPENSO);
|
|
|
|
spesepag = _rpag->get_real(PAG_SPESA);
|
|
|
|
|
|
|
|
// Aggiorna i tot. per questa scheda
|
|
|
|
if (anno_pag <= _anno_dic)
|
|
|
|
{
|
|
|
|
_compenso_dovuto -= compenpag;
|
|
|
|
_spese_dovute -= spesepag;
|
|
|
|
aggiorna_totali = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
// 28.11.95 Se sono di anni precedenti non li stampo
|
|
|
|
// (v. prospetto di Omero)
|
|
|
|
// 10.1.96 pero' sommo compenso e spese nei non pagati
|
|
|
|
if (anno_pag < _anno_dic)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
// Non devo stampare nulla, si resta nel ciclo solo per aggiornare i totali
|
|
|
|
if (!_stampa_scheda)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
pagato_anno_in_corso = anno_pag == _anno_dic;
|
|
|
|
|
|
|
|
imponpag = _rpag->get_real(PAG_IMPONIBILE);
|
|
|
|
real r_perc;
|
|
|
|
r_perc = _rpag->get_real(PAG_PERC);
|
|
|
|
TString16 st_perc(r_perc.string("###,@@"));
|
|
|
|
ritenpag = _rpag->get_real(PAG_RITENUTA);
|
|
|
|
quotepag = compenpag - imponpag;
|
|
|
|
numvers = _rpag->get_int(PAG_NUMVERS);
|
|
|
|
|
|
|
|
// 27.11.95 se l'anno e' successivo deve restare nei NON pagati
|
|
|
|
// e non si stampa
|
|
|
|
if (pagato_anno_in_corso)
|
|
|
|
{
|
|
|
|
if (_numcarat == 1 && !_stampa_modulo)
|
|
|
|
if (i == 3)
|
|
|
|
{
|
|
|
|
set_row (i++, "Data@54gSpese@67gQuote");
|
|
|
|
set_row (i++, "Pagamento@13gImponibili@27g%%@32gRitenute@45gCompensi@54gnon soggette@67gnon soggette");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_stampa_modulo)
|
|
|
|
i = setta_righe_pagamenti_modulo(datapag,imponpag,st_perc,ritenpag,compenpag,spesepag,quotepag,i);
|
|
|
|
else
|
|
|
|
setta_righe_pagamenti(datapag,imponpag,st_perc,ritenpag,compenpag,spesepag,quotepag,i);
|
|
|
|
|
|
|
|
i += _stampa_modulo ? 2 : 1;
|
|
|
|
do_sort(codqua,_codtrib,r_perc,spesepag,quotepag,imponpag,ritenpag,compenpag);
|
|
|
|
|
|
|
|
if (numvers > 0)
|
|
|
|
rigaver = stampa_vers(ve, rigaver, numvers, ritenpag);
|
|
|
|
}
|
|
|
|
} // for (rpag.. legge pagamento successivo
|
|
|
|
|
|
|
|
// Aggiorna i totali delle spese e comp. ancora da pagare
|
|
|
|
if (aggiorna_totali)
|
|
|
|
{
|
|
|
|
_tot_comp_non_pagati += _compenso_dovuto;
|
|
|
|
_tot_somme_non_soggette += _spese_dovute;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Determina se questa e' l'ultima scheda di questo percipiente
|
|
|
|
current_cursor()->save_status();
|
|
|
|
++(*current_cursor());
|
|
|
|
char tipoa = current_cursor()->curr(LF_SCPERC).get_char(SPR_TIPOA);
|
|
|
|
long codanag = current_cursor()->curr(LF_SCPERC).get_long(SPR_CODANAGR);
|
|
|
|
--(*current_cursor());
|
|
|
|
current_cursor()->restore_status();
|
|
|
|
|
|
|
|
// Se e' l'ultima chiude il sort (cioe' il riepilogo)
|
|
|
|
if (_tipoa != tipoa || _codanagPE != codanag)
|
|
|
|
_sort->endsort();
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
real TStampa_perc::fatture()
|
|
|
|
{
|
|
|
|
TLocalisamfile perc (LF_PERC);
|
|
|
|
real fatt_bil;
|
|
|
|
|
|
|
|
fatt_bil = ZERO;
|
|
|
|
|
|
|
|
perc.setkey(1);
|
|
|
|
perc.zero();
|
|
|
|
perc.put(PRC_CODDITTA, _codditta);
|
|
|
|
perc.put(PRC_TIPOA, _tipoa);
|
|
|
|
perc.put(PRC_CODANAGR, _codanagPE);
|
|
|
|
if (perc.read() == NOERR)
|
|
|
|
fatt_bil = perc.get_real(PRC_FATTBIL);
|
|
|
|
|
|
|
|
return fatt_bil;
|
|
|
|
}
|
|
|
|
|
|
|
|
print_action TStampa_perc::postprocess_page(int file, int counter)
|
|
|
|
{
|
|
|
|
char tipoa;
|
|
|
|
long codanag;
|
|
|
|
bool intesta_sort = TRUE;
|
|
|
|
|
|
|
|
if (counter)
|
|
|
|
{
|
|
|
|
printer().formfeed();
|
|
|
|
reset_print(); // per evitare che stampi di nuovo il totale prec.
|
|
|
|
// 7.12.95 Riparto da pag.1 con un nuovo percipiente
|
|
|
|
if (_changed_perc)
|
|
|
|
{
|
|
|
|
printer().setcurrentpage(1);
|
|
|
|
_changed_perc = FALSE;
|
|
|
|
}
|
|
|
|
return NEXT_PAGE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (file == LF_SCPERC)
|
|
|
|
{
|
|
|
|
if (!_stampa_scheda && !_almeno_una_scheda)
|
|
|
|
return NEXT_PAGE;
|
|
|
|
|
|
|
|
current_cursor()->save_status();
|
|
|
|
++(*current_cursor());
|
|
|
|
tipoa = current_cursor()->curr(LF_SCPERC).get_char(SPR_TIPOA);
|
|
|
|
codanag = current_cursor()->curr(LF_SCPERC).get_long(SPR_CODANAGR);
|
|
|
|
--(*current_cursor());
|
|
|
|
current_cursor()->restore_status();
|
|
|
|
_changed_perc = _tipoa != tipoa || _codanagPE != codanag;
|
|
|
|
|
|
|
|
if (_changed_perc)
|
|
|
|
{
|
|
|
|
TString16 codqua,codqua_t;
|
|
|
|
int codcau,codcau_t;
|
|
|
|
real totale,somme,quote,imp,rit,netto;
|
|
|
|
real totale_t,somme_t,quote_t,imp_t,rit_t,netto_t;
|
1996-06-17 10:04:38 +00:00
|
|
|
TString key(20),keyp(20);
|
|
|
|
real perc,perc_t;
|
1996-06-17 08:46:44 +00:00
|
|
|
|
|
|
|
_almeno_una_scheda = FALSE;
|
|
|
|
reset_print();
|
|
|
|
if (_tot_fatt != ZERO)
|
|
|
|
{
|
|
|
|
set_row (2, "@62gTotale fatturato@79g%12.0r", &_tot_fatt);
|
|
|
|
set_row (2, "@93gComprensivo d'iva");
|
|
|
|
_ind = 4;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
// _ind = 2;
|
|
|
|
_ind = 3;
|
|
|
|
|
|
|
|
struct righe_pag* bil = (struct righe_pag*) _buf;
|
|
|
|
|
|
|
|
_buf = _sort->retrieve();
|
|
|
|
|
|
|
|
int righe_libbere = printer().rows_left();
|
|
|
|
|
|
|
|
if (_buf != NULL)
|
|
|
|
{
|
|
|
|
do
|
|
|
|
{
|
|
|
|
bil = (struct righe_pag*) _buf;
|
|
|
|
codqua = bil->codq;
|
|
|
|
codcau = atoi(bil->codc);
|
|
|
|
real dumb;
|
|
|
|
const char* eng_perc = dumb.ita2eng(bil->perc);
|
|
|
|
const double ppp = atof(eng_perc);
|
|
|
|
perc = ppp;
|
|
|
|
totale = bil->totale;
|
|
|
|
somme = bil->somme;
|
|
|
|
quote = bil->quote;
|
|
|
|
imp = bil->imp;
|
|
|
|
rit = bil->rit;
|
|
|
|
netto = bil->netto;
|
|
|
|
|
|
|
|
TString16 st_perc(perc.string("###,@@"));
|
|
|
|
if (!intesta_sort)
|
|
|
|
key.format("%2s%4d%s", (const char*) codqua,codcau,(const char*)st_perc);
|
|
|
|
|
|
|
|
if (intesta_sort)
|
|
|
|
{
|
|
|
|
intestazione_riepilogo();
|
|
|
|
righe_libbere -= 6;
|
|
|
|
intesta_sort = FALSE;
|
|
|
|
key.format("%2s%4d%s", (const char*) codqua,codcau,(const char*)st_perc);
|
|
|
|
keyp.format("%2s%4d%s", (const char*) codqua,codcau,(const char*)st_perc);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (key == keyp)
|
|
|
|
{
|
|
|
|
codqua_t = codqua;
|
|
|
|
codcau_t = codcau;
|
|
|
|
perc_t = perc;
|
|
|
|
totale_t += totale;
|
|
|
|
somme_t += somme;
|
|
|
|
quote_t += quote;
|
|
|
|
imp_t += imp;
|
|
|
|
rit_t += rit;
|
|
|
|
netto_t += netto;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (righe_libbere <= 1)
|
|
|
|
{
|
|
|
|
intestazione_riepilogo();
|
|
|
|
righe_libbere = printer().formlen() - printer().headersize();
|
|
|
|
}
|
|
|
|
set_row (_ind, "%2s", (const char*) codqua_t);
|
|
|
|
set_row (_ind, "@4g%4d", codcau_t);
|
|
|
|
TString16 st_perc_t(perc_t.string("###,@@"));
|
|
|
|
set_row (_ind, "@10g%s", (const char*) st_perc_t);
|
|
|
|
set_row (_ind, "@17g%12r", &totale_t);
|
|
|
|
set_row (_ind, "@31g%12r", &somme_t);
|
|
|
|
set_row (_ind, "@47g%12r", "e_t);
|
|
|
|
set_row (_ind, "@63g%12r", &imp_t);
|
|
|
|
set_row (_ind, "@79g%12r", &rit_t);
|
|
|
|
set_row (_ind, "@94g%12r", &netto_t);
|
|
|
|
_ind++;
|
|
|
|
righe_libbere--;
|
|
|
|
codqua_t = codqua;
|
|
|
|
codcau_t = codcau;
|
|
|
|
perc_t = perc;
|
|
|
|
totale_t = totale;
|
|
|
|
somme_t = somme;
|
|
|
|
quote_t = quote;
|
|
|
|
imp_t = imp;
|
|
|
|
rit_t = rit;
|
|
|
|
netto_t = netto;
|
|
|
|
}
|
|
|
|
keyp = key;
|
|
|
|
_buf = _sort->retrieve();
|
|
|
|
}
|
|
|
|
while ( _buf != NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
set_row (_ind, "%2s", (const char*) codqua_t);
|
|
|
|
set_row (_ind, "@4g%4d", codcau_t);
|
|
|
|
TString16 st_perc_t(perc_t.string("###,@@"));
|
|
|
|
set_row (_ind, "@10g%s", (const char*)st_perc_t);
|
|
|
|
set_row (_ind, "@17g%12r", &totale_t);
|
|
|
|
set_row (_ind, "@31g%12r", &somme_t);
|
|
|
|
set_row (_ind, "@47g%12r", "e_t);
|
|
|
|
set_row (_ind, "@63g%12r", &imp_t);
|
|
|
|
set_row (_ind, "@79g%12r", &rit_t);
|
|
|
|
set_row (_ind, "@94g%12r", &netto_t);
|
|
|
|
_ind++;
|
|
|
|
// Prospetto delle sommee **NON PAGATE**
|
|
|
|
// _tot_comp_non_pagati = _tot_comp_testata - _tot_comp_pagati;
|
|
|
|
// _tot_somme_non_soggette = _tot_spese_testata - _tot_spese_pagate;
|
|
|
|
|
|
|
|
real fatt_bil, totale_non_pagate;
|
|
|
|
|
|
|
|
fatt_bil = fatture();
|
|
|
|
totale_non_pagate = _tot_comp_non_pagati + _tot_somme_non_soggette;
|
|
|
|
|
|
|
|
set_row (_ind++, "");
|
|
|
|
|
|
|
|
if (fatt_bil != ZERO)
|
|
|
|
{
|
|
|
|
set_row (_ind++, "***************************");
|
|
|
|
set_row (_ind++, "*** FATTURE DA RICEVERE ***@30g%12.0r", &fatt_bil);
|
|
|
|
set_row (_ind++, "***************************");
|
|
|
|
set_row (_ind++, "");
|
|
|
|
}
|
|
|
|
|
|
|
|
set_row (_ind++, "************** Compensi@42g%12.0r@56g+", &_tot_comp_non_pagati);
|
|
|
|
set_row (_ind++, "* NON PAGATE * Somme non soggette@42g%12.0r@56g=", &_tot_somme_non_soggette);
|
|
|
|
set_row (_ind++, "**************@42g----------------");
|
|
|
|
set_row (_ind , " Totale@42g%12.0r", &totale_non_pagate);
|
|
|
|
|
|
|
|
_rifai_sort = TRUE;
|
|
|
|
_tot_comp = ZERO;
|
|
|
|
_tot_fatt = ZERO;
|
|
|
|
_tot_somme_non_soggette = _tot_comp_non_pagati = ZERO;
|
|
|
|
|
|
|
|
return REPEAT_PAGE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return NEXT_PAGE;
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::intestazione_riepilogo(const bool redo_header, const int start_riga)
|
|
|
|
{
|
|
|
|
TString sep(110);
|
|
|
|
if (redo_header)
|
|
|
|
{
|
|
|
|
int ind = start_riga;
|
|
|
|
sep.fill('_');
|
|
|
|
set_header (ind++, (const char*) sep);
|
|
|
|
set_header (ind++, "Q@4gCod.@31gSomme@47gQuote@95gNetto");
|
|
|
|
set_header (ind++, "D@4gCaus.@13g%%@23gTotale@31gnon soggette@47gnon soggette@65gImponibili@83gRitenute@95gcorrisposto");
|
|
|
|
set_header (ind++, (const char*) sep);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sep.fill('_');
|
|
|
|
set_row (_ind++, (const char*) sep);
|
|
|
|
set_row (_ind++, "Q@4gCod.@31gSomme@47gQuote@95gNetto");
|
|
|
|
set_row (_ind++, "D@4gCaus.@13g%%@23gTotale@31gnon soggette@47gnon soggette@65gImponibili@83gRitenute@95gcorrisposto");
|
|
|
|
set_row (_ind++, (const char*) sep);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::on_config_change()
|
|
|
|
{
|
|
|
|
TConfig conf(_liv == 'S' ? CONFIG_USER : CONFIG_STUDIO);
|
|
|
|
_anno_dic = (int)conf.get_long(ANNO_SEL, _section);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TStampa_perc::init_print()
|
|
|
|
{
|
|
|
|
KEY tasto;
|
|
|
|
TLocalisamfile* fl;
|
|
|
|
TMask msk ("772100a");
|
|
|
|
|
|
|
|
_changed_perc = FALSE;
|
|
|
|
printer().footerlen(RIGHE_FOOTER);
|
|
|
|
msk.set_handler (F_CODDITTA, codditta_hnd);
|
|
|
|
|
|
|
|
tasto = msk.run();
|
|
|
|
|
|
|
|
if (tasto == K_ENTER)
|
|
|
|
{
|
|
|
|
char tipoa_da = msk.get(F_TIPODA)[0];
|
|
|
|
long cod_da = msk.get_long(F_CODDA);
|
|
|
|
char tipoa_a = msk.get(F_TIPOA)[0];
|
|
|
|
long cod_a = msk.get_long(F_CODA);
|
|
|
|
|
|
|
|
_numcarat = msk.get_int (F_CARATTERE);
|
|
|
|
_stampa_modulo = msk.get_bool(F_MODULO);
|
|
|
|
|
|
|
|
//Crea il cursore su gruppo, conto e sottoconto del file RMOV
|
|
|
|
reset_files(); //resetta l'albero di stampa
|
|
|
|
add_file(LF_SCPERC);
|
|
|
|
|
|
|
|
fl = &(current_cursor()->file(LF_SCPERC));
|
|
|
|
TRectype da (fl->curr());
|
|
|
|
TRectype a (fl->curr());
|
|
|
|
|
|
|
|
da.zero();
|
|
|
|
a.zero();
|
|
|
|
|
|
|
|
da.put(SPR_CODDITTA, _codditta);
|
|
|
|
da.put(SPR_TIPOA, tipoa_da);
|
|
|
|
da.put(SPR_CODANAGR, cod_da);
|
|
|
|
|
|
|
|
a.put(SPR_CODDITTA, _codditta);
|
|
|
|
a.put(SPR_TIPOA, tipoa_a);
|
|
|
|
a.put(SPR_CODANAGR, cod_a);
|
|
|
|
|
|
|
|
current_cursor()->setregion(da, a);
|
|
|
|
|
|
|
|
_anno = _anno_dic;
|
|
|
|
|
|
|
|
dati_erogante();
|
|
|
|
_rifai_sort = TRUE;
|
|
|
|
}
|
|
|
|
return tasto == K_ENTER;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TStampa_perc::set_print(int)
|
|
|
|
{
|
|
|
|
long codditta_prec;
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
if (_liv == 'S')
|
|
|
|
{
|
|
|
|
codditta_prec = get_firm_770();
|
|
|
|
while ((_codditta = _cnf->get_long(DITTE_SEL, _section, i++)) != 0L)
|
|
|
|
{
|
|
|
|
set_firm_770(_codditta);
|
|
|
|
// init_print ritorna TRUE solo se K_ENTER
|
|
|
|
if (init_print())
|
|
|
|
print();
|
|
|
|
else
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
set_firm_770(codditta_prec);
|
|
|
|
// Non richiamare di nuovo print()!
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return init_print();
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::preprocess_header()
|
|
|
|
{
|
|
|
|
int riga;
|
|
|
|
dati_percipiente();
|
|
|
|
riga = stampa_dati_erog_perc();
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::dati_erogante()
|
|
|
|
{
|
|
|
|
TString com,comnasc;
|
|
|
|
TDate data;
|
|
|
|
|
|
|
|
_nditte->setkey(1);
|
|
|
|
_nditte->curr().zero();
|
|
|
|
_nditte->curr().put(NDT_CODDITTA, _codditta);
|
|
|
|
if (_nditte->read() == NOERR)
|
|
|
|
{
|
|
|
|
_tipoaER = _nditte->get_char(NDT_TIPOA);
|
|
|
|
_codanagER = _nditte->get_long(NDT_CODANAGR);
|
|
|
|
}
|
|
|
|
|
|
|
|
_anag->setkey(1);
|
|
|
|
_anag->zero();
|
|
|
|
_anag->put(ANA_TIPOA, _tipoaER);
|
|
|
|
_anag->put(ANA_CODANAGR, _codanagER);
|
|
|
|
if (_anag->read() == NOERR)
|
|
|
|
{
|
|
|
|
_ragsocER = _anag->get(ANA_RAGSOC);
|
|
|
|
_cofiER = _anag->get(ANA_COFI);
|
|
|
|
|
|
|
|
if (_tipoaER == 'F')
|
|
|
|
{
|
|
|
|
TString80 nome = _ragsocER.mid(30);
|
|
|
|
_ragsocER.cut(30);
|
|
|
|
_ragsocER.trim(); nome.trim();
|
|
|
|
_ragsocER << ' ' << nome;
|
|
|
|
}
|
|
|
|
|
|
|
|
com = _anag->get(ANA_COMRF);
|
|
|
|
|
|
|
|
if (com != "")
|
|
|
|
{
|
|
|
|
_indER = _anag->get(ANA_INDRF);
|
|
|
|
_civER = _anag->get(ANA_CIVRF);
|
|
|
|
_capER = _anag->get(ANA_CAPRF);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_indER = _anag->get(ANA_INDRES);
|
|
|
|
_civER = _anag->get(ANA_CIVRES);
|
|
|
|
_capER = _anag->get(ANA_CAPRES);
|
|
|
|
com = _anag->get(ANA_COMRES);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_comuni->setkey(1);
|
|
|
|
_comuni->zero();
|
|
|
|
_comuni->put(COM_COM,com);
|
|
|
|
if (_comuni->read() == NOERR)
|
|
|
|
{
|
|
|
|
_dencomER = _comuni->get(COM_DENCOM);
|
|
|
|
_provER = _comuni->get(COM_PROVCOM);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_tipoaER == 'F')
|
|
|
|
{
|
|
|
|
TLocalisamfile anagfis(LF_ANAGFIS);
|
|
|
|
|
|
|
|
anagfis.setkey(1);
|
|
|
|
anagfis.zero();
|
|
|
|
anagfis.put(ANF_CODANAGR, _codanagER);
|
|
|
|
if (anagfis.read() == NOERR)
|
|
|
|
{
|
|
|
|
data = anagfis.get_date(ANF_DATANASC);
|
|
|
|
_datanascER = data.string();
|
|
|
|
comnasc = anagfis.get (ANF_COMNASC);
|
|
|
|
}
|
|
|
|
|
|
|
|
_comuni->setkey(1);
|
|
|
|
_comuni->zero();
|
|
|
|
_comuni->put(COM_COM,comnasc);
|
|
|
|
if (_comuni->read() == NOERR)
|
|
|
|
{
|
|
|
|
_dencomnscER = _comuni->get(COM_DENCOM);
|
|
|
|
_provnscER = _comuni->get(COM_PROVCOM);
|
|
|
|
}
|
|
|
|
_dencomnscER.rtrim();
|
|
|
|
_provnscER.rtrim();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_dencomnscER = "";
|
|
|
|
_provnscER = "";
|
|
|
|
}
|
|
|
|
_indER.rtrim();
|
|
|
|
_dencomER.rtrim();
|
|
|
|
}
|
|
|
|
|
|
|
|
void TStampa_perc::dati_percipiente()
|
|
|
|
{
|
|
|
|
TString com;
|
|
|
|
TDate data;
|
|
|
|
TString comnasc;
|
|
|
|
|
|
|
|
_anag->setkey(1);
|
|
|
|
_anag->zero();
|
|
|
|
_anag->put(ANA_TIPOA, _tipoa);
|
|
|
|
_anag->put(ANA_CODANAGR, _codanagPE);
|
|
|
|
if (_anag->read() == NOERR)
|
|
|
|
{
|
|
|
|
_ragsocPE = _anag->get(ANA_RAGSOC);
|
|
|
|
_cofiPE = _anag->get(ANA_COFI);
|
|
|
|
|
|
|
|
if (_tipoa == 'F')
|
|
|
|
{
|
|
|
|
TString80 nome = _ragsocPE.mid(30);
|
|
|
|
_ragsocPE.cut(30);
|
|
|
|
_ragsocPE.trim(); nome.trim();
|
|
|
|
_ragsocPE << ' ' << nome;
|
|
|
|
}
|
|
|
|
|
|
|
|
com = _anag->get(ANA_COMRF);
|
|
|
|
|
|
|
|
if (com != "")
|
|
|
|
{
|
|
|
|
_indPE = _anag->get(ANA_INDRF);
|
|
|
|
_civPE = _anag->get(ANA_CIVRF);
|
|
|
|
_capPE = _anag->get(ANA_CAPRF);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_indPE = _anag->get(ANA_INDRES);
|
|
|
|
_civPE = _anag->get(ANA_CIVRES);
|
|
|
|
_capPE = _anag->get(ANA_CAPRES);
|
|
|
|
com = _anag->get(ANA_COMRES);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_comuni->setkey(1);
|
|
|
|
_comuni->zero();
|
|
|
|
_comuni->put(COM_COM,com);
|
|
|
|
if (_comuni->read() == NOERR)
|
|
|
|
{
|
|
|
|
_dencomPE = _comuni->get(COM_DENCOM);
|
|
|
|
_provPE = _comuni->get(COM_PROVCOM);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_tipoa == 'F')
|
|
|
|
{
|
|
|
|
TLocalisamfile anagfis(LF_ANAGFIS);
|
|
|
|
|
|
|
|
anagfis.setkey(1);
|
|
|
|
anagfis.zero();
|
|
|
|
anagfis.put(ANF_CODANAGR, _codanagPE);
|
|
|
|
if (anagfis.read() == NOERR)
|
|
|
|
{
|
|
|
|
data = anagfis.get_date(ANF_DATANASC);
|
|
|
|
_datanascPE = data.string();
|
|
|
|
comnasc = anagfis.get (ANF_COMNASC);
|
|
|
|
}
|
|
|
|
|
|
|
|
_comuni->setkey(1);
|
|
|
|
_comuni->zero();
|
|
|
|
_comuni->put(COM_COM,comnasc);
|
|
|
|
if (_comuni->read() == NOERR)
|
|
|
|
{
|
|
|
|
_dencomnscPE = _comuni->get(COM_DENCOM);
|
|
|
|
_provnscPE = _comuni->get(COM_PROVCOM);
|
|
|
|
}
|
|
|
|
_dencomnscPE.rtrim();
|
|
|
|
_provnscPE.rtrim();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_dencomnscPE = "";
|
|
|
|
_provnscPE = "";
|
|
|
|
}
|
|
|
|
_indPE.rtrim();
|
|
|
|
_dencomPE.rtrim();
|
|
|
|
}
|
|
|
|
|
|
|
|
int TStampa_perc::stampa_dati_erog_perc()
|
|
|
|
{
|
|
|
|
int riga, riga2;
|
|
|
|
TString sep(200);
|
|
|
|
|
|
|
|
reset_header();
|
|
|
|
|
|
|
|
// Dati del soggetto erogante
|
|
|
|
if (_stampa_modulo)
|
|
|
|
{
|
|
|
|
riga = 7;
|
|
|
|
set_header (riga, "@12g%4d", _anno);
|
|
|
|
sep << "@#";
|
|
|
|
sep.right_just(105);
|
|
|
|
set_header(riga,(const char*) sep);
|
|
|
|
riga += 4; // da 7 a 11
|
|
|
|
set_header (riga, "@10g%s", (const char*) _ragsocER);
|
|
|
|
riga += 3;
|
|
|
|
set_header (riga++, "@10g%s %s", (const char*) _indER, (const char*) _civER);
|
|
|
|
set_header (riga, "@10g%5s", (const char*) _capER);
|
|
|
|
set_header (riga++, "@17g%s %s", (const char*) _dencomER, (const char*) _provER);
|
|
|
|
set_header (riga++, "@10gxxx");
|
|
|
|
set_header (riga++, "@10g%-16s", (const char*) _cofiER);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// 7.12.95 Numeri di pagina qui!
|
|
|
|
riga = 1;
|
|
|
|
set_header (riga++, _numcarat == 1 ? "SOGGETTO EROGANTE @122gPag. @#" : "SOGGETTO EROGANTE @188gPag. @#");
|
|
|
|
set_header (riga++, "Codice@15g%5d", _codditta);
|
|
|
|
set_header (riga++, "Denominazione@15g%s", (const char*) _ragsocER);
|
|
|
|
set_header (riga++, "Domicilio in@15g%s %s", (const char*) _indER, (const char*) _civER);
|
|
|
|
set_header (riga, "@15g%5s", (const char*) _capER);
|
|
|
|
set_header (riga++, "@21g%s %s", (const char*) _dencomER, (const char*) _provER);
|
|
|
|
set_header (riga++, "Codice fiscale@15g%-16s",(const char*) _cofiER);
|
|
|
|
if (_tipoaER == 'F')
|
|
|
|
set_header (riga++, "Luogo data di nascita@22g%s %s %10s", (const char*) _dencomnscER, (const char*) _provnscER, (const char*) _datanascER);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Dati del soggetto percipiente
|
|
|
|
if (_stampa_modulo)
|
|
|
|
{
|
|
|
|
set_header (11, "@65g%s", (const char*) _ragsocPE);
|
|
|
|
set_header (14, "@65g%s %s", (const char*) _indPE, (const char*) _civPE);
|
|
|
|
set_header (15, "@65g%5s", (const char*) _capPE);
|
|
|
|
set_header (15, "@72g%s %s", (const char*) _dencomPE, (const char*) _provPE);
|
|
|
|
set_header (17, "@65g%-16s",(const char*) _cofiPE);
|
|
|
|
set_header (23, "");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (_numcarat == 1)
|
|
|
|
{
|
|
|
|
riga2 = 1;
|
|
|
|
set_header (riga2++, "@66gSOGGETTO PERCIPIENTE");
|
|
|
|
set_header (riga2++, "@66gCodice@81g%c %5d", _tipoa, _codanagPE);
|
|
|
|
set_header (riga2++, "@66gDenominazione@81g%s", (const char*) _ragsocPE);
|
|
|
|
set_header (riga2++, "@66gDomicilio in@81g%s %s", (const char*) _indPE, (const char*) _civPE);
|
|
|
|
set_header (riga2, "@81g%5s", (const char*) _capPE);
|
|
|
|
set_header (riga2++, "@87g%s %s", (const char*) _dencomPE, (const char*) _provPE);
|
|
|
|
set_header (riga2++, "@66gCodice fiscale@81g%-16s",(const char*) _cofiPE);
|
|
|
|
if (_tipoa == 'F')
|
|
|
|
set_header (riga2++, "@66gLuogo data di nascita@88g%s %s %s", (const char*) _dencomnscPE, (const char*) _provnscPE, (const char*) _datanascPE);
|
|
|
|
else
|
|
|
|
riga2++;
|
|
|
|
set_header (riga2++, "Conto individuale percipiente anno %4d", _anno);
|
|
|
|
TString app(132);
|
|
|
|
app.fill('_');
|
|
|
|
set_header(riga2++, (const char*) app);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
if (_numcarat == 2)
|
|
|
|
{
|
|
|
|
TString app(198);
|
|
|
|
app.fill('_');
|
|
|
|
riga2=1;
|
|
|
|
set_header (riga2++, "@110gSOGGETTO PERCIPIENTE");
|
|
|
|
set_header (riga2++, "@110gCodice@125g%c %5d", _tipoa, _codanagPE);
|
|
|
|
set_header (riga2++, "@110gDenominazione@125g%s", (const char*) _ragsocPE);
|
|
|
|
set_header (riga2++, "@110gDomicilio in@125g%s %s", (const char*) _indPE, (const char*) _civPE);
|
|
|
|
set_header (riga2 /*5*/, "@125g%5s", (const char*) _capPE);
|
|
|
|
set_header (riga2++ /*5*/, "@131g%s %s", (const char*) _dencomPE, (const char*) _provPE);
|
|
|
|
set_header (riga2++, "@110gCodice fiscale@125g%-16s",(const char*) _cofiPE);
|
|
|
|
if (_tipoa == 'F')
|
|
|
|
set_header (riga2++, "@110gLuogo data di nascita@132g%s %s %s", (const char*) _dencomnscPE, (const char*) _provnscPE, (const char*) _datanascPE);
|
|
|
|
else
|
|
|
|
riga2++;
|
|
|
|
set_header (riga2++, "Conto individuale percipiente anno %4d", _anno);
|
|
|
|
set_header (riga2++, (const char*) app);
|
|
|
|
set_header (riga2++, "@50gESTREMI DOCUMENTO @101gESTREMI PAGAMENTO @145gSomme e@157gD@165gESTREMI VERSAMENTO");
|
|
|
|
set_header (riga2++, "Cod.@80gTotale@90gData@145gquote@155gT@157gC@168gSerie@174gNumero");
|
|
|
|
set_header (riga2 /*13*/, "Caus.@8gDescrizione@24gData@33gNumero@43gImponibili@60gSpese@70gImposte@80gDocumento@90gPagamento@101gImponibili@115g%%@122gRitenute");
|
|
|
|
set_header (riga2++ /*13*/, "@134gCompensi@145gnon sogg.@155gC@157gB@159gData@168gABI @174gCAB @183gImporto versato");
|
|
|
|
set_header (riga2++, (const char*) app);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// ritorna la prima riga libera
|
|
|
|
return riga > riga2 ? riga : riga2;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
// Crea l'intestazione per la stampa a 132 e a 198 caratteri
|
|
|
|
void TStampa_perc::intesta_fissa()
|
|
|
|
{
|
|
|
|
set_background();
|
|
|
|
if (_numcarat == 1)
|
|
|
|
set_background("W4l{1 10 132 10}");
|
|
|
|
else if (_numcarat == 2)
|
|
|
|
set_background("W4l{1 10 198 10} W4l{1 13 198 13}");
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
|
|
|
|
bool TStampa_perc::user_create()
|
|
|
|
{
|
|
|
|
TToken_string exp;
|
|
|
|
|
|
|
|
// Parametri configurazione
|
|
|
|
_section = name();
|
|
|
|
_section.cut(2);
|
|
|
|
_cnf = new TConfig(CONFIG_USER, _section);
|
|
|
|
_rel = new TRelation (LF_SCPERC);
|
|
|
|
_cur = new TCursor(_rel,"",2);
|
|
|
|
add_cursor(_cur);
|
|
|
|
|
|
|
|
_nditte = new TLocalisamfile (LF_NDITTE);
|
|
|
|
_comuni = new TLocalisamfile (LF_COMUNI);
|
|
|
|
_anag = new TLocalisamfile (LF_ANAG);
|
|
|
|
_rpag = new TLocalisamfile (LF_RPAG);
|
|
|
|
_rver = new TLocalisamfile (LF_RVER);
|
|
|
|
_bil = new righe_pag;
|
|
|
|
_sort = new TSort();
|
|
|
|
|
|
|
|
_codditta = get_firm_770();
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TStampa_perc::user_destroy()
|
|
|
|
{
|
|
|
|
delete _rel;
|
|
|
|
delete _cur;
|
|
|
|
delete _nditte;
|
|
|
|
delete _anag;
|
|
|
|
delete _comuni;
|
|
|
|
delete _rpag;
|
|
|
|
delete _rver;
|
|
|
|
delete _bil;
|
|
|
|
delete _sort;
|
|
|
|
delete _cnf;
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
int m72100(int argc, char* argv[])
|
|
|
|
{
|
|
|
|
TStampa_perc a(*argv[2]);
|
|
|
|
a.run(argc, argv, "Stampa schede percipienti");
|
|
|
|
return 0;
|
|
|
|
}
|