407 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			407 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <relapp.h>
 | |
| #include <defmask.h>
 | |
| 
 | |
| #include "cg0.h"
 | |
| #include "cg0100.h"
 | |
| 
 | |
| #include <pconti.h>
 | |
| 
 | |
| #include <saldi.h>
 | |
| 
 | |
| #define ATTIVITA 1
 | |
| #define PASSIVITA 2
 | |
| #define COSTI 3
 | |
| #define RICAVI 4
 | |
| #define ORDINE 5
 | |
| 
 | |
| class CG0100_application : public TRelation_application
 | |
| {
 | |
|   TMask* _msk;
 | |
|   TRelation *_rel;
 | |
|   TLocalisamfile* _saldi;
 | |
|   TLocalisamfile* _tabcom;
 | |
|   bool _pcon_com;
 | |
| 
 | |
|   bool user_create();
 | |
|   bool user_destroy();
 | |
|   virtual TMask* get_mask(int mode) {return _msk;}
 | |
|   virtual bool changing_mask(int mode) {return FALSE;}
 | |
|   virtual bool protected_record(TRectype &rec);
 | |
|   virtual void init_query_mode(TMask& m);
 | |
|   virtual void init_insert_mode(TMask& m);
 | |
|   virtual void init_modify_mode(TMask& m) {init_insert_mode(m);}
 | |
|   virtual int write(const TMask& m);
 | |
|   virtual int rewrite(const TMask & m);
 | |
|   virtual int read(TMask& m);
 | |
|   virtual void on_firm_change();
 | |
| 
 | |
| public:
 | |
|   virtual TRelation* get_relation() const {return _rel;}
 | |
|   CG0100_application() : _pcon_com(FALSE) {}
 | |
| };
 | |
| HIDDEN inline CG0100_application & app() { return (CG0100_application &) main_app();}
 | |
| 
 | |
| 
 | |
| int CG0100_application::read(TMask& m) 
 | |
| 
 | |
| {
 | |
|   const TRelation *r = get_relation();
 | |
|   m.autoload(*r);
 | |
|   if (m.get(FLD_CM1_LETTIVD).empty())
 | |
|   {
 | |
|     int sezivd = m.get_int(FLD_CM1_SEZIVD);
 | |
|     if (sezivd == 1 || sezivd == 2)
 | |
|       m.set(FLD_CM1_SEZIVD, sezivd + 5);
 | |
|   }
 | |
|   if (m.get(FLD_CM1_LETTIVDOPP).empty())
 | |
|   {
 | |
|     int sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
 | |
|     if (sezivd == 1 || sezivd == 2)
 | |
|       m.set(FLD_CM1_SEZIVDOPP, sezivd + 5);
 | |
|   }
 | |
|   return NOERR;
 | |
| }
 | |
| 
 | |
| int CG0100_application::rewrite(const TMask& m) 
 | |
| 
 | |
| {
 | |
|   TRelation *r = get_relation();
 | |
| 
 | |
|   m.autosave(*r);
 | |
|   int sezivd = m.get_int(FLD_CM1_SEZIVD);
 | |
|   TString16 sez;
 | |
|   
 | |
|   if (sezivd == 6 || sezivd == 7)
 | |
|   {
 | |
|     sez.format("%d", sezivd - 5);
 | |
|     r->lfile().put(PCN_SEZIVD, sez);
 | |
|   }         
 | |
|   sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
 | |
|   if (sezivd == 6 || sezivd == 7)
 | |
|   {
 | |
|     sez.format("%d", sezivd - 5);
 | |
|     r->lfile().put(PCN_SEZIVDOPP, sez);
 | |
|   }         
 | |
|   const int err = r->rewrite();
 | |
|   if (err == NOERR)
 | |
|   {
 | |
|     const long sottoconto = m.get_long(FLD_CM1_SOTTOCONTO);
 | |
|     if (sottoconto == 0)
 | |
|     {
 | |
|       const TString16 cod_anbi(m.get(FLD_CM1_CODTABANALISI));
 | |
|       
 | |
|       if (cod_anbi.not_empty())
 | |
|       {        
 | |
|         r->save_status();              
 | |
|         TLocalisamfile & pcon = r->lfile();                        
 | |
|         TRectype rec_pcon(r->curr()) ;
 | |
|         
 | |
|         rec_pcon.zero();
 | |
|         rec_pcon.put(PCN_GRUPPO, m.get(FLD_CM1_GRUPPO));
 | |
|         rec_pcon.put(PCN_CONTO, m.get(FLD_CM1_CONTO));
 | |
|         pcon.curr() = rec_pcon;
 | |
|         for (pcon.read(_isgreat, _lock); pcon.good() && pcon.curr() <= rec_pcon; pcon.next(_lock))
 | |
|         {
 | |
|           if (pcon.get(PCN_CODCBL).not_empty())
 | |
|           {
 | |
|             pcon.zero(PCN_CODCBL);
 | |
|             pcon.rewrite();
 | |
|           }
 | |
|         }
 | |
|         r->restore_status();
 | |
|       }                             
 | |
|     }
 | |
|   }
 | |
|   return err;
 | |
| }
 | |
