Files correlati : Ricompilazione Demo : [ ] Commento : Aggiunta traduzione a i cespiti git-svn-id: svn://10.65.10.50/trunk@11122 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			233 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			233 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | ||
| #include <automask.h>
 | ||
| #include <execp.h>
 | ||
| #include <progind.h>
 | ||
| #include <relation.h>
 | ||
| 
 | ||
| #include "celib.h"        
 | ||
| #include "ce2101.h"
 | ||
| #include "ce2400a.h"
 | ||
| 
 | ||
| #include "cespi.h"
 | ||
| #include "movce.h"
 | ||
| 
 | ||
| class TCesp_tras_mask : public TAutomask
 | ||
| { 
 | ||
| protected:
 | ||
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | ||
| 
 | ||
| protected:
 | ||
|   void fill_dates();
 | ||
| 
 | ||
| public:
 | ||
|   TCesp_tras_mask() : TAutomask("ce2400a") { }
 | ||
| };
 | ||
| 
 | ||
| void TCesp_tras_mask::fill_dates()
 | ||
| {  
 | ||
|   TSheet_field& s = sfield(F_DATE_CALC);
 | ||
|   TRelation rel("CCB");
 | ||
|   rel.add("%CAT", "CODTAB=CODTAB[5,10]");
 | ||
| 
 | ||
|   TString expr; 
 | ||
|   expr << "CODTAB[1,4]==" << get(F_ESERCIZIO);
 | ||
|   TCursor cur(&rel, expr);
 | ||
|   const long items = cur.items();
 | ||
|   cur.freeze();
 | ||
|   s.destroy();
 | ||
|   const TRectype& curr = rel.curr();
 | ||
|   const TRectype& cat = rel.curr(LF_TABCOM);
 | ||
|   bool some_empty = FALSE;
 | ||
|   for (cur = 0; cur.pos() < items; ++cur)
 | ||
|   {
 | ||
|     TToken_string& row = s.row(-1);
 | ||
|     const TString& data = curr.get("D0");
 | ||
|     some_empty |= data.blank();
 | ||
|     row.add(data);
 | ||
|     row.add(curr.get("CODTAB").mid(4,2));
 | ||
|     row.add(curr.get("CODTAB").mid(6,4));
 | ||
|     row.add(cat.get("S0"));
 | ||
|   }
 | ||
|   s.force_update();
 | ||
|   if (some_empty)
 | ||
|   {
 | ||
|     disable(F_CALC);
 | ||
|     set(F_CALC, "X");
 | ||
|   }
 | ||
|   else
 | ||
|     enable(F_CALC);
 | ||
| }
 | ||
| 
 | ||
| bool TCesp_tras_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | ||
| {
 | ||
|   switch(o.dlg())
 | ||
|   {              
 | ||
|   case F_ESERCIZIO:
 | ||
|     if (e == fe_init || e == fe_modify)
 | ||
|       fill_dates();
 | ||
|     break;
 | ||
|   case F_DATE_CALC:
 | ||
|     if (e == se_query_add || e == se_query_del)
 | ||
|       return FALSE;
 | ||
|     break;
 | ||
|   default: break;
 | ||
|   }
 | ||
|   return TRUE;
 | ||
| }
 | ||
| 
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| // Iteratori
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| 
 | ||
| typedef bool (*RecordHandler)(TRelation& rel, void* jolly);
 | ||
| 
 | ||
| unsigned long scan_cursor(TCursor& cur, RecordHandler rh, void* jolly)
 | ||
| {             
 | ||
|   unsigned long processed = 0;
 | ||
|   const long items = cur.items();
 | ||
|   if (items > 0)
 | ||
|   {
 | ||
|     TProgind* pi = items < 16 ? NULL : new TProgind(items, "Elaborazione in corso...");
 | ||
|   
 | ||
|     TRelation& rel = *cur.relation();
 | ||
|     cur.freeze();
 | ||
|     for (cur = 0; cur.pos() < items; ++cur)
 | ||
|     {     
 | ||
|       if (pi) 
 | ||
|         pi->addstatus(1);
 | ||
|       if (rh(rel, jolly))
 | ||
|         processed++;
 | ||
|     }
 | ||
|     
 | ||
|     if (pi)
 | ||
|       delete pi;
 | ||
|   }
 | ||
|   return processed;
 | ||
| }
 | ||
| 
 | ||
| unsigned long scan_file(int lf, RecordHandler rh, void* jolly)
 | ||
| {
 | ||
|   TRelation rel(lf);
 | ||
|   TCursor cur(&rel);
 | ||
|   return scan_cursor(cur, rh, jolly);
 | ||
| }
 | ||
| 
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| // Applicazione principale
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| 
 | ||
| class TCesp_tras : public TSkeleton_application
 | ||
| {
 | ||
| protected:
 | ||
|   virtual void main_loop();
 | ||
|   
 | ||
| public:  
 | ||
|   void calcolo(const TMask& m);
 | ||
|   void trasferimento(const TMask& m);
 | ||
| };
 | ||
| 
 | ||
| void TCesp_tras::calcolo(const TMask& m)
 | ||
