139 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#ifndef __PAGAMENT_H
 | 
						|
#define __PAGAMENT_H
 | 
						|
 | 
						|
#ifndef __REAL_H
 | 
						|
#include <real.h>
 | 
						|
#endif      
 | 
						|
 | 
						|
#ifndef __STRINGS_H
 | 
						|
#include <string.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __DATE_H      
 | 
						|
#include <date.h>
 | 
						|
#endif   
 | 
						|
 | 
						|
#ifndef __MSKSHEET_H
 | 
						|
#include <msksheet.h>
 | 
						|
#endif                                         
 | 
						|
 | 
						|
#ifndef __TABUTIL_H
 | 
						|
#include <tabutil.h>
 | 
						|
#endif
 | 
						|
 | 
						|
// Error codes for pagation
 | 
						|
const word P_OK     = 0x0000;     // ok
 | 
						|
const word P_RSUM   = 0x0001;     // percentages do not sum up to 100
 | 
						|
const word P_IMPNC  = 0x0002;     // inconsistenza percentuali / importi
 | 
						|
const word P_SCAD   = 0x0004;     // scadenze non consecutive 
 | 
						|
const word P_INIZIO = 0x0008;     // data 1a rata < data inizio pagamenti
 | 
						|
 | 
						|
class Pagamento : public TObject
 | 
						|
{   
 | 
						|
  TString   _code;       // codice
 | 
						|
  TString   _name;       // descrizione
 | 
						|
  real      _imponibile; // imponibile da affettare
 | 
						|
  real      _imposta;    // imposta da affettare
 | 
						|
  real      _spese;      // spese da affettare
 | 
						|
  TDistrib  _slicer;     // affettatrice
 | 
						|
  bool      _new;        // non letto da database
 | 
						|
  TArray    _rate;       // rate medesime
 | 
						|
  char      _inscad;     // inizio scadenze:    S1    
 | 
						|
  bool      _mcomm;      // mese commerciale:   B0   
 | 
						|
  bool      _rdiff;      // rate differenziate: B1
 | 
						|
  int       _tpr;        // tipo prima rata:    S3
 | 
						|
  bool      _dirty;      // modificato (strutturalmente!)
 | 
						|
  TDate     _inizio;     // data inizio pagamenti
 | 
						|
  bool      _inited;     // vero se c'e' un movimento di riferimento
 | 
						|
  real      _firstr;     // importo da pagare in prima rata (o distribuire se tpr == 0)
 | 
						|
  real      _secndr;     // importo da distribuire
 | 
						|
  
 | 
						|
  int       _rata_ifield(int n, int f) const;
 | 
						|
  real      _rata_rfield(int n, int f) const;
 | 
						|
  TDate     _rata_dfield(int n, int f) const;
 | 
						|
  const char* _rata_sfield(int n, int f) const;
 | 
						|
  
 | 
						|
public:
 | 
						|
  
 | 
						|
  int    n_rate()             const { return _rate.items();    }
 | 
						|
  bool   is_new()             const { return _new;             }  
 | 
						|
  bool   dirty()              const { return _dirty;           }
 | 
						|
  int    tipo_rata(int n)     const { return _rata_ifield(n,2);}
 | 
						|
  real   perc_rata(int n)     const { return _rata_rfield(n,1);}
 | 
						|
  int    scad_rata(int n)     const { return _rata_ifield(n,0);}               
 | 
						|
  TDate  data_rata(int n)     const { return _rata_dfield(n,3);}
 | 
						|
  real   tpay_rata(int n)     const { return _rata_rfield(n,4);}
 | 
						|
  const char* ulc_rata(int n) const { return _rata_sfield(n,5);}
 | 
						|
  char   inizio_scadenza()    const { return _inscad;          }           
 | 
						|
  bool   mese_commerciale()   const { return _mcomm;           }           
 | 
						|
  bool   rate_differenziate() const { return _rdiff;           }
 | 
						|
  int    tipo_prima_rata()    const { return _tpr;             }
 | 
						|
  
 | 
						|
  const TString& name()       const { return _name;            }                                    
 | 
						|
  const TString& code()       const { return _code;            }                                    
 | 
						|
  const char* desc_tpr()      const;
 | 
						|
  const char* desc_tipo(int)  const;
 | 
						|
  
 | 
						|
  // queste vengono usate solo per movimenti editabili nella struttura
 | 
						|
  // (da tabella pagamenti) e riaggiustano tutte le rate in accordo
 | 
						|
  // con il parametro modificato
 | 
						|
  void   set_intervallo_rate(int i);     
 | 
						|
  void   set_mese_commerciale(bool v, int& sscad);          
 | 
						|
  void   set_rate_differenziate(int v);
 | 
						|
  void   set_tipo_prima_rata(int v, int sscad = -1);
 | 
						|
  void   set_numero_rate(int n, int sscad = -1);
 | 
						|
  
 | 
						|
  void   set_inizio_scadenza(char v)    { _inscad = v; }           
 | 
						|
  void   set_code(const char* c)        { _code = c;   }
 | 
						|
  // check consistency: returns word with errors flagged, 0 if ok
 | 
						|
  word   validate() const;
 | 
						|
  void   strerr(word err, TString& s);
 | 
						|
  
 | 
						|
  // read/write from database 
 | 
						|
  // relapp passa i files, se no vengono aperti
 | 
						|
  bool   read(TTable* cpg = NULL, TTable* rpg = NULL);
 | 
						|
  
 | 
						|
  // chiamabili solo da relapp, agiscono solo su %RPG
 | 
						|
  bool   write(TTable& rpg);
 | 
						|
  bool   rewrite(TTable& rpg);
 | 
						|
  void   remove(TTable& rpg);
 | 
						|
  
 | 
						|
  // modifica rate manualmente o non
 | 
						|
  TToken_string&   rata(int r) { return (TToken_string&)_rate[r]; }
 | 
						|
  TToken_string&   add_rata (real perc, int day, int type);
 | 
						|
  TToken_string&   set_rata (int index, real perc, int day, int type, 
 | 
						|
                             const char* ulc = NULL, const char* imp = NULL,
 | 
						|
                             const char* data = NULL); 
 | 
						|
  
 | 
						|
  void   remove_rata(int r);  
 | 
						|
  void   zap_rate () { _rate.destroy(); } 
 | 
						|
  // calcola le rate automaticamente secondo quanto specificato
 | 
						|
  void   set_rate_auto();          
 | 
						|
  // data una rata esistente, riaggiusta gli importi usando lo slicer e 
 | 
						|
  // le scadenze usando la data di inizio
 | 
						|
  void   set_imprata(int i, real r);
 | 
						|
 | 
						|
  // slicer interface
 | 
						|
  void   set_total(real& ib, real& im, real& sp);
 | 
						|
  
 | 
						|
  // istanzia uno sheet field come diobue comanda                                   
 | 
						|
  void   set_sheet(TSheet_field& sf, int sscad = -1);         
 | 
						|
  // ricalcola automaticamente tutto il ricalcolabile
 | 
						|
  // alla modifica di una percentuale (o di un importo)
 | 
						|
  // ritorna TRUE se non si poteva; non occorre che sia inizializzato
 | 
						|
  // con un importo
 | 
						|
  word   recalc_rate(int row, bool is_perc_modified, const char* new_value,
 | 
						|
                     const char* scad, const char* typ, int rdiff,
 | 
						|
                     bool mcomm, bool& need_recalc);
 | 
						|
  
 | 
						|
  // determina la prossima scadenza
 | 
						|
  void      next_scad(TDate& d, int scad, bool mcomm, int rata);
 | 
						|
 | 
						|
  // se codtab non e' NULL legge da file (e da' errore se non c'e')
 | 
						|
  // se si vuole fare un pagamento nuovo si da' il codice con set_code                                                              
 | 
						|
  Pagamento(const char* codtab = NULL, const char* data = NULL);
 | 
						|
  virtual ~Pagamento() {}
 | 
						|
};                          
 | 
						|
 | 
						|
#endif   
 |