| 
 | |
| int CG0100_application::write(const TMask& m) 
 | |
| 
 | |
| {
 | |
|   TRelation *r = get_relation();
 | |
|   TString16 sez;
 | |
| 
 | |
|   m.autosave(*r);
 | |
|   int sezivd = m.get_int(FLD_CM1_SEZIVD);
 | |
|   
 | |
|   if (sezivd == 6 || sezivd == 7)
 | |
|   {
 | |
|     sez.format("%d", sezivd - 5);
 | |
|     r->lfile().put(PCN_SEZIVD, sez);
 | |
|   }
 | |
|   sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
 | |
|   if (sezivd == 6 || sezivd == 7)
 | |
|   {
 | |
|     sez.format("%d", sezivd - 5);
 | |
|     r->lfile().put(PCN_SEZIVDOPP, sez);
 | |
|   }
 | |
|   return r->write();
 | |
| }
 | |
| 
 | |
| // Controlla se puo' essere effettuata la cancellazione di un conto
 | |
| void CG0100_application::on_firm_change()
 | |
| {
 | |
|   TDir d;
 | |
|   d.get(LF_PCON, _nolock, _nordir, _sysdirop);
 | |
|   _pcon_com = d.is_com();
 | |
| }
 | |
| 
 | |
| bool CG0100_application::protected_record(TRectype &rec)
 | |
| {                           
 | |
|   if (!_pcon_com )
 | |
|   {
 | |
|     TMask* m = get_mask(MODE_MOD);
 | |
|     TLocalisamfile& pconti = _rel->lfile();
 | |
|     const int gruppo = atoi(m->get(FLD_CM1_GRUPPO));
 | |
|     const int conto = atoi(m->get(FLD_CM1_CONTO));
 | |
|     const long  sottoc = atol(m->get(FLD_CM1_SOTTOCONTO));
 | |
|   
 | |
|     // Se e' un sottoconto posso cancellarlo se non esistono saldi
 | |
|     if ((gruppo != 0) && (conto != 0) && (sottoc != 0))
 | |
|     {
 | |
|       _saldi->zero();
 | |
|       _saldi->put(PCN_GRUPPO, gruppo);
 | |
|       _saldi->put(PCN_CONTO, conto);
 | |
|       _saldi->put(PCN_SOTTOCONTO, sottoc);
 | |
|       _saldi->read(_isgteq);
 | |
|       return _saldi->good() &&
 | |
|              gruppo ==_saldi->get_int(PCN_GRUPPO) &&
 | |
|              conto ==_saldi->get_int(PCN_CONTO) &&
 | |
|              sottoc ==_saldi->get_long(PCN_SOTTOCONTO) &&
 | |
|              (_saldi->get_real(SLD_SALDO) != ZERO || _saldi->get_real(SLD_PDARE) != ZERO ||
 | |
|               _saldi->get_real(SLD_PAVERE) != ZERO || _saldi->get_real(SLD_SALDOFIN) != ZERO ||
 | |
|               _saldi->get_real(SLD_PDAREPRO) != ZERO || _saldi->get_real(SLD_PAVEREPRO) != ZERO);
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       get_relation()->save_status();
 | |
|       pconti.zero() ;
 | |
|       pconti.put(PCN_GRUPPO, gruppo);
 | |
|       // Se e' un conto controllo se ha dei sottoconti
 | |
|       if (conto != 0)
 | |
|         pconti.put(PCN_CONTO, conto);
 | |
|       TRectype rec1(pconti.curr());
 | |
|     
 | |
|       pconti.setkey(1) ;
 | |
|       pconti.read();
 | |
|       pconti.next();
 | |
|       bool  prot = (pconti.good() && (pconti.curr() == rec1));
 | |
|       get_relation()->restore_status();
 | |
|       return prot;
 | |
|     }
 | |
|   }
 | |
|   return FALSE;
 | |
| }
 | |
| 
 | |
| void CG0100_application::init_query_mode(TMask& m)
 | |
| 
 | |
| {
 | |
| /*  m.show(-1);
 | |
|   m.show(-2);
 | |
|   m.show(-3); 
 | |
|   m.hide(FLD_CM2_STSOTTAB); 
 | |
| */
 | |
|   m.show_default();
 | |
|   m.hide(-3);
 | |
| }
 | |
| 
 | |
| HIDDEN bool tmcf_handler(TMask_field& f, KEY key)
 | |
