Files correlati : Ricompilazione Demo : [ ] Commento :10.0 468 0001474: iban su banche aziendali Descrizione E' possibile lasciare a disposizione di chi ha il modulo vendite (e non il modulo effetti) il programma che permette di inserire le banche aziendali? Potrebbe servire anche a chi non ha gli effetti. git-svn-id: svn://10.65.10.50/trunk@19432 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			284 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			284 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| // --------------------------------------------------------------
 | |
| // fv:  cg0 -5 <tab>: gestione maschere contabilita'
 | |
| // --------------------------------------------------------------
 | |
| #include <saldi.h>
 | |
| #include <sheet.h>
 | |
| #include <tabapp.h>
 | |
| 
 | |
| #include "cgtbesc.h"
 | |
| #include "cgtbbnp.h"
 | |
| #include "cglib01.h"
 | |
| 
 | |
| class CGTTable_application : public TTable_application
 | |
| {  
 | |
|   // ------------- specifiche tabella esercizi ----                                            
 | |
|   static bool dataini_handler(TMask_field& f, KEY k);
 | |
|   static bool checkbut_handler(TMask_field& f, KEY k);
 | |
|   void check_sheet();
 | |
|   bool check_esercizio(TString& cod, TDate s1, TDate f1);
 | |
|   // --------------------------------------------
 | |
| 
 | |
| protected:     
 | |
|   virtual void init_query_insert_mode(TMask& m) ;             
 | |
|   virtual void init_insert_mode(TMask& m) ;
 | |
|   virtual void init_modify_mode(TMask& m) ;
 | |
|   virtual void init_query_mode (TMask&);
 | |
| 
 | |
|   virtual bool protected_record(TRectype & rec);
 | |
| 
 | |
|   virtual bool user_create();
 | |
|   virtual bool user_destroy();
 | |
| 
 | |
| public:
 | |
|   // @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
 | |
|   virtual bool check_autorization() const 
 | |
|   {return FALSE;}
 | |
|                                              
 | |
|   static CGTTable_application& app() { return (CGTTable_application&)main_app(); }                     
 | |
|                        
 | |
|   CGTTable_application() : TTable_application() {}
 | |
|   virtual ~CGTTable_application() {}
 | |
| }; 
 | |
| 
 | |
| bool CGTTable_application::protected_record(TRectype &rec)
 | |
| {                           
 | |
|   if (get_tabname() == "ESC")
 | |
|   {                                 
 | |
|      // cerca saldo con questo esercizio
 | |
|      const TString16 cod(rec.get("CODTAB")); 
 | |
|      TLocalisamfile saldi(LF_SALDI);
 | |
|      saldi.put(SLD_ANNOES, cod);         
 | |
|      // se ce n'e' uno non si puo' cancellare
 | |
|      if (saldi.read(_isgteq) == NOERR && cod == rec.get("CODTAB"))
 | |
|        return TRUE;
 | |
|   }  
 | |
|   return TTable_application::protected_record(rec);
 | |
| }
 | |
| 
 | |
| 
 | |
| void CGTTable_application::init_query_insert_mode(TMask& m) 
 | |
| {       
 | |
|   if (get_tabname() == "BNP")
 | |
|   {
 | |
|     m.show(F_CODICEABI);
 | |
|     m.show(F_CODICECAB);
 | |
|     m.field(F_CODICEABI).check_type(CHECK_REQUIRED);    
 | |
|     m.field(F_CODICECAB).check_type(CHECK_REQUIRED);
 | |
|     m.hide(F_ABI);
 | |
|     m.hide(F_CAB);  
 | |
|     m.field(F_ABI).check_type(CHECK_NONE);    
 | |
|     m.field(F_CAB).check_type(CHECK_NONE);
 | |
|   }  
 | |
| }        
 | |
| 
 | |
| void CGTTable_application::init_insert_mode(TMask& m) 
 | |
