315 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			315 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#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;
 | 
						|
}
 |