455 lines
12 KiB
C++
Executable File
455 lines
12 KiB
C++
Executable File
#include <applicat.h>
|
|
#include <config.h>
|
|
#include <urldefid.h>
|
|
#include <form.h>
|
|
#include <mask.h>
|
|
#include <printer.h>
|
|
#include <relation.h>
|
|
#include <sheet.h>
|
|
#include <tabutil.h>
|
|
#include <utility.h>
|
|
|
|
#include "cg1400.h"
|
|
|
|
class TStampa_deleghe_IVA : public TApplication
|
|
{
|
|
TRelation *_nditte;
|
|
TTable* _banche;
|
|
|
|
TArray_sheet* _ditte;
|
|
|
|
int _mese, _anno, _tipo;
|
|
TString16 _azienda, _dipendenza, _concessione;
|
|
|
|
TString16 _profilo; // Profilo base
|
|
long _codice; // Codice profilo
|
|
|
|
bool _stampa_distinte, _aggiorna_codici, _definitiva;
|
|
TDate _pd;
|
|
|
|
protected:
|
|
virtual bool create();
|
|
virtual bool destroy();
|
|
virtual bool menu(MENU_TAG);
|
|
virtual void print();
|
|
|
|
char frequenza_versamenti(long firm, int year) const;
|
|
int select();
|
|
bool print_deleghe();
|
|
void print_distinta();
|
|
|
|
public:
|
|
TStampa_deleghe_IVA() : _ditte(NULL) {}
|
|
};
|
|
|
|
|
|
bool TStampa_deleghe_IVA::create()
|
|
{
|
|
const bool ok = TApplication::create();
|
|
if (ok)
|
|
{
|
|
_nditte = new TRelation(LF_NDITTE);
|
|
_nditte->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR");
|
|
_nditte->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG);
|
|
|
|
_banche = new TTable("%BAN");
|
|
|
|
_ditte = new TArray_sheet(3, 3, -3, -3, TR("Selezione Deleghe da stampare"),
|
|
HR("@1|Cod.@5|Ragione Sociale@30|Importo@15R|Interessi@15R|ABI@5|CAB@5|Concessione|Tit. Conto Fis."));
|
|
|
|
_azienda = "" ;
|
|
_dipendenza = "" ;
|
|
|
|
dispatch_e_menu(BAR_ITEM_ID(1));
|
|
}
|
|
return ok;
|
|
}
|
|
|
|
bool TStampa_deleghe_IVA::destroy()
|
|
{
|
|
delete _ditte;
|
|
delete _banche;
|
|
delete _nditte;
|
|
return TApplication::destroy();
|
|
}
|
|
|
|
|
|
int TStampa_deleghe_IVA::select()
|
|
{
|
|
TMask m("cg1400a");
|
|
|
|
m.set(F_CONCESSIONE, _concessione);
|
|
m.set(F_ABI, _azienda);
|
|
m.set(F_CAB, _dipendenza);
|
|
if (m.run() != K_ENTER)
|
|
return 0;
|
|
|
|
_azienda = m.get(F_ABI);
|
|
_dipendenza = m.get(F_CAB);
|
|
|
|
_mese = m.get_int(F_MESE);
|
|
_anno = m.get_int(F_ANNO);
|
|
_tipo = m.get_int(F_TIPO);
|
|
|
|
_definitiva = m.get_bool(F_DEFINITIVA);
|
|
_stampa_distinte = m.get_bool(F_DISTINTA);
|
|
_aggiorna_codici = m.get_bool(F_AGGIORNA);
|
|
|
|
_profilo = m.get(F_PROFILO);
|
|
_codice = m.get_long(F_CODICE);
|
|
const bool contofis = _profilo.right(2) == "CF";
|
|
|
|
int del_dis_bol=0;
|
|
if (_profilo.left(3) == "DIS") del_dis_bol = 2;
|
|
else
|
|
if (_profilo.left(3) == "BOL") del_dis_bol = 1;
|
|
//const TDate pd(m.get(F_DATA));
|
|
//printer().setdate(pd);
|
|
|
|
_pd = m.get(F_DATA);
|
|
printer().setdate(_pd);
|
|
|
|
_concessione = m.get(F_CONCESSIONE);
|
|
const long soloabi = m.get_long(F_SOLO_ABI);
|
|
const long solocab = m.get_long(F_SOLO_CAB);
|
|
|
|
TTable deleghe("%DEL");
|
|
|
|
TString16 chiave;
|
|
TToken_string d(80);
|
|
|
|
_ditte->destroy();
|
|
{
|
|
TWait_cursor hourglass;
|
|
const TRectype& anag = _nditte->curr(LF_ANAG);
|
|
const TRectype& com = _nditte->curr(LF_COMUNI); // Comune residenza fiscale
|
|
for (_nditte->first(); _nditte->good(); _nditte->next())
|
|
{
|
|
const TString16 con = com.get("UFFCONC");
|
|
if (_concessione.full() && _concessione != con)
|
|
continue;
|
|
|
|
const bool cf = anag.get_bool("TITCF");
|
|
if (contofis != cf) continue;
|
|
|
|
const int tstdel = anag.get_int("TIPOSTDEL");
|
|
if (tstdel != del_dis_bol) continue;
|
|
|
|
const long dit = _nditte->lfile().get_long("CODDITTA");
|
|
chiave.format("%05ld%04d%02d%d", dit, _anno, _mese, _tipo);
|
|
deleghe.put("CODTAB", chiave);
|
|
|
|
if (deleghe.read() == NOERR && deleghe.get_bool("B0") == FALSE) // Da stampare
|
|
{
|
|
const long abi = deleghe.get_long("S7");
|
|
const long cab = deleghe.get_long("S8");
|
|
if ((soloabi == 0 || soloabi == abi) && (solocab == 0 || solocab == cab))
|
|
{
|
|
d = " "; // Selezione
|
|
d.add(dit); // Codice ditta
|
|
d.add(_nditte->lfile().get("RAGSOC").left(30)); // Cognome
|
|
d.add(deleghe.get_real("R0").string(".")); // Importo
|
|
d.add(deleghe.get_real("R1").string(".")); // Interesse
|
|
d.add(abi ? format("%05ld", abi) : ""); // Azienda
|
|
d.add(cab ? format("%05ld", cab) : ""); // Dipendenza
|
|
d.add(con); // Concessione
|
|
d.add(cf ? "X" : " "); // Conto fiscale
|
|
_ditte->add(d);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
int res = 1;
|
|
if (_ditte->items() > 0)
|
|
{
|
|
const bool ok = _ditte->run() == K_ENTER && _ditte->one_checked();
|
|
if (!ok) res = 2;
|
|
}
|
|
else
|
|
{
|
|
warning_box(TR("Nessuna ditta ha deleghe del tipo specificato"));
|
|
res = 2;
|
|
}
|
|
|
|
enable_menu_item(M_FILE_PRINT, res == 1);
|
|
return res;
|
|
}
|
|
|
|
bool TStampa_deleghe_IVA::menu(MENU_TAG)
|
|
{
|
|
int s;
|
|
while ((s = select()) != 0)
|
|
if (s == 1) print();
|
|
return FALSE;
|
|
}
|
|
|
|
void TStampa_deleghe_IVA::print()
|
|
{
|
|
bool ok = yesno_box(TR("Inserire il modulo prefincato nella stampante e confermare la stampa delle deleghe"));
|
|
if (ok)
|
|
{
|
|
print_deleghe();
|
|
if (_stampa_distinte)
|
|
{
|
|
ok = yesno_box(TR("Inserire il modulo in carta bianca nella stampante e confermare la stampa della distinta"));
|
|
if (ok) print_distinta();
|
|
}
|
|
}
|
|
}
|
|
|
|
void TStampa_deleghe_IVA::print_distinta()
|
|
{
|
|
enum Tabulatori { TAB_DITTA = 0, TAB_SEDE = 52, TAB_PROV = 78,
|
|
TAB_IMPORTO = 82, TAB_NOTE = 100 };
|
|
|
|
printer().open();
|
|
|
|
TString16 codban;
|
|
if (_azienda.not_empty())
|
|
{
|
|
codban = _azienda; codban << _dipendenza;
|
|
_banche->put("CODTAB", codban);
|
|
_banche->read();
|
|
CHECK(_banche->status() == NOERR, "E' sparita nel nulla la banca");
|
|
}
|
|
|
|
TPrintrow row;
|
|
|
|
const bool contofis = _profilo.right(2) == "CF";
|
|
if (atol(_azienda))
|
|
row.put(_banche->get("S0"), 0);
|
|
TString hdr(FR("@bDISTINTA DELEGHE DI VERSAMENTO"));
|
|
if (contofis) hdr << TR(" - CONTO FISCALE");
|
|
row.put(hdr, contofis ? TAB_SEDE - 8: TAB_SEDE);
|
|
row.put(FR("Data @>"), 106);
|
|
row.put(FR("Pag. @#"), 124);
|
|
printer().setheaderline(0, row);
|
|
|
|
row.reset();
|
|
if (atol(_dipendenza))
|
|
row.put(_banche->get("S1"), 0);
|
|
|
|
TString256 t(TR("Dichiarazione "));
|
|
switch (_tipo)
|
|
{
|
|
case 2:
|
|
t << TR("annuale :"); break;
|
|
case 3:
|
|
t << TR("articolo 74 : ") << itom(_mese); break;
|
|
case 4:
|
|
t << TR("cessazione attivita' : ") << itom(_mese); break;
|
|
case 5:
|
|
t << TR("integrativa : ") << itom(_mese); break;
|
|
default:
|
|
t = TR("Periodo: ") ; t << itom(_mese); break;
|
|
}
|
|
t << ' ' << _anno;
|
|
row.put(t, TAB_SEDE);
|
|
printer().setheaderline(1, row);
|
|
|
|
t.fill('-', 130);
|
|
row.reset();
|
|
row.put(t, 0);
|
|
printer().setheaderline(2, row);
|
|
printer().setheaderline(4, row);
|
|
|
|
row.reset();
|
|
row.put(TR("Ditta"), TAB_DITTA);
|
|
row.put(TR("Sede") , TAB_SEDE);
|
|
row.put(TR("Importo"), TAB_IMPORTO+8);
|
|
if (contofis)
|
|
row.put(TR("Conto fiscale"), TAB_NOTE); // Colonna per il conto fiscale, alla posizione delle note
|
|
row.put(TR("Note"), contofis ? TAB_NOTE + 22 : TAB_NOTE);
|
|
printer().setheaderline(3, row);
|
|
|
|
real totale;
|
|
|
|
TLocalisamfile& com = _nditte->lfile(LF_COMUNI);
|
|
TLocalisamfile& anag = _nditte->lfile(LF_ANAG);
|
|
|
|
for (int i = 0; i < _ditte->items(); i++)
|
|
if (_ditte->checked(i))
|
|
{
|
|
TToken_string& riga = _ditte->row(i);
|
|
const TString16 cod(riga.get(1));
|
|
_nditte->lfile().put("CODDITTA", cod);
|
|
_nditte->read();
|
|
|
|
TParagraph_string dencom(com.get("DENCOM"), 18);
|
|
|
|
row.reset();
|
|
row.put(_nditte->lfile().get("RAGSOC"), TAB_DITTA);
|
|
row.put(dencom.get(), TAB_SEDE);
|
|
row.put(com.get("PROVCOM"), TAB_PROV);
|
|
|
|
const real imp(real::ita2eng(riga.get(3)));
|
|
row.put(imp.string("###.###.###.###"), TAB_IMPORTO);
|
|
if (contofis)
|
|
{
|
|
TString cfis(anag.get("UFFCONC"));
|
|
if (cfis.empty()) cfis = com.get("UFFCONC");
|
|
cfis << " " << anag.get("COFI");
|
|
row.put(cfis,TAB_NOTE); // Stampa il conto fiscale alla posizione delle note
|
|
}
|
|
printer().print(row);
|
|
totale += imp;
|
|
|
|
const char* r;
|
|
while ((r = dencom.get()) != NULL)
|
|
{
|
|
row.reset();
|
|
row.put(r, TAB_SEDE);
|
|
printer().print(row);
|
|
}
|
|
}
|
|
|
|
row.reset();
|
|
printer().print(row);
|
|
row.put(FR("@bTotale versamenti :"), TAB_SEDE);
|
|
row.put(totale.string("###.###.###.###"), TAB_IMPORTO);
|
|
printer().print(row);
|
|
|
|
printer().close();
|
|
}
|
|
|
|
|
|
// Calcola frequenza dei versamenti IVA di una ditta
|
|
// Certified 99%
|
|
char TStampa_deleghe_IVA::frequenza_versamenti(long firm, int year) const
|
|
{
|
|
char freq = 'M';
|
|
|
|
TString16 key; key.format("%05ld%d", firm, year);
|
|
TTable lia("%LIA");
|
|
lia.put("CODTAB", key);
|
|
if (lia.read() != NOERR)
|
|
{
|
|
TLocalisamfile nditte(LF_NDITTE);
|
|
nditte.put("CODDITTA", firm);
|
|
nditte.read();
|
|
freq = nditte.get_char("FREQVIVA");
|
|
}
|
|
else
|
|
freq = lia.get_char("S7");
|
|
CHECK(freq == 'M' || freq == 'T', "Frequenza versamenti IVA assurda");
|
|
|
|
return freq;
|
|
}
|
|
|
|
|
|
bool TStampa_deleghe_IVA::print_deleghe()
|
|
{
|
|
bool ok = printer().open();
|
|
bool arng = FALSE;
|
|
TForm f(_profilo, (_codice != 0) ? format("%05ld",_codice) : "");
|
|
|
|
TCursor& cur = *f.cursor();
|
|
TLocalisamfile& delega = cur.file();
|
|
TString16 chiave;
|
|
|
|
for (int i = 0; ok && i < _ditte->items(); i++)
|
|
if (_ditte->checked(i))
|
|
{
|
|
TToken_string& r = _ditte->row(i);
|
|
|
|
const long firm = r.get_long(1);
|
|
chiave.format("%05ld%04d%02d%d", firm, _anno, _mese, _tipo);
|
|
delega.put("CODTAB", chiave);
|
|
|
|
cur.read(); // Posiziona il cursore
|
|
|
|
if (_pd.ok())
|
|
delega.put("D0",_pd);
|
|
|
|
const bool cera_abi = _azienda.empty() || _dipendenza.empty();
|
|
if (!cera_abi)
|
|
{
|
|
delega.put("S7", _azienda);
|
|
delega.put("S8", _dipendenza);
|
|
delega.rewrite();
|
|
cur.read();
|
|
}
|
|
const bool cera_conc = (*r.get(7) <= ' ') || delega.get("S9").not_empty();
|
|
if (!cera_conc)
|
|
delega.put("S9", r.get(7)); // Concessione
|
|
|
|
const bool cera_tribu = delega.get("S6").not_empty();
|
|
if (!cera_tribu) // Metti codice tributo
|
|
{
|
|
TString16 tributo;
|
|
switch(_tipo)
|
|
{
|
|
case 1:
|
|
if (frequenza_versamenti(firm, _anno) == 'T')
|
|
tributo << "603" << ((_mese-1)/3+1);
|
|
else
|
|
tributo << "60" << format("%02d", _mese);
|
|
break;
|
|
case 2:
|
|
tributo = "6099"; // Annuale
|
|
break;
|
|
case 7:
|
|
if (frequenza_versamenti(firm, _anno) == 'T')
|
|
tributo = "6035";
|
|
else
|
|
tributo = "6013";
|
|
break;
|
|
default:
|
|
tributo = "";
|
|
break;
|
|
}
|
|
delega.put("S6", tributo);
|
|
}
|
|
|
|
ok = f.print(-1); // Stampa solo il record corrente
|
|
if (!arng)
|
|
{ // Scopo di cio' e' far si' che esegua il
|
|
f.set_arrange(arng); // posizionamento solo la prima volta che chiama
|
|
arng = TRUE; // f.print()
|
|
}
|
|
if (!ok) break;
|
|
|
|
bool scrivi = _aggiorna_codici && (!cera_abi || !cera_conc || !cera_tribu);
|
|
|
|
if (_definitiva)
|
|
{
|
|
delega.put("B0", "X"); // Stampato
|
|
delega.put("D0", _pd);
|
|
scrivi = TRUE;
|
|
}
|
|
if (!_aggiorna_codici) // Cancella codici se non richiesti
|
|
{
|
|
if (!cera_abi)
|
|
{
|
|
delega.zero("S7");
|
|
delega.zero("S8");
|
|
scrivi = TRUE;
|
|
}
|
|
if (!cera_conc)
|
|
{
|
|
delega.zero("S9");
|
|
scrivi = TRUE;
|
|
}
|
|
if (!cera_tribu)
|
|
{
|
|
delega.zero("S6");
|
|
scrivi = TRUE;
|
|
}
|
|
}
|
|
if (scrivi)
|
|
delega.rewrite();
|
|
}
|
|
printer().close();
|
|
|
|
return ok;
|
|
}
|
|
|
|
|
|
int cg1400(int argc, char* argv[])
|
|
{
|
|
TStampa_deleghe_IVA a;
|
|
a.run(argc, argv, TR("Stampa Versamenti"));
|
|
return 0;
|
|
}
|