315 lines
6.7 KiB
C++
315 lines
6.7 KiB
C++
|
#include <applicat.h>
|
||
|
#include <mask.h>
|
||
|
#include <relation.h>
|
||
|
#include <form.h>
|
||
|
#include <sheet.h>
|
||
|
#include <tabutil.h>
|
||
|
#include <utility.h>
|
||
|
|
||
|
#include <urldefid.h>
|
||
|
|
||
|
#include "cg1400.h"
|
||
|
|
||
|
class TStampa_deleghe_IVA : public TApplication
|
||
|
{
|
||
|
TArray_sheet* _ditte;
|
||
|
int _mese, _anno, _tipo;
|
||
|
TString _azienda, _dipendenza;
|
||
|
bool _stampa_distinte, _aggiorna_codici, _stampa_prova;
|
||
|
|
||
|
protected:
|
||
|
virtual bool create();
|
||
|
virtual bool destroy();
|
||
|
virtual bool menu(MENU_TAG);
|
||
|
virtual void print();
|
||
|
|
||
|
int select();
|
||
|
bool print_deleghe();
|
||
|
void print_distinta();
|
||
|
|
||
|
public:
|
||
|
TStampa_deleghe_IVA() : _ditte(NULL) {}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
bool TStampa_deleghe_IVA::create()
|
||
|
{
|
||
|
CHECK(_ditte == NULL, "Eh la vaca!");
|
||
|
_ditte = new TArray_sheet(-1, -1, 0, 0, "Selezione Deleghe da stampare" ,"@1|Cod.@5|Ragione Sociale@50|Importo@15|Azienda|Dipend.");
|
||
|
dispatch_e_menu(BAR_ITEM(1));
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
bool TStampa_deleghe_IVA::destroy()
|
||
|
{
|
||
|
delete _ditte;
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
int TStampa_deleghe_IVA::select()
|
||
|
{
|
||
|
{
|
||
|
TMask m("cg1400a");
|
||
|
if (m.run() != K_ENTER) return 0;
|
||
|
|
||
|
_azienda = m.get(F_ABI);
|
||
|
_dipendenza = m.get(F_CAB);
|
||
|
|
||
|
_mese = atoi(m.get(F_MESE));
|
||
|
_anno = atoi(m.get(F_ANNO));
|
||
|
_tipo = atoi(m.get(F_TIPO));
|
||
|
|
||
|
_stampa_prova = m.get_bool(F_PROVA);
|
||
|
_stampa_distinte = m.get_bool(F_DISTINTA);
|
||
|
_aggiorna_codici = m.get_bool(F_AGGIORNA);
|
||
|
|
||
|
TDate d(m.get(F_DATA));
|
||
|
printer().setdate(d);
|
||
|
}
|
||
|
|
||
|
TLocalisamfile nditte(LF_NDITTE);
|
||
|
|
||
|
TTable deleghe("%DEL");
|
||
|
|
||
|
TString chiave(16);
|
||
|
TToken_string d(80);
|
||
|
|
||
|
_ditte->destroy();
|
||
|
|
||
|
for (nditte.first(); !nditte.eof(); nditte.next())
|
||
|
{
|
||
|
const long dit = atol(nditte.get("CODDITTA"));
|
||
|
chiave = format("%05ld", dit);
|
||
|
chiave << format("%04d%02d%d", _anno, _mese, _tipo);
|
||
|
deleghe.put("CODTAB", chiave);
|
||
|
if (deleghe.read() == NOERR && deleghe.get_bool("B0") == FALSE) // Da stampare
|
||
|
{
|
||
|
d = " "; // Selezione
|
||
|
d.add(chiave.left(5)); // Codice ditta
|
||
|
d.add(nditte.get("RAGSOC")); // Ragione sociale
|
||
|
|
||
|
real importo(deleghe.get("R0"));
|
||
|
d.add(importo.string(".")); // Importo
|
||
|
|
||
|
const long az = atol(deleghe.get("I0"));
|
||
|
d.add(format("%05ld", az)); // Azienda
|
||
|
|
||
|
const long di = atol(deleghe.get("I1"));
|
||
|
d.add(format("%05ld", di)); // Dipendenza
|
||
|
|
||
|
_ditte->add(d);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (_ditte->items() > 0)
|
||
|
{
|
||
|
const bool ok = _ditte->run() == K_ENTER;
|
||
|
if (ok) enable_menu_item(M_FILE_PRINT);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
warning_box("Nessuna ditta ha deleghe da stampare");
|
||
|
return 2;
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
bool TStampa_deleghe_IVA::menu(MENU_TAG)
|
||
|
{
|
||
|
int s = 0;
|
||
|
while ((s = select()) != 0)
|
||
|
if (s == 1) print();
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
void TStampa_deleghe_IVA::print()
|
||
|
{
|
||
|
print_deleghe();
|
||
|
if (_stampa_distinte)
|
||
|
{
|
||
|
bool ok = yesno_box("Inserire il modulo continuo 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();
|
||
|
|
||
|
TLocalisamfile ditte(LF_NDITTE);
|
||
|
TRectype& ditta = ditte.curr();
|
||
|
|
||
|
TLocalisamfile anagrafiche(LF_ANAG);
|
||
|
TRectype& anag = anagrafiche.curr();
|
||
|
|
||
|
TLocalisamfile comuni(LF_COMUNI);
|
||
|
TRectype& comune = comuni.curr();
|
||
|
|
||
|
TTable banche("%BAN");
|
||
|
TRectype& banca = banche.curr();
|
||
|
|
||
|
TString codban(16);
|
||
|
if (_azienda.not_empty())
|
||
|
{
|
||
|
codban = _azienda; codban << _dipendenza;
|
||
|
banca.put("CODTAB", codban);
|
||
|
banche.read();
|
||
|
}
|
||
|
|
||
|
TPrintrow row;
|
||
|
|
||
|
if (atol(_azienda))
|
||
|
row.put(banca.get("S0"), 0);
|
||
|
row.put("DISTINTA DELEGHE DI VERSAMENTO", 60);
|
||
|
row.put("Data @>", 110);
|
||
|
row.put("Pag.@#", 124);
|
||
|
printer().setheaderline(0, row);
|
||
|
|
||
|
row.reset();
|
||
|
if (atol(_dipendenza))
|
||
|
row.put(banca.get("S1"), 0);
|
||
|
|
||
|
TString t(132);
|
||
|
t = "Dichiarazione ";
|
||
|
switch (_tipo)
|
||
|
{
|
||
|
case 2 : t << "annuale : "; break;
|
||
|
case 7 : t << "acconti IVA : "; break;
|
||
|
default: t << "periodica : " << _mese << '-'; break;
|
||
|
}
|
||
|
t << _anno;
|
||
|
row.put(t, 60);
|
||
|
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("Ditta", TAB_DITTA);
|
||
|
row.put("Sede" , TAB_SEDE);
|
||
|
row.put("Importo", TAB_IMPORTO+8);
|
||
|
row.put("Note", TAB_NOTE);
|
||
|
printer().setheaderline(3, row);
|
||
|
|
||
|
real totale;
|
||
|
|
||
|
for (int i = 0; i < _ditte->items(); i++)
|
||
|
if (_ditte->checked(i))
|
||
|
{
|
||
|
const TString cod(_ditte->row(i).get(1));
|
||
|
ditta.put("CODDITTA", cod);
|
||
|
ditte.read();
|
||
|
|
||
|
anag.put("TIPOA", ditta.get("TIPOA"));
|
||
|
anag.put("CODANAGR", ditta.get("CODANAGR"));
|
||
|
anagrafiche.read();
|
||
|
|
||
|
comune.put("STATO", anag.get("STATORF"));
|
||
|
comune.put("COM", anag.get("COMRF"));
|
||
|
comuni.read();
|
||
|
|
||
|
TParagraph_string dencom(comune.get("DENCOM"), 18);
|
||
|
|
||
|
row.reset();
|
||
|
row.put(ditta.get("RAGSOC"), TAB_DITTA);
|
||
|
row.put(dencom.get(), 52);
|
||
|
row.put(comune.get("PROVCOM"), TAB_PROV);
|
||
|
|
||
|
TString imp(_ditte->row(i).get(3));
|
||
|
row.put(imp, TAB_IMPORTO);
|
||
|
printer().print(row);
|
||
|
|
||
|
imp.strip(".");
|
||
|
real importo(imp);
|
||
|
totale += importo;
|
||
|
|
||
|
const char* r;
|
||
|
while ((r = dencom.get()) != NULL)
|
||
|
{
|
||
|
row.reset();
|
||
|
row.put(r, 52);
|
||
|
printer().print(row);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
row.reset();
|
||
|
printer().print(row);
|
||
|
row.put("@BTotale versamenti :", TAB_SEDE);
|
||
|
row.put(totale.string("###.###.###.###"), TAB_IMPORTO);
|
||
|
printer().print(row);
|
||
|
|
||
|
printer().close();
|
||
|
}
|
||
|
|
||
|
bool TStampa_deleghe_IVA::print_deleghe()
|
||
|
{
|
||
|
bool ok = printer().open();
|
||
|
if (!ok) return FALSE;
|
||
|
|
||
|
TFilename name;
|
||
|
name << "del" << _azienda;
|
||
|
TForm f(name);
|
||
|
|
||
|
for (int i = 0; ok && i < _ditte->items(); i++)
|
||
|
if (_ditte->checked(i))
|
||
|
{
|
||
|
const TString d(_ditte->row(i).get(1));
|
||
|
|
||
|
TRectype& delega = f.cursor()->curr();
|
||
|
|
||
|
TString chiave(16);
|
||
|
chiave = d; chiave << format("%04d%02d%d", _anno, _mese, _tipo);
|
||
|
delega.put("CODTAB", chiave);
|
||
|
|
||
|
f.cursor()->file()->read();
|
||
|
const bool cera = atoi(delega.get("S7")) != 0;
|
||
|
if (!cera)
|
||
|
{
|
||
|
delega.put("S7", _azienda);
|
||
|
delega.put("S8", _dipendenza);
|
||
|
f.cursor()->file()->rewrite();
|
||
|
}
|
||
|
f.cursor()->read(); // Posiziona il cursore
|
||
|
|
||
|
ok = f.print(-1); // Stampa solo il record corrente
|
||
|
if (!ok) break;
|
||
|
|
||
|
bool scrivi = _aggiorna_codici && !cera;
|
||
|
|
||
|
if (!_stampa_prova)
|
||
|
{
|
||
|
delega.put("B0", "X"); // Stampato
|
||
|
scrivi = TRUE;
|
||
|
}
|
||
|
if (!_aggiorna_codici && !cera) // Cancella codice se non richiesto
|
||
|
{
|
||
|
delega.put("S7", "");
|
||
|
delega.put("S8", "");
|
||
|
scrivi = TRUE;
|
||
|
}
|
||
|
if (scrivi)
|
||
|
f.cursor()->file()->rewrite();
|
||
|
}
|
||
|
printer().close();
|
||
|
|
||
|
return ok;
|
||
|
}
|
||
|
|
||
|
|
||
|
int cg1400(int argc, char* argv[])
|
||
|
{
|
||
|
TStampa_deleghe_IVA a;
|
||
|
a.run(argc, argv, "Stampa Deleghe IVA");
|
||
|
return 0;
|
||
|
}
|