BUTTON inutili con il mitico FLAG "B" nel campo relativo. git-svn-id: svn://10.65.10.50/trunk@3050 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			572 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			572 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| //Visualizzazione liquidazione acconti
 | |
| #include <applicat.h>
 | |
| #include <mask.h>
 | |
| #include <tabutil.h> 
 | |
| #include <relation.h>
 | |
| #include <sheet.h>
 | |
| #include <urldefid.h>
 | |
| #include <prefix.h>
 | |
| #include <printer.h>
 | |
| #include <progind.h>
 | |
| #include <utility.h>
 | |
| #include <config.h>
 | |
| #ifndef __CGLIB03_H
 | |
| #include "cglib03.h"
 | |
| #endif
 | |
| #include "cg4900.h"
 | |
| 
 | |
| 
 | |
| class LiqAcc_app : public TApplication
 | |
| {
 | |
|   TRelation*    _nditte;
 | |
|   TArray_sheet* _ditte;
 | |
|   TArray        _nomiditte;
 | |
|   TMask*        _mask;
 | |
|   TTable*       _lia,* _lam;  
 | |
|   
 | |
|   int       _year;
 | |
|   long      _ditta;
 | |
|   bool      _registra;         
 | |
|   TString16 _tipo_acc;
 | |
|   
 | |
| protected:               
 | |
|   virtual bool create(); 
 | |
|   virtual bool destroy();
 | |
|   virtual bool menu(MENU_TAG);
 | |
|   
 | |
|   // handlers             
 | |
|   static bool set_ditta(TMask_field&, KEY);
 | |
|   static bool set_ragsoc(TMask_field&, KEY);
 | |
|   static bool ch_year_handler(TMask_field& f, KEY key);
 | |
|   static bool msk_risul(TMask_field& f, KEY key);
 | |
|   static bool msk_hide(TMask& m, KEY key);
 | |
| 
 | |
| public:                                                  
 | |
| 
 | |
|   static LiqAcc_app& app() { return (LiqAcc_app&)main_app(); }
 | |
|   void build_ditte_sheet();
 | |
|   void build_nomiditte();
 | |
|   void reset_fields();
 | |
|   bool vis_acc();
 | |
|   bool video_vis();
 | |
|   bool select_butt(TMask& m);
 | |
|   
 | |
|   LiqAcc_app() : _ditte(NULL), _nomiditte(100), _registra(FALSE) {}
 | |
| };
 | |
| 
 | |
| bool LiqAcc_app::create()
 | |
| { 
 | |
|   TApplication::create(); 
 | |
| 
 | |
|   TDate oggi(TODAY);                    
 | |
|   _year = oggi.year();
 | |
|   _nditte = new TRelation(LF_NDITTE);
 | |
|   _ditte  = new TArray_sheet(-1, -1, -4, -4, "Selezione Ditte",
 | |
|                              "Cod.@5|Ragione Sociale@50|Vers.");  
 | |
|   
 | |
|   _lia = new TTable("%LIA");  
 | |
|   _lam = new TTable("LAM");  
 | |
|   
 | |
|   begin_wait();
 | |
|   build_nomiditte();
 | |
|   build_ditte_sheet();
 | |
|   end_wait();
 | |
|   
 | |
|   dispatch_e_menu(BAR_ITEM(1));
 | |
|   
 | |
|   return TRUE; 
 | |
| }
 | |
| 
 | |
| bool LiqAcc_app::destroy()
 | |
| {                                  
 | |
|   delete _lia;
 | |
|   delete _ditte;
 | |
|   delete _nditte;
 | |
|   
 | |
|   return TApplication::destroy();
 | |
| }
 | |
| 
 | |
| // handlers 
 | |
| bool LiqAcc_app::msk_hide(TMask& m,KEY k)
 | |
