Files correlati : ve6.exe Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 patch 979 git-svn-id: svn://10.65.10.50/trunk@15623 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			225 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			225 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <automask.h>
 | ||
| #include <defmask.h>
 | ||
| #include <relapp.h>
 | ||
| #include <tabutil.h>
 | ||
| 
 | ||
| #include "li0.h"
 | ||
| #include "li0400a.h"
 | ||
| 
 | ||
| #include "letint.h"
 | ||
| 
 | ||
| //-------------------------------------------------------------------
 | ||
| //  MASCHERA (li0400a)
 | ||
| //-------------------------------------------------------------------
 | ||
| class TLetint_mask : public TAutomask
 | ||
| {      
 | ||
| protected:
 | ||
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | ||
| 	virtual bool on_key(KEY k);
 | ||
|  
 | ||
| public:
 | ||
| 	TDate ultima_stampa(int anno);
 | ||
| 	bool is_registro(int anno) { return ultima_stampa(anno) > botime;}
 | ||
|   TLetint_mask();
 | ||
| };
 | ||
| 
 | ||
| 
 | ||
| bool TLetint_mask::on_key(KEY k)
 | ||
| {
 | ||
| 	if (k == K_SHIFT+K_F12 && edit_mode())
 | ||
| 		enable(DLG_SAVEREC);
 | ||
| 	return TAutomask::on_key(k);
 | ||
| }
 | ||
| 
 | ||
| bool TLetint_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | ||
| {
 | ||
|   switch (o.dlg())
 | ||
|   {
 | ||
|   case F_ANNO:
 | ||
|     if (e == fe_modify || e == fe_init || e == fe_close)
 | ||
| 		{
 | ||
| 			if (!is_registro(atoi(o.get())))
 | ||
| 				return error_box(FR("Manca il registro dichiarazioni d'intento per l'anno %d"), atoi(o.get()));
 | ||
| 		}
 | ||
|   case F_NUMPROT:
 | ||
|     if (e == fe_close && query_mode())
 | ||
|     {
 | ||
|       const long numprot = get_long(F_NUMPROT);
 | ||
|       if (numprot > 1)
 | ||
|       {
 | ||
|         const int anno = get_int(F_ANNO);      
 | ||
|         TLocalisamfile letint(LF_LETINT);
 | ||
|         letint.put(LETINT_ANNO, anno);
 | ||
|         letint.put(LETINT_NUMPROT, numprot - 1);
 | ||
|         if (letint.read() != NOERR)
 | ||
|           return error_box(TR("Il numero di protocollo deve essere progressivo!"));
 | ||
|       }
 | ||
|     }
 | ||
|     break;
 | ||
|   case F_VSDATA:
 | ||
|     if (e == fe_modify)
 | ||
| 		{
 | ||
| 			const TDate datareg(o.mask().get(F_DATAREG));
 | ||
| 			const TDate dataem(o.get());
 | ||
| 			if (dataem > datareg)
 | ||
| 				return error_box(FR("Data di emissione %s superiore alla data di registrazione %s"), (const char *) dataem.string(),  (const char *) datareg.string());
 | ||
| 		}
 | ||
| 		break;
 | ||
| 	case F_DATAREG:
 | ||
|     if (e == fe_close && insert_mode())
 | ||
|     {
 | ||
|       const long numprot = get_long(F_NUMPROT);
 | ||
|       if (numprot > 1)
 | ||
|       {
 | ||
|         const int anno = get_int(F_ANNO);      
 | ||
|         TLocalisamfile letint(LF_LETINT);
 | ||
|         letint.put(LETINT_ANNO, anno);
 | ||
|         letint.put(LETINT_NUMPROT, numprot - 1);
 | ||
|         if (letint.read() == NOERR)
 | ||
|         {
 | ||
|           const TDate& old_data = letint.get_date(LETINT_DATAREG);
 | ||
|           if (get_date(F_DATAREG) < old_data)
 | ||
|             return error_box(TR("La data di registrazione non puo' essere antecedente a %s"), (const char*) old_data.string());
 | ||
|         }
 | ||
| 				TDate ultima = ultima_stampa(anno);
 | ||
|         if (get_date(F_DATAREG) <= ultima)
 | ||
| 	        return error_box(TR("La data di registrazione non puo' essere antecedente a %s"), (const char*) ultima.string());
 | ||
|       }
 | ||
|     }
 | ||
|     break;
 | ||
| 
 | ||
|   default:
 | ||
|     break;
 | ||
|   }  
 | ||
|   return true;
 | ||
| }
 | ||
| 
 | ||
| TDate TLetint_mask::ultima_stampa(int anno)
 | ||