| {                                
 | ||
|   TExternal_app a("ce2 -0 A");
 | ||
|   
 | ||
|   TSheet_field& s = m.sfield(F_DATE_CALC);
 | ||
|   for (int i = 0; i < s.items(); i++)
 | ||
|   {                    
 | ||
|     TToken_string& row = s.row(i);
 | ||
|     const int anno = m.get_int(F_ESERCIZIO);
 | ||
|     const int gruppo = row.get_int(1);
 | ||
|     const TString4 specie = row.get();
 | ||
|     ditta_cespiti().set_attivita(anno, gruppo, specie);
 | ||
|     a.run();
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| struct TTras_data
 | ||
| { 
 | ||
|   int _anno;
 | ||
|   TDate _inizio, _fine;
 | ||
|   const TCespite* _cespite;
 | ||
| };
 | ||
| 
 | ||
| static bool MovHandler(TRelation& rel, void* jolly)
 | ||
| {      
 | ||
|   const TTras_data& data = *(const TTras_data*)jolly;
 | ||
|   const TRectype& movce = rel.curr();
 | ||
|   
 | ||
|   if (movce.get_bool(MOVCE_STAMPATO))  // Salta i movimenti gi<67> stampati su bollato
 | ||
|     return FALSE;
 | ||
|   
 | ||
|   const TDate dtmov = movce.get(MOVCE_DTMOV);
 | ||
|   const TDate dtacq = data._cespite->get(CESPI_DTCOMP);
 | ||
|   if (dtmov < dtacq)  // Ignora movimenti precedenti l'acquisizione del cespite
 | ||
|     return FALSE;
 | ||
| 
 | ||
|   return TRUE;
 | ||
| }
 | ||
| 
 | ||
| static bool CespHandler(TRelation& rel, void* jolly)
 | ||
| {      
 | ||
|   const TCespite cespite(rel.curr());
 | ||
| 
 | ||
|   TTras_data& data = *(TTras_data*)jolly;
 | ||
|   data._cespite = &cespite; // Inizializza cespite corrente
 | ||
| 
 | ||
|   const TDate dtalien = cespite.get(CESPI_DTALIEN);
 | ||
|   if (dtalien.ok() && dtalien < data._inizio) // Escludi cespiti alienati
 | ||
|     return FALSE;
 | ||
| 
 | ||
|   const TDate dtcomp = cespite.get(CESPI_DTCOMP);
 | ||
|   if (!dtcomp.ok() || dtcomp > data._fine) // Escludi cespiti non in funzione
 | ||
|     return FALSE;
 | ||
|     
 | ||
|   const TRectype& cat = cespite.categoria();
 | ||
|   if (cat.get_bool("B0")) // Categoria non ammortizzabile
 | ||
|     return FALSE;
 | ||
|     
 | ||
|   // Scansione di tutti i movimenti dell'anno relativi al cespite corrente
 | ||
|   TRelation rel_movce(LF_MOVCE);
 | ||
|   rel_movce.add(LF_MOVAM, "IDCESPITE==IDCESPITE|IDMOV==IDMOV|TPAMM==1"); // Solo situazione fiscale
 | ||
|   rel_movce.add(LF_AMMMV, "IDCESPITE==IDCESPITE|IDMOV==IDMOV|TPAMM==1");
 | ||
|   TRectype& movce = rel_movce.curr();
 | ||
|   movce.put(MOVCE_IDCESPITE, cespite.get(CESPI_IDCESPITE));
 | ||
|   TString expr; 
 | ||
|   expr << "(ANSI(DTMOV)>=" << data._inizio.string(ANSI) << ")&&";
 | ||
|   expr << "(ANSI(DTMOV)<=" << data._fine.string(ANSI) << ")";
 | ||
|   TCursor cur_movce(&rel_movce, expr, 1, &movce, &movce);
 | ||
|   scan_cursor(cur_movce, MovHandler, jolly);
 | ||
| 
 | ||
|   return TRUE;
 | ||
| }
 | ||
| 
 | ||
| void TCesp_tras::trasferimento(const TMask& m)
 | ||
| { 
 | ||
|   TTras_data data;
 | ||
|   data._anno = m.get_int(F_ESERCIZIO);
 | ||
|   data._inizio = m.get(F_INIZIO_ES);
 | ||
|   data._fine = m.get(F_FINE_ES);
 | ||
|   
 | ||
|   scan_file(LF_CESPI, CespHandler, &data);
 | ||
| }
 | ||
| 
 | ||
| void TCesp_tras::main_loop()
 | ||
| { 
 | ||
|   TDitta_cespiti& dc = ditta_cespiti(); 
 | ||
|   TCesp_tras_mask m;
 | ||
|   dc.init_mask(m);
 | ||
|   
 | ||
|   if (m.run() == K_ENTER)
 | ||
|   {
 | ||
|     if (m.get_bool(F_CALC))
 | ||
|       calcolo(m);
 | ||
|     trasferimento(m);
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| int ce2400(int argc, char* argv[])
 | ||
| {
 | ||
|   TCesp_tras a;
 | ||
|   a.run(argc, argv, TR("Trasferimento movimenti"));
 | ||
|   return 0;
 | ||
| }
 |