| 
 | |
| {     
 | |
|   if (f.active() && key == K_SPACE)
 | |
|   {
 | |
|     TMask& m = f.mask();
 | |
|     const int conto = atoi(m.get(FLD_CM1_CONTO));
 | |
|     const long sottoc = atol(m.get(FLD_CM1_SOTTOCONTO));
 | |
|     const bool enable_sezsaldi = (sottoc != 0) || (sottoc == 0 && conto != 0 && m.get(FLD_CM1_TMCF).not_empty());
 | |
| 
 | |
|     m.show(FLD_CM2_SEZSALDI, enable_sezsaldi);
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| 
 | |
| void CG0100_application::init_insert_mode(TMask& m)
 | |
| 
 | |
| {
 | |
|   const int gruppo = atoi(m.get(FLD_CM1_GRUPPO));
 | |
|   const int conto = atoi(m.get(FLD_CM1_CONTO));
 | |
|   const long sottoc = atol(m.get(FLD_CM1_SOTTOCONTO));
 | |
|   bool ivd_enable = TRUE;
 | |
| 
 | |
|   m.show_default();
 | |
|   if (conto == 0 && sottoc == 0)  
 | |
|     m.hide(-1);
 | |
|   else
 | |
|     if (sottoc == 0)
 | |
|       m.hide(-2);
 | |
|     else           
 | |
|       m.hide(-3);
 | |
| 
 | |
|   TLocalisamfile& pconti = _rel->lfile();
 | |
|   TString s(15), s2(1), s3(8), s4(2);
 | |
|   int s1 = 0;
 | |
| 
 | |
|   pconti.setkey(1) ;
 | |
| 
 | |
|   int indbil = 0;
 | |
| 
 | |
|   if (sottoc != 0)
 | |
|   {
 | |
|     pconti.zero();
 | |
|     pconti.put(PCN_GRUPPO, gruppo);
 | |
|     pconti.put(PCN_CONTO, conto);
 | |
|     pconti.read();
 | |
|     if (pconti.good())
 | |
|     {
 | |
|       s = pconti.get(PCN_CODCBL);
 | |
|       s1 = atoi(pconti.get(PCN_SEZIVD));
 | |
|       s2 = pconti.get(PCN_LETTIVD);
 | |
|       s3 = pconti.get(PCN_NUMRIVD);
 | |
|       s4 = pconti.get(PCN_NUMIVD);
 | |
|       indbil = pconti.get_int(PCN_INDBIL);
 | |
|     }
 | |
|     ivd_enable =  (s1 == 0) && s2.empty() && s3.empty() && s4.empty();
 | |
|   }
 | |
|   m.show(FLD_CM1_RICSER, indbil == PASSIVITA || indbil == RICAVI);
 | |
|   if (conto != 0)
 | |
|   {
 | |
|     m.enable(FLD_CM1_SEZIVD, ivd_enable);
 | |
|     m.show(FLD_CM1_LETTIVD, ivd_enable);
 | |
|     m.show(FLD_CM1_NUMRIVD, ivd_enable);
 | |
|     m.show(FLD_CM1_NUMIVD, ivd_enable);
 | |
|     if (!ivd_enable)
 | |
|     {
 | |
|       m.set(FLD_CM1_SEZIVD, s1);
 | |
|       m.set(FLD_CM1_LETTIVDH, s2);
 | |
|       m.set(FLD_CM1_NUMRIVDH, s3);
 | |
|       m.set(FLD_CM1_NUMIVDH, s4);
 | |
|       m.enable(FLD_CM1_SEZIVDOPP);
 | |
|       m.disable(FLD_CM1_LETTIVDH);
 | |
|       m.disable(FLD_CM1_NUMRIVDH);
 | |
|       m.disable(FLD_CM1_NUMIVDH);
 | |
|     }
 | |
|     m.show(FLD_CM1_LETTIVDH, !ivd_enable);
 | |
|     m.show(FLD_CM1_NUMRIVDH, !ivd_enable);
 | |
|     m.show(FLD_CM1_NUMIVDH, !ivd_enable);
 | |
|     pconti.zero();
 | |
|     pconti.put(PCN_GRUPPO, gruppo);
 | |
|     pconti.read();
 | |
|     if (pconti.good()) 
 | |
|       if (s.empty()) s = pconti.get(PCN_CODCBL);
 | |
|   }
 | |
|   if (s.not_empty())
 | |
|   {
 | |
|     m.set(FLD_CM1_CODTABANALISI, s);
 | |
|     m.check_field(FLD_CM1_CODTABANALISI);
 | |
|     m.disable(FLD_CM1_CODTABANALISI);
 | |
|     m.disable(FLD_CM1_DESCRANALISI);
 | |
|   }
 | |
|   else
 | |
|   {
 | |
| 
 | |
|     m.enable(FLD_CM1_CODTABANALISI);
 | |
|     m.enable(FLD_CM1_DESCRANALISI);
 | |
|   }
 | |
|   const bool enable_sezsaldi = (sottoc != 0) || (sottoc == 0 && conto != 0 && m.get(FLD_CM1_TMCF).not_empty());
 | |
|   m.show(FLD_CM2_SEZSALDI, enable_sezsaldi);
 | |
| }
 | |
| 
 | |
| 
 | |
| HIDDEN bool gruppo_handler(TMask_field& f, KEY key)
 | |
| {
 | |
|   TMask& m    = f.mask();
 | |
|   const int gruppo  = m.get_int(FLD_CM1_GRUPPO);
 | |
|   const int conto   = m.get_int(FLD_CM1_CONTO);
 | |
|   const long sottoc = m.get_long(FLD_CM1_SOTTOCONTO);
 | |
|   
 | |
|   if (key == K_ENTER)
 | |
|   {
 | |
|     TLocalisamfile& pconti = app().get_relation()->lfile();
 | |
|     if (gruppo != 0 && conto != 0)
 | |
|     {
 | |
|       pconti.zero() ;
 | |
|       pconti.put(PCN_GRUPPO, gruppo) ;
 | |
|       pconti.setkey(1) ;
 | |
|       pconti.read();
 | |
|       if (pconti.bad())
 | |
|         return f.warning_box ("Il gruppo non esiste");
 | |
|     }
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| HIDDEN bool conto_handler(TMask_field& f, KEY key)
 | |
| {
 | |
|   TMask& m    = f.mask();
 | |
|   const int gruppo  = m.get_int(FLD_CM1_GRUPPO);
 | |
|   const int conto   = m.get_int(FLD_CM1_CONTO);
 | |
|   const long sottoc = m.get_long(FLD_CM1_SOTTOCONTO);
 | |
|   
 | |
|   if (key == K_ENTER)
 | |
|   {
 | |
|     TLocalisamfile& pconti = app().get_relation()->lfile();
 | |
| 
 | |
|     if (gruppo != 0 && conto != 0 && sottoc != 0)
 | |
|     {
 | |
|       pconti.zero() ;
 | |
|       pconti.put(PCN_GRUPPO, gruppo) ;
 | |
|       pconti.put(PCN_CONTO, conto) ;
 | |
|       pconti.setkey(1) ;
 | |
|       pconti.read();
 | |
|       if (pconti.bad())
 | |
|         return m.field(FLD_CM1_CONTO).warning_box ("Il conto non esiste");
 | |
|       else
 | |
|       {
 | |
|         if (pconti.get(PCN_TMCF).not_empty())
 | |
|           return m.field(FLD_CM1_SOTTOCONTO).warning_box ("Non e' possibile inserire un sottoconto di un conto relativo ad un cliente/fornitore");
 | |
|       }
 | |
|     }
 | |
|   } 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| HIDDEN bool sottoc_handler(TMask_field& f, KEY key)
 | |
| {
 | |
|   TMask& m    = f.mask();
 | |
|   if (m.query_mode() && key == K_TAB)
 | |
|   {                     
 | |
|     const int gruppo  = m.get_int(FLD_CM1_GRUPPO);
 | |
|     const int conto   = m.get_int(FLD_CM1_CONTO);
 | |
|     const long sottoc = m.get_long(FLD_CM1_SOTTOCONTO);
 | |
|     if (gruppo == 0) return TRUE;
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool CG0100_application::user_create()
 | |
| {
 | |
|   _msk = new TMask("cg0100a") ;
 | |
|   _msk->set_handler(FLD_CM1_GRUPPO, gruppo_handler);
 | |
|   _msk->set_handler(FLD_CM1_CONTO, conto_handler);
 | |
|   _msk->set_handler(FLD_CM1_SOTTOCONTO, sottoc_handler);
 | |
|   _msk->set_handler(FLD_CM1_TMCF, tmcf_handler);
 | |
| 
 | |
|   _rel = new TRelation(LF_PCON);
 | |
|   _saldi = new TLocalisamfile(LF_SALDI);
 | |
|   _saldi->setkey(2);
 | |
|   set_search_field(FH_SOTTOCONTO);
 | |
|   return TRUE;
 | |
| 
 | |
| }
 | |
| 
 | |
| bool CG0100_application::user_destroy()
 | |
| {
 | |
|   delete  _msk;
 | |
|   delete _rel;
 | |
|   delete _saldi;
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| int cg0100(int argc, char* argv[])
 | |
| {
 | |
|   CG0100_application a ;
 | |
|   a.run(argc, argv, "Piano dei conti");
 | |
|   return 0;
 | |
| }
 |