| {       
 | |
|   if (get_tabname() == "BNP")
 | |
|   {
 | |
|     m.show(F_CODICEABI);
 | |
|     m.show(F_CODICECAB);
 | |
|     m.field(F_CODICEABI).check_type(CHECK_REQUIRED);    
 | |
|     m.field(F_CODICECAB).check_type(CHECK_REQUIRED); 
 | |
|     m.hide(F_ABI);
 | |
|     m.hide(F_CAB);     
 | |
|     m.field(F_ABI).check_type(CHECK_NONE);    
 | |
|     m.field(F_CAB).check_type(CHECK_NONE);
 | |
|   }
 | |
| }
 | |
| 
 | |
| void CGTTable_application::init_modify_mode(TMask& m) 
 | |
| {       
 | |
|   if (get_tabname() == "BNP")
 | |
|   {
 | |
|     m.efield(F_IBAN_STATO).validate(K_TAB);
 | |
|   }
 | |
| }
 | |
| 
 | |
| void CGTTable_application::init_query_mode(TMask& m)
 | |
| {
 | |
|   TTable_application::init_query_mode(m);
 | |
|   if (get_tabname() == "BNP")
 | |
|   {
 | |
|     m.show(F_ABI); 
 | |
|     m.show(F_CAB); 
 | |
|     m.field(F_ABI).check_type(CHECK_REQUIRED);    
 | |
|     m.field(F_CAB).check_type(CHECK_REQUIRED); 
 | |
|     m.hide(F_CODICEABI);
 | |
|     m.hide(F_CODICECAB);    
 | |
|     m.field(F_CODICECAB).check_type(CHECK_NONE); 
 | |
|   }
 | |
| }
 | |
| 
 | |
| bool CGTTable_application::user_create()
 | |
| {             
 | |
|   bool ok = TTable_application::user_create();
 | |
|   if (ok)
 | |
|   {
 | |
|     if (get_tabname() == "ESC")
 | |
|     {
 | |
|       get_mask()->set_handler(F_DATAINI, dataini_handler);
 | |
|       get_mask()->set_handler(BUT_CHECK, checkbut_handler);
 | |
|     }
 | |
|   }  
 | |
|   return ok;
 | |
| }
 | |
| 
 | |
| bool CGTTable_application::user_destroy()
 | |
| {             
 | |
|   return TTable_application::user_destroy();
 | |
| }
 | |
| 
 | |
| 
 | |
| // - esercizi-specific --------------------------------------------------------
 | |
| 
 | |
| bool CGTTable_application::dataini_handler(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_ENTER && f.mask().is_running() && !f.mask().query_mode())   
 | |