| {
 | ||
| 	TTable reg("REG");
 | ||
| 	TDate ultima_stampa = botime;
 | ||
| 	TString s; s.format("%0d", anno);
 | ||
| 
 | ||
| 	reg.put("CODTAB", s);
 | ||
| 	for (int err = reg.read(_isgteq); s == reg.get("CODTAB").left(4) && err == NOERR; err = reg.next())
 | ||
| 	if (reg.get_int("I0") == 10)
 | ||
| 	{
 | ||
| 		ultima_stampa = reg.get_date("D3");
 | ||
| 		if (!ultima_stampa.ok())
 | ||
| 		{
 | ||
| 			ultima_stampa.set_day(1);
 | ||
| 			ultima_stampa.set_month(1);
 | ||
| 			ultima_stampa.set_year(anno);
 | ||
| 			--ultima_stampa;
 | ||
| 		}
 | ||
| 	}
 | ||
| 	return ultima_stampa;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| TLetint_mask::TLetint_mask() : TAutomask("li0400a") 
 | ||
| {
 | ||
|   first_focus(F_ANNO);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| //--------------------------------------------------------------
 | ||
| //  APPLICAZIONE
 | ||
| //--------------------------------------------------------------
 | ||
| class TLetint : public TRelation_application
 | ||
| { 
 | ||
|   TLetint_mask* _mask;
 | ||
|   TRelation* _rel;
 | ||
| 
 | ||
| protected:
 | ||
|   bool user_create();
 | ||
|   bool user_destroy();
 | ||
|   virtual TMask* get_mask(int mode) { return _mask; }
 | ||
|   virtual bool changing_mask(int mode) { return false; }
 | ||
| 	virtual bool protected_record(TRectype &rec);
 | ||
| 	virtual void init_modify_mode(TMask& m);
 | ||
| 
 | ||
|   virtual bool get_next_key(TToken_string& key);
 | ||
| 
 | ||
| public:
 | ||
|   // @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
 | ||
|   virtual bool check_autorization() const {return true;}
 | ||
| 
 | ||
|   virtual TRelation* get_relation() const {return (TRelation*)_rel;}
 | ||
| };
 | ||
| 
 | ||
| 
 | ||
| bool TLetint::get_next_key(TToken_string& key)
 | ||
| {
 | ||
|   TLocalisamfile& letint = _rel->lfile() ;
 | ||
|   long  numprot = 1L ;
 | ||
|   const int anno(_mask->get_int(F_ANNO)) ;
 | ||
|   
 | ||
|   if (!letint.empty())
 | ||
|   {
 | ||
|     letint.zero() ;
 | ||
|     letint.setkey(1) ;
 | ||
| 
 | ||
|     letint.put(LETINT_ANNO, anno);
 | ||
|     letint.read(_isgteq);
 | ||
|     if (letint.good())  //se e' tutto ok,si posiziona sull'ultimo record con l'anno selezionato
 | ||
|       letint.last();
 | ||
| 
 | ||
|     if (letint.good())
 | ||
|     {
 | ||
|       const int year(letint.get_int(LETINT_ANNO)); 
 | ||
|       if (year == anno)
 | ||
|         numprot += letint.get_long(LETINT_NUMPROT);
 | ||
|     }
 | ||
| 
 | ||
|   }                 
 | ||
|   key.format("%d|%d|%d|%ld", F_ANNO, anno, F_NUMPROT, numprot);
 | ||
|   return true;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| bool TLetint::protected_record(TRectype& rec)		//evita la cancellazione del record se STAMPATO
 | ||
| {
 | ||
|   bool prot = TRelation_application::protected_record(rec);
 | ||
|   if (!prot)
 | ||
|   {
 | ||
|     prot = rec.get_bool(LETINT_STAMPATO);
 | ||
|   }
 | ||
|   return prot;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| void TLetint::init_modify_mode(TMask& m)	//evita la registrazione di un record modificato se STAMPATO
 | ||
| {
 | ||
|   const TRectype& rec = get_relation()->curr();
 | ||
|   const bool stampato = rec.get_bool(LETINT_STAMPATO);
 | ||
| 	if (stampato)
 | ||
| 	{
 | ||
|     m.disable(DLG_SAVEREC);
 | ||
|     m.disable(DLG_DELREC);
 | ||
|     TString msg = TR("Dichiarazione gi<67> stampata sul registro dell'esercizio ");
 | ||
|     xvtil_statbar_set(msg);
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| bool TLetint::user_create()
 | ||
| {    
 | ||
|   _rel = new TRelation(LF_LETINT);
 | ||
|   _mask = new TLetint_mask;
 | ||
|   return true;
 | ||
| }
 | ||
| 
 | ||
| bool TLetint::user_destroy()
 | ||
| {             
 | ||
|   delete _mask;
 | ||
|   return true;
 | ||
| }
 | ||
| 
 | ||
| int li0400(int argc, char* argv[])
 | ||
| {
 | ||
|   TLetint a;
 | ||
|   a.run(argc, argv, TR("Lettere d'intento"));
 | ||
|   return 0;
 | ||
| }
 |