Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.2 1208 git-svn-id: svn://10.65.10.50/trunk@17100 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			265 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			265 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include "gvlib.h"
 | |
| 
 | |
| #include <diction.h>
 | |
| #include <relation.h>
 | |
| 
 | |
| #include "../cg/cg2101.h"
 | |
| #include "../cg/cglib02.h"
 | |
| 
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // TRigheF24_set
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| // 0=tutte 1=libere 2=assegnate 3=tutte
 | |
| TRigheF24_set::TRigheF24_set(int flags)
 | |
|              : TISAM_recordset("USE RIGHEF24 KEY 2")
 | |
| {
 | |
|   switch ((flags & 0x3) % 3)
 | |
|   {
 | |
|   case  1: set("USE RIGHEF24 KEY 2\nTO PROGR=999999"); break;
 | |
|   case  2: set("USE RIGHEF24 KEY 2\nFROM F24=1"); break;
 | |
|   default: break;
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // TF24_set
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| bool TF24_set::contabilizza(TLog_report & log) 
 | |
| {
 | |
| 	bool ok = true;
 | |
| 	TMovimentoPN mov;
 | |
| 	TSaldo_agg saldo;
 | |
| 	TEsercizi_contabili esc;
 | |
| 	long numreg = get(F24_NUMREG).as_int();
 | |
| 	const TDate datareg = get(F24_DATAVERS).as_date();
 | |
| 	const int codes = esc.date2esc(datareg);
 | |
| 	TString16 codbnp = get(F24_ABI).as_string();
 | |
| 	TString msg;
 | |
| 
 | |
| 	msg.format(FR("Distinta F24 n.ro %ld"), get(F24_F24).as_int());
 | |
| 	log.log(0, msg);
 | |
| 	codbnp << get(F24_CAB).as_string();
 | |
| 
 | |
| 	if (numreg > 0L)
 | |
| 	{
 | |
| 		msg.format(FR("Distinta già contabilizzata, reg. numero %ld"), numreg);
 | |
| 		log.log(1, msg);
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	if (mov.lfile().last() == NOERR)
 | |
|     numreg = mov.lfile().get_long(MOV_NUMREG);
 | |
| 	
 | |
| 	numreg++;
 | |
| 	mov.zero();
 | |
| 	mov.lfile().put(MOV_ANNOES, codes);
 | |
| 	mov.lfile().put(MOV_NUMREG, numreg);
 | |
| 	mov.lfile().put(MOV_DATAREG, datareg);
 | |
| 	mov.lfile().put(MOV_DATAREG, datareg);
 | |
| 	mov.lfile().put(MOV_DATACOMP, datareg);
 | |
| 	mov.lfile().put(MOV_DESCR, msg);
 | |
| 
 | |
| 	saldo.set_anno_es(codes);
 | |
|   saldo.set_tipo_saldo(normale);
 | |
|   saldo.set_movprovv(false);
 | |
|   saldo.set_movimentato(true);
 | |
|   saldo.set_data_ulmov(datareg);
 | |
|   saldo.set_num_ulmov (numreg);
 | |
| 
 | |
| 
 | |
| 	real totale;
 | |
| 	int nrow = 0;
 | |
| 
 | |
| 	for (bool cont = move_first(); ok && cont; cont = move_next())
 | |
| 	{
 | |
| 		const TString & codtrib = get(F24_TRIBUTO).as_string();
 | |
| 		const TRectype & trib = cache().get("%TRB", codtrib);
 | |
| 		const TBill c(trib.get_int("I0"), trib.get_int("I1"), trib.get_long("I2"));
 | |
| 
 | |
| 		ok = c.ok();
 | |
| 
 | |
| 		if (ok)
 | |
| 		{
 | |
| 			const real importo = get(F24_IMPORTODEB).as_real() - get(F24_IMPORTOCRE).as_real();
 | |
| 			
 | |
| 			if (importo > ZERO)
 | |
| 			{
 | |
| 				TRectype & cgrec = mov.cg(nrow++);
 | |
| 		
 | |
| 				cgrec.put(RMV_ANNOES, codes);
 | |
| 				cgrec.put(RMV_NUMREG, numreg);
 | |
| 				cgrec.put(RMV_NUMRIG, nrow);
 | |
| 				cgrec.put(RMV_DATAREG, datareg);
 | |
| 				cgrec.put(RMV_GRUPPO, c.gruppo());
 | |
| 				cgrec.put(RMV_CONTO, c.conto());
 | |
| 				cgrec.put(RMV_SOTTOCONTO, c.sottoconto());
 | |
| 				cgrec.put(RMV_SEZIONE, "D");
 | |
| 				cgrec.put(RMV_IMPORTO, importo);
 | |
| 				totale += importo;
 | |
| 				saldo.aggiorna(c, importo, 'D');
 | |
| 			}
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			msg.format("Tributo %s : Conto %d %d %ld assente", (const char *) codtrib, c.gruppo(), c.conto(), c.sottoconto());
 | |
| 			log.log(2, msg);
 | |
| 			return false;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if (totale > ZERO)
 | |
| 	{
 | |
| 		const TRectype & bnp = cache().get("BNP", codbnp);
 | |
| 		const TBill c(bnp.get_int("I9"), bnp.get_int("I10"), bnp.get_long("I11"));
 | |
| 
 | |
| 		ok = c.ok();
 | |
| 
 | |
| 		if (ok)
 | |
| 		{
 | |
| 			TRectype & cgrec = mov.cg(nrow++);
 | |
| 
 | |
| 			cgrec.put(RMV_ANNOES, codes);
 | |
| 			cgrec.put(RMV_NUMREG, numreg);
 | |
| 			cgrec.put(RMV_NUMRIG, nrow);
 | |
| 			cgrec.put(RMV_DATAREG, datareg);
 | |
| 			cgrec.put(RMV_GRUPPO, c.gruppo());
 | |
| 			cgrec.put(RMV_CONTO, c.conto());
 | |
| 			cgrec.put(RMV_SOTTOCONTO, c.sottoconto());
 | |
| 			cgrec.put(RMV_SEZIONE, "A");
 | |
| 			cgrec.put(RMV_IMPORTO, totale);
 | |
| 			saldo.aggiorna(c, totale, 'A');
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			msg.format(FR("Banca %s : Conto %d %d %ld assente"), (const char *) codbnp, c.gruppo(), c.conto(), c.sottoconto());
 | |
| 			log.log(2, msg);
 | |
| 			return false;
 | |
| 		}
 | |
| 		
 | |
| 		const int err = mov.write(true);
 | |
| 		
 | |
| 		if (err == NOERR)
 | |
| 		{
 | |
| 			TRelation & r = *relation();
 | |
| 			
 | |
| 			msg.format(FR("Movimento di prima nota %ld"), numreg);
 | |
| 			log.log(0, msg);
 | |
| 	    saldo.registra();
 | |
| 			for (bool cont = move_first(); ok && cont; cont = move_next())
 | |
| 			{
 | |
| 				r.curr().put(F24_NUMREG, numreg);
 | |
| 				r.rewrite();
 | |
| 			}
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			msg.format(FR("Scrittura movimento di prima nota %d"), err);
 | |
| 			log.log(2, msg);
 | |
| 			ok = false;
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 	else
 | |
| 		log.log(0 ,TR("Nessun movimento generato"));
 | |
| 
 | |
| 	return ok;
 | |
| }
 | |
| 
 | |
| TF24_set::TF24_set(long codice) 
 | |
|         : TISAM_recordset("USE RIGHEF24 KEY 2\nFROM F24=#DIST\nTO F24=#DIST")
 | |
| {
 | |
|   CHECKD(codice > 0, "Distinta ma sospetta:", codice);
 | |
|   set_var("#DIST", TVariant(codice));
 | |
| }
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // TElencoF24_set
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| const TElencoF24_set* TElencoF24_set::_currentF24 = NULL;
 | |
| 
 | |
| bool TElencoF24_set::f24killer(const TRelation* rel)
 | |
| {
 | |
|   // Il record e' buono se il bit corrispondente e' settato
 | |
|   return _currentF24->_good[rel->file().recno()]; 
 | |
| }
 | |
| 
 | |
| TCursor* TElencoF24_set::cursor() const
 | |
| {
 | |
|   _currentF24 = this;
 | |
| 
 | |
|   TCursor* c = TISAM_recordset::cursor();
 | |
|   if (c != NULL && c->filterfunction() == NULL)
 | |
|   {
 | |
|     TBit_array& goodies = ((TElencoF24_set*)this)->_good;
 | |
|     goodies.reset();
 | |
| 
 | |
|     long last = 0;
 | |
| 		TDate last_date(eotime);
 | |
| 		TRecnotype last_recno = 0L;
 | |
|     
 | |
|     TRecnotype tot = c->items();
 | |
|     const TRectype& curr = c->curr();
 | |
|     for (*c = 0; c->pos() < tot; ++*c)
 | |
|     {
 | |
|       const long f24 = curr.get_long(F24_F24);
 | |
| 			const TDate f24scad = curr.get_date(F24_DATASCAD);
 | |
|       bool good = f24 > last || (f24 == last && last_date > f24scad);
 | |
|       if (good)
 | |
|       {
 | |
|         if (_flags != 0) // Non voglio tutto?
 | |
|         {
 | |
|           const TDate inv = curr.get(F24_DATAVERS);
 | |
|           good = (_flags == 1) ^ inv.ok();
 | |
|         }
 | |
|         if (good)
 | |
| 				{
 | |
| 					const TRecnotype recno = c->file().recno();
 | |
| 
 | |
| 					if (f24 == last)
 | |
| 						goodies.reset(last_recno);
 | |
|           goodies.set(recno);
 | |
| 	        last = f24;
 | |
| 					last_date = f24scad;
 | |
| 					last_recno = recno;
 | |
| 				}
 | |
|       }
 | |
|     }
 | |
|     c->freeze(false);
 | |
|     c->set_filterfunction(f24killer);
 | |
|     tot = c->items();
 | |
|     c->freeze(true);
 | |
|   }
 | |
|   return c;
 | |
| }
 | |
| 
 | |
| // 0=tutte 1=da inviare 2=inviate 3=tutte
 | |
| TElencoF24_set::TElencoF24_set(int flags)
 | |
|               : TRigheF24_set(0x2)
 | |
| {
 | |
|   _flags = (flags & 0x3) % 3;  // isolo i flag = 1 o flag = 2
 | |
| }
 | |
| 
 | |
| long get_next_f24()
 | |
| {
 | |
|   long f24 = 1;
 | |
|   TRigheF24_set deleghe(0x2);
 | |
|   if (deleghe.move_last())
 | |
|     f24 += deleghe.get(F24_F24).as_int();
 | |
|   return f24;
 | |
| }
 | |
| 
 | |
| long get_next_progr_f24()
 | |
| {
 | |
| 	TLocalisamfile righef24(LF_RIGHEF24);
 | |
|   long next_progr = 1;
 | |
| 	
 | |
|   if (righef24.read(_islast) == NOERR)
 | |
|     next_progr += righef24.get_long(F24_PROGR);
 | |
| 	return next_progr;
 | |
| }
 |