|   {                        
 | |
|     TString16 cod = f.mask().get(F_ANNO);
 | |
|     TDate s1 = f.mask().get_date(F_DATAINI);
 | |
|     TDate f1 = f.mask().get_date(F_DATAFIN);
 | |
|     
 | |
|     return app().check_esercizio(cod, s1, f1);
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool CGTTable_application::check_esercizio(TString& cod, TDate s1, TDate f1)
 | |
| {                                                                                            
 | |
|   // -----------------------------------------------------------------------------------------
 | |
|   // chiamata prima di registrare. Controlla:
 | |
|   // - se non ci sono altri esercizi, ok;
 | |
|   // - se ce ne sono altri:
 | |
|   //    1) controllo non sovrapposizione date   
 | |
|   //    2) se ci sono es. con date inferiori, datainizio -1 deve essere = data fine altro es;
 | |
|   //    3) se ci sono es. con date superiori, datafine +1 deve essere = data inizio altro
 | |
|   // ---------------------------------------------------------------------------------------- 
 | |
|   
 | |
|   byte err = 0x00;  bool ret = TRUE;
 | |
|   TLocalisamfile& esc = get_relation()->lfile();
 | |
|   
 | |
|   bool basta1 = FALSE, basta2 = FALSE;
 | |
|   
 | |
|   for (esc.first(); !esc.eof(); esc.next())
 | |
|   {
 | |
|     if (esc.get("CODTAB") == cod) 
 | |
|       continue;                      
 | |
|                                                           
 | |
|     TDate s2 = esc.get_date("D0");
 | |
|     TDate f2 = esc.get_date("D1");
 | |
|     TDate s1d = s1; --s1d;
 | |
|     TDate s2d = s2; --s2d;
 | |
|              
 | |
|     // check sovrapposizione
 | |
|     if (s1 <= f2 && s2 <= f1)         
 | |
|       err |= 0x01;
 | |
|     else 
 | |
|     {
 | |
|       if (!basta1 && f1 < s2 && f1 != s2d)
 | |
|         err |= 0x02;
 | |
|       if (f1 < s2 && f1 == s2d)
 | |
|       {
 | |
|         err &= ~0x02;
 | |
|         basta1 = TRUE;
 | |
|       }
 | |
|       if (!basta2 && s1 > f2 && f2 != s1d)
 | |
|         err |= 0x04;
 | |
|       if (s1 > f2 && f2 == s1d)
 | |
|       {
 | |
|         err &= ~0x04;
 | |
|         basta2 = TRUE;
 | |
|       }
 | |
|     }
 | |
|   }             
 | |
|   
 | |
|   if (err) 
 | |
|   {         
 | |
|     ret = FALSE;
 | |
|     TString errstr(120); 
 | |
|     errstr << TR("Date esercizio errate: \n");
 | |
|     // build error string  
 | |
|     if (err & 0x01)
 | |
|       errstr << TR("\n - l'esercizio si sovrappone ad altro gia' esistente");
 | |
|     if (err & 0x02)
 | |
|       errstr << TR("\n - l'esercizio non e' contiguo ad esercizi successivi");
 | |
|     if (err & 0x04)
 | |
|       errstr << TR("\n - l'esercizio non e' contiguo ad esercizi precedenti"); 
 | |
| 
 | |
|     if (!(err & 0x01))      
 | |
|     {                         
 | |
|       errstr << TR("\nSi desidera registrare ugualmente?");
 | |
|       ret = yesno_box(errstr);  
 | |
|     }
 | |
|     else error_box(errstr); 
 | |
|   }
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| 
 | |
| void CGTTable_application::check_sheet()
 | |
| {
 | |
|   // crea 'nu bellu shit co'tutte le informazion e un messaggino
 | |
|   // di error se ce n'e' bisogn         
 | |
|   TLocalisamfile& esc = get_relation()->lfile();  
 | |
|   TArray escarr(10);
 | |
|   for (esc.first(); !esc.eof(); esc.next())
 | |
|     escarr.add(new TEsercizio(esc.curr()));  
 | |
| 
 | |
|   escarr.sort();
 | |
| 
 | |
|   TArray_sheet as(-1,-1,70,20,TR("Esercizi contabili"),
 | |
|                   FR("Codice|Inizio@10|Fine@10|Scarico@10|Chiusura@10|Note@20"),
 | |
| 
 | |
|                   
 | |
|                   0x10);
 | |
|   
 | |
|   TDate s1;
 | |
|   
 | |
|   for (int i = 0; i < escarr.items(); i++)  
 | |
|   {
 | |
|     // sovrapposti non possono essere, perche' non si possono
 | |
|     // registrare; possono solo esserci discontinuita'
 | |
|     TEsercizio& e = (TEsercizio&)escarr[i];
 | |
|     TToken_string* tt = new TToken_string(80);
 | |
|     tt->add(e.codice());
 | |
|     tt->add(e.inizio().string());
 | |
|     tt->add(e.fine().string());
 | |
|     tt->add(e.scarico().string());
 | |
|     tt->add(e.chiusura().string());
 | |
| 
 | |
|     if (i > 0 && e.inizio() != ++s1)
 | |
| 	{
 | |
| 	  TString nc; nc << "***" << TR("non contiguo") << "***";
 | |
|       tt->add(nc);
 | |
| 	}
 | |
| 
 | |
|     else tt->add("");
 | |
| 
 | |
|     s1 = e.fine();
 | |
|          
 | |
|     as.add(tt);
 | |
|   } 
 | |
|   
 | |
|   as.run();
 | |
| }
 | |
| 
 | |
| bool CGTTable_application::checkbut_handler(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_SPACE && f.mask().is_running()) 
 | |
|     app().check_sheet();
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| // -------------------------------------------------------------
 | |
| 
 | |
| int cg0600(int argc, char* argv[])
 | |
| {
 | |
|   CGTTable_application a;
 | |
| 
 | |
|   a.run(argc, argv, TR("Gestione tabelle contabili"));
 | |
|   return 0;
 | |
| }
 | |
| 
 | |
| 
 |