| {
 | |
|   if (k == K_SHIFT+K_F7)  //&& app()._registra)
 | |
|   {
 | |
|     TMask m1("cg4900d");
 | |
|     m1.field(F_TIPO).set(app()._tipo_acc);
 | |
|     for (bool stop1 = FALSE; !stop1;)
 | |
|     {
 | |
|       KEY k1 = m1.run();
 | |
|       switch(k1)
 | |
|       {
 | |
|       case K_ESC: 
 | |
|       case K_QUIT: 
 | |
|         if (m1.dirty())
 | |
|         {
 | |
|           KEY k = yesnocancel_box("Registrazione modifiche effettuate?");
 | |
|           if (k ==  K_YES)
 | |
|           {
 | |
|             TString16 tipo (m1.get(F_TIPO));
 | |
|             TTable lia ("%LIA");
 | |
|             TString16 y; y.format("%05ld%04d", app()._ditta, app()._year);
 | |
|             lia.zero();
 | |
|             lia.put("CODTAB", y);
 | |
|             if (lia.read() != NOERR)   
 | |
|               return FALSE; 
 | |
|             lia.put("S8", tipo);
 | |
|             lia.rewrite(); 
 | |
|           } 
 | |
|           if (k == K_YES || k == K_NO) 
 | |
|             stop1 = TRUE;
 | |
|           break;  
 | |
|         } 
 | |
|         else stop1 = TRUE;
 | |
|         break;      
 | |
|       case K_SAVE:     
 | |
|         if (m1.dirty())
 | |
|         {
 | |
|           TString16 tipo (m1.get(F_TIPO));
 | |
|           TTable lia ("%LIA");
 | |
|           TString16 y; y.format("%05ld%04d", app()._ditta, app()._year);
 | |
|           lia.zero();
 | |
|           lia.put("CODTAB", y);
 | |
|           if (lia.read() != NOERR)   
 | |
|             return FALSE;
 | |
|           lia.put("S8", tipo);
 | |
|           lia.rewrite();
 | |
|         } 
 | |
|         break;
 | |
|       } //switch
 | |
|     } //for    
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool LiqAcc_app::msk_risul(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_TAB && f.focusdirty())
 | |
|   {
 | |
|     real iva_ven(f.mask().get(F_IVAVEN));
 | |
|     real iva_red(f.mask().get(F_IVARED));
 | |
|     real iva_rim(f.mask().get(F_IVARIM));
 | |
|     real non_fat(f.mask().get(F_NONFAT));
 | |
|     real non_ann(f.mask().get(F_NONANN));        
 | |
|     
 | |
|     real risven = ZERO;
 | |
|     risven = iva_ven + iva_red + iva_rim + non_fat + non_ann;
 | |
|     real risacq (f.mask().get(F_RISACQ));
 | |
|     if (risacq - risven < ZERO) 
 | |
|     {
 | |
|       f.mask().show(F_IVADEB);
 | |
|       f.mask().hide(F_IVACRE);
 | |
|     }
 | |
|     else if (risacq - risven > ZERO)
 | |
|     {
 | |
|       f.mask().hide(F_IVADEB);
 | |
|       f.mask().show(F_IVACRE);
 | |
|     }   
 | |
|     else
 | |
|     {
 | |
|       f.mask().hide(F_IVADEB);
 | |
|       f.mask().hide(F_IVACRE);
 | |
|     }
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool LiqAcc_app::set_ditta(TMask_field& f, KEY k)
 | |
| {                               
 | |
|   bool found = TRUE;
 | |
| 
 | |
|   if (k == K_F9)
 | |
|     return app().select_butt(f.mask());
 | |
| 
 | |
|   if (k == K_TAB && f.focusdirty())
 | |
|   {
 | |
|     found = FALSE;
 | |
|     TString ditta = f.get();
 | |
|     for (int i = 0; i < app()._ditte->items(); i++)
 | |
|     { 
 | |
|       TToken_string& row = app()._ditte->row(i);
 | |
|       if (ditta == row.get(0))
 | |
|       { 
 | |
|         if (app()._ditte->row_enabled(i))
 | |
|         {
 | |
|           f.mask().field(F_CODDITTA).set(row.get(0));
 | |
|           f.mask().field(F_RAGSOC).set(row.get(1));
 | |
|           found = TRUE;
 | |
|         }
 | |
|         else 
 | |
|         { 
 | |
|           warning_box("Non sono definiti i parametri liquidazione per la ditta %ld",
 | |
|                       atol(ditta));
 | |
|           f.reset(); 
 | |
|         }
 | |
|         break;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   if (!found) f.reset(); 
 | |
|   return found;
 | |
| }
 | |
| 
 | |
| bool LiqAcc_app::set_ragsoc(TMask_field& f, KEY k)
 | |
| {   
 | |
|   bool found = TRUE;
 | |
| 
 | |
|   if (k == K_F9)
 | |
|     return app().select_butt(f.mask());
 | |
| 
 | |
|   if (k == K_TAB && f.focusdirty())
 | |
|   {
 | |
|     found = FALSE;
 | |
|     TString ditta = f.get();
 | |
|     for (int i = 0; i < app()._ditte->items(); i++)
 | |
|     { 
 | |
|       TToken_string& row = app()._ditte->row(i);
 | |
|       TString ts(row.get(1));
 | |
|       if (ts.find(ditta) != -1)
 | |
|       { 
 | |
|         if (app()._ditte->row_enabled(i))
 | |
|         {
 | |
|           f.mask().field(F_CODDITTA).set(row.get(0));
 | |
|           f.mask().field(F_RAGSOC).set(row.get(1));
 | |
|           found = TRUE;
 | |
|           break;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   } 
 | |
|   if (!found) f.reset(); 
 | |
|   return found;  
 | |
| }
 | |
| 
 | |
| bool LiqAcc_app::ch_year_handler(TMask_field& f, KEY key)
 | |
| {                                                    
 | |
|   if (key == K_TAB && f.focusdirty())
 | |
|   {                         
 | |
|     app().begin_wait();
 | |
|     app()._year = atoi(f.get());
 | |
|     app().build_nomiditte();
 | |
|     app().build_ditte_sheet();  
 | |
|     app().reset_fields();  
 | |
|     app().end_wait();
 | |
|   }
 | |
|   return TRUE;
 | |
| } 
 | |
| 
 | |
| void LiqAcc_app::build_ditte_sheet()
 | |
| {
 | |
|   // build sheet
 | |
|   _ditte->destroy();
 | |
|   for (int i = 0; i < _nomiditte.items(); i++)
 | |
|   {
 | |
|     TToken_string* d = new TToken_string(64);
 | |
|     *d = (TToken_string&)_nomiditte[i];
 | |
|     const char vers = d->get_char(2);
 | |
|     bool selectable = vers == '?';
 | |
|     const long pos = _ditte->add(d);     
 | |
|     if (selectable)  _ditte->disable_row(pos);
 | |
|   }     
 | |
| }
 | |
| 
 | |
| void LiqAcc_app::reset_fields()
 | |
| {
 | |
|   _mask->field(F_CODDITTA).set("");
 | |
|   _mask->field(F_RAGSOC).set("");
 | |
| }
 | |
| 
 | |
| bool LiqAcc_app::select_butt(TMask& m)
 | |
| {
 | |
|   if (_ditte->run() == K_ENTER)
 | |
|   {
 | |
|     TToken_string& row = _ditte->row(_ditte->selected()); 
 | |
|     m.field(F_CODDITTA).set(row.get(0));
 | |
|     m.field(F_RAGSOC).set(row.get(1));
 | |
|     return TRUE;        
 | |
|   }
 | |
|   return FALSE;
 | |
| }
 | |
| 
 | |
| void LiqAcc_app::build_nomiditte()
 | |
| {                 
 | |
|   _nomiditte.destroy();
 | |
|   // ricostruire _nomiditte e rifare build_ditte_sheet
 | |
|   TLocalisamfile& dt = _nditte->lfile();
 | |
|   TString fr(2);
 | |
|   TTable lia("%LIA");
 | |
| 
 | |
|   for (dt.first(); !dt.eof(); dt.next())
 | |
|   {     
 | |
|     // check no archivi
 | |
|     fr = "??";
 | |
|     bool good = prefix().exist(dt.get_long("CODDITTA"));                        
 | |
|     
 | |
|     if (good) 
 | |
|     {   
 | |
|       // check no parametri liquidazione                                               
 | |
|       lia.put("CODTAB", format("%05ld%d",dt.get_long("CODDITTA"),_year));
 | |
|       if (lia.read() != NOERR) good = FALSE; 
 | |
|       else fr = lia.get("S7");
 | |
|     }
 | |
|     else continue;
 | |
| 
 | |
|     TToken_string* d = new TToken_string(64);
 | |
|     
 | |
|     // add record 
 | |
|     d->add(dt.get("CODDITTA"));
 | |
|     d->add(dt.get("RAGSOC"));
 | |
|     d->add(fr);
 | |
|     
 | |
|     _nomiditte.add(d);  
 | |
|   }
 | |
| }
 | |
| 
 | |
| bool LiqAcc_app::menu(MENU_TAG m)
 | |
| {
 | |
|   if (m == BAR_ITEM(1))
 | |
|     return vis_acc();       
 | |
|   
 | |
|   return TApplication::menu(m);
 | |
| }
 | |
| 
 | |
| bool LiqAcc_app::vis_acc()
 | |
| {               
 | |
|   long ditta = get_firm();
 | |
|   
 | |
|   TMask m("cg4900a");  
 | |
| 
 | |
|   KEY k;
 | |
|   _mask = &m;
 | |
|   
 | |
|   m.set_handler(F_CODDITTA, set_ditta);   
 | |
|   m.set_handler(F_RAGSOC,   set_ragsoc);   
 | |
|   m.set_handler(F_YEAR,     ch_year_handler);   
 | |
| 
 | |
|   while ((k = m.run()) != K_ESC)
 | |
|   { 
 | |
|     if (k == K_ENTER)
 | |
|     { 
 | |
|       if (m.get(F_CODDITTA).empty() || m.get(F_RAGSOC).empty())  
 | |
|       { 
 | |
|         beep();
 | |
|         continue;
 | |
|       }
 | |
|       _ditta = m.get_long(F_CODDITTA); 
 | |
|       _year = m.get_int(F_YEAR);
 | |
|       set_firm(_ditta);
 | |
|       video_vis();
 | |
|     }
 | |
|   } 
 | |
|   _mask = NULL;
 | |
|   set_firm(ditta);
 | |
|   
 | |
|   return FALSE;
 | |
| }    
 | |
| 
 | |
| bool LiqAcc_app::video_vis()
 | |
| {                                               
 | |
|   TTable lia ("%LIA");
 | |
|   TString16 y; y.format("%05ld%04d", _ditta, _year);
 | |
|   lia.zero();
 | |
|   lia.put("CODTAB", y);
 | |
|   if (lia.read() != NOERR)   //da verificare se e' giusto
 | |
|     return FALSE;           
 | |
|   
 | |
|   TConfig cnf(CONFIG_DITTA, "cg");
 | |
|   bool liqdiff = cnf.get_bool("GeLiDi");  
 | |
|   _tipo_acc = lia.get("S8");
 | |
|   TString16 freqviva = lia.get("S7");
 | |
|   TInteressi_IVA_table ver;
 | |
|   if (ver.read(_year,12)!=NOERR)
 | |
|     warning_box("Errore %d in lettura tabella versamenti ed interessi.",ver.status());
 | |
|   real acconto_min_da_versare = ver.get(I_ACCONTOIVA);
 | |
|   real acconto = ZERO;
 | |
|   real iva_ven = ZERO;
 | |
|   real iva_acq = ZERO;  
 | |
|   real iva_ret = ZERO;
 | |
|   real iva_rim = ZERO;
 | |
|   real ult_det = ZERO;
 | |
|   real per_pro = ZERO;   
 | |
|   real non_fat = ZERO;
 | |
|   real non_ann = ZERO;
 | |
|   real risven  = ZERO;
 | |
|   real risacq  = ZERO;
 | |
|   real diff = ZERO;
 | |
|   
 | |
|   acconto = lia.get_real("R4");
 | |
|   iva_ven = lia.get_real("R7");
 | |
|   iva_acq = lia.get_real("R8");  
 | |
|   iva_ret = lia.get_real("R9");
 | |
|   iva_rim = lia.get_real("R10");
 | |
|   ult_det = lia.get_real("R11");
 | |
|   per_pro = lia.get_real("R12");   
 | |
|   non_fat = lia.get_real("R13");
 | |
|   non_ann = lia.get_real("R14");
 | |
|   
 | |
|   TToken_string ff(lia.get("S1"),'!');
 | |
|   real cre_pre (ff.get(0));
 | |
|   real acq_intr (ff.get(1));
 | |
|   
 | |
|   // mask diverse per liq. differita oppure no
 | |
|   TMask m(liqdiff ? "cg4900c" : "cg4900b");  
 | |
|   
 | |
|   m.field(F_IVAVEN).set(iva_ven.string());
 | |
|   if (!liqdiff) 
 | |
|   {
 | |
|     m.field(F_NONFAT).set(non_fat.string());
 | |
|     m.field(F_NONANN).set(non_ann.string());    
 | |
|   }
 | |
|   
 | |
|   real tmp = abs(iva_ret);
 | |
|   if (iva_ret.sign() <= 0)
 | |
|     m.field(F_IVAREC).set(tmp.string()); 
 | |
|   else m.field(F_IVARED).set(iva_ret.string()); 
 | |
|   
 | |
|   tmp = iva_acq + acq_intr;
 | |
|   m.field(F_IVARIM).set(iva_rim.string());
 | |
|   m.field(F_IVAACQ).set(tmp.string());
 | |
|   
 | |
|   if (per_pro.is_zero()) 
 | |
|     m.hide(F_PERPRO);
 | |
|   else 
 | |
|   {
 | |
|     m.show(F_PERPRO);
 | |
|     m.field(F_PERPRO).set(per_pro.string());
 | |
|   }    
 | |
|   
 | |
|   m.field(F_CREPRE).set(cre_pre.string());
 | |
|   m.field(F_ULTDET).set(ult_det.string());
 | |
|   
 | |
|   //risven = iva_ven + non_fat + non_ann + iva_ret + iva_rim;
 | |
|   risven = iva_ven + non_fat + non_ann + iva_rim;
 | |
|   if (iva_ret.sign() > 0)
 | |
|     risven += iva_ret;
 | |
|   
 | |
|   m.field(F_RISVEN).set(risven.string()); 
 | |
|   
 | |
|   //risacq = iva_acq + acq_intr + cre_pre + ult_det + abs(iva_ret);
 | |
|   risacq = iva_acq + acq_intr + cre_pre + ult_det;
 | |
|   if (iva_ret.sign() < 0)
 | |
|     risacq += abs(iva_ret);
 | |
|   
 | |
|   m.field(F_RISACQ).set(risacq.string());
 | |
|   
 | |
|   diff = risacq - risven;
 | |
|   if (diff.sign() < 0)
 | |
|   {
 | |
|     m.show(F_IVADEB);
 | |
|     m.hide(F_IVACRE);
 | |
|     if (liqdiff) //se no e' gestito da maschera 
 | |
|     {     
 | |
|       real tmp = abs(diff);
 | |
|       m.field(F_IVADEB).set(tmp.string());
 | |
|     }
 | |
|   }
 | |
| else if (diff.sign() > 0)
 | |
| {
 | |
|   m.hide(F_IVADEB);
 | |
|   m.show(F_IVACRE);
 | |
|   if (liqdiff)
 | |
|     m.field(F_IVACRE).set(diff.string());
 | |
| }   
 | |
| else
 | |
| {
 | |
|   m.hide(F_IVADEB);
 | |
|   m.hide(F_IVACRE);
 | |
| }
 | |
| 
 | |
| if (acconto.sign() < 0)
 | |
| {
 | |
|   m.show(F_CREEVI);            
 | |
|   real tmp = abs(acconto);
 | |
|   m.field(F_CREEVI).set(tmp.string());
 | |
|   m.hide(F_ACCVER);
 | |
|   m.hide(F_ACCNVER);
 | |
| }
 | |
| else if (acconto.sign() > 0 && acconto > acconto_min_da_versare)  
 | |
| {
 | |
|   m.hide(F_CREEVI); 
 | |
|   m.hide(F_ACCNVER);
 | |
|   m.show(F_ACCVER);
 | |
|   m.field(F_ACCVER).set(acconto.string());
 | |
| }
 | |
| else if (acconto.sign() > 0 && acconto <= acconto_min_da_versare)
 | |
| {
 | |
|   m.hide(F_CREEVI); 
 | |
|   m.show(F_ACCNVER);
 | |
|   m.hide(F_ACCVER);
 | |
|   m.field(F_ACCNVER).set(acconto.string());
 | |
| }
 | |
| else  //==0
 | |
| {
 | |
|   m.hide(F_CREEVI); 
 | |
|   m.hide(F_ACCNVER);
 | |
|   m.hide(F_ACCVER);
 | |
| }
 | |
| 
 | |
| if (!liqdiff)
 | |
| {
 | |
|   m.set_handler(F_NONFAT, msk_risul);
 | |
|   m.set_handler(F_NONANN, msk_risul);
 | |
| }
 | |
| m.set_handler(msk_hide);  
 | |
| 
 | |
| for (bool stop = FALSE; !stop;)
 | |
| {
 | |
|   KEY k = m.run();        
 | |
|   
 | |
|   switch(k)
 | |
|   {
 | |
|   case K_ESC: 
 | |
|   case K_QUIT: 
 | |
|     if (m.dirty())
 | |
|     {
 | |
|       KEY k = yesnocancel_box("Registrazione modifiche effettuate?");
 | |
| 
 | |
|       if (k ==  K_YES)
 | |
|       {
 | |
|         if (!liqdiff)
 | |
|         {
 | |
|           real nf (m.get(F_NONFAT));
 | |
|           real na (m.get(F_NONANN));
 | |
|           if (nf != non_fat || na != non_ann)
 | |
|             message_box("Valori modificati: rieseguire il calcolo dell'acconto");
 | |
|           lia.put("R13", nf);
 | |
|           lia.put("R14", na);
 | |
|           lia.rewrite();   
 | |
|         }  
 | |
|       }
 | |
|       if (k == K_YES || k == K_NO) 
 | |
|         stop = TRUE;
 | |
|       break;  
 | |
|     } 
 | |
|     else stop = TRUE;
 | |
|     break;      
 | |
|   case K_SAVE:     
 | |
|     _registra = TRUE;
 | |
|     if (m.dirty())
 | |
|     {
 | |
|       if (!liqdiff)
 | |
|       {
 | |
|         real nf (m.get(F_NONFAT));
 | |
|         real na (m.get(F_NONANN));
 | |
|         if (nf != non_fat || na != non_ann)
 | |
|           message_box("Valori modificati: rieseguire il calcolo dell'acconto");
 | |
|         lia.put("R13", nf);
 | |
|         lia.put("R14", na);
 | |
|         lia.rewrite();   
 | |
|       }
 | |
|     }
 | |
|     break; 
 | |
|   }
 | |
| }  
 | |
| return TRUE;
 | |
| }    
 | |
| 
 | |
| int cg4900(int argc, char* argv[])
 | |
| {
 | |
|   LiqAcc_app app;
 | |
|   app.run(argc, argv, "Visualizzazione liquidazione acconti");
 | |
|   return 0;
 | |
| }
 |