campo-sirio/m770/77lib.h
nik f8073f1e33 Correzioni fine luglio
git-svn-id: svn://10.65.10.50/trunk@3263 c028cbd2-c16b-5b4b-a496-9718f37d4682
1996-07-29 10:56:41 +00:00

366 lines
12 KiB
C++
Executable File

// 77lib.h - utilita' varie per modulo 770
#ifndef __77LIB_H
#define __77LIB_H
#include <mask.h>
#include <real.h>
#include <sheet.h>
#include "770101.h"
class TSchedaP;
// Flag di record del dichiarante (quadro I "globale")
HIDDEN const char COD_QUA_I_DIC = 'D';
HIDDEN const char DELEGA_BANCARIA = 'B';
HIDDEN const char DISTINTA = 'D';
HIDDEN const char CC_POSTALE = 'C';
////////////////////////////////////////////////////////////////////////
//
// Parametri pacchetto/utente
//
////////////////////////////////////////////////////////////////////////
// L'anno di dichiarazione selezionato nei parametri di studio 770.
// (Usato anche in 773100a.uml)
HIDDEN const char* ANNO_SEL = "AnnoDic";
// Elenco di ditte selezionate da un utente. Array in CONFIG_USER
HIDDEN const char* DITTE_SEL = "DitteSel";
HIDDEN const char* ST_MODULO = "StSuModulo";
HIDDEN const char* ST_DATA = "StDataMod";
HIDDEN const char* ST_DOC = "StDocNoPag";
// La ditta corrente per il 770 - s/get_firm_770() usano questo
HIDDEN const char* DITTA_770 = "Ditta770";
// Arrotonda modificato { 1500 -> 1000 (e non 2000 come in round(-3)) }
real& round_770(const real& importo);
// Cerca di stabilire se il titolare della ditta e' PF o PG
char tipo_persona (long codditta);
////////////////////////////////////////////////////////////////////////
//
// Dipendenti
//
////////////////////////////////////////////////////////////////////////
// Stabilisce se coddip esiste
bool esiste_dipendente(const long codditta, const long coddip);
// Stabilisce se coddip e' un (erede o un deceduto) o no
bool is_dipendente(const long codditta, const long coddip);
// Stabilisce se coddip e' un erede
bool is_erede(const long codditta, const long coddip);
// Stabilisce se coddip e' deceduto
bool is_deceduto(const long codditta, const long coddip);
bool scrivi_erede(const long codditta, const long deceduto, const long erede);
bool riscrivi_erede(const long codditta, const long deceduto, const long erede, const long val);
// Determina se esiste un pagamento con annopag = anno passato come par.
bool esiste_pag_in_anno(TSchedaP& sch, const int anno=0, const TDate& data_da=NULLDATE, const TDate& data_a=NULLDATE);
// La stessa cosa tra due date
bool esiste_pag_in_periodo(TSchedaP& sch, const TDate& data_da, const TDate& data_a);
////////////////////////////////////////////////////////////////////////
//
// Dichiarazioni & quadri
//
////////////////////////////////////////////////////////////////////////
typedef enum { estinto=0, normale, dichiarante } TipoDitta;
// Controlla se esiste la dic
bool exist_dichiar_770 (long codditta, bool sogg_dich= FALSE);
// Immette una dichiarazione
bool enter_dichiar_770 (long codditta, int annodic=0, bool sogg_dich= FALSE);
// Ritorna l'anno sui parametri di studio
int anno_770();
// Conta il numero di persone fisiche e non della ditta codit per quadro "quadro"
// Mette i totali nei due parametri passati per riferimento
int conta_tipiper(const long codit, TString& quadro, int* NumFisiche, int* NumNoFisiche);
// TRUE se c'e' almeno un record sul quadro L
bool esiste_record_L(const long codditta, const int annodic);
// TRUE se la codditta e' sogg. dichiarante
bool sogg_dic (const long codditta);
// Ritorna il codice del sogg. dichiarante oppure 0
long sogg_estinto(const long codditta);
// Ritorna la ditta corrente selezionata
long get_firm_770();
// Setta la ditta 'codditta' come corrente
void set_firm_770(const long codditta);
////////////////////////////////////////////////////////////////////////
//
// Utility varie
//
////////////////////////////////////////////////////////////////////////
bool ricerca(const TMask& m);
bool modifica(const TMask& m);
bool inserimento(const TMask& m);
// Ritorna il codice fiscale del titolare di codditta
const char* cod_fis(const long codditta);
// Ritorna la descrizione della causale
const char* get_desc_cau(const char* codcau);
bool esiste_perc(char tipoa, const long codanag);
////////////////////////////////////////////////////////////////////////////
// E' un array sheet in cui si puo' decidere di visualizzare solo i
// primi "visible" campi. I campi successivi vengono mantenuti in un
// TArray e possono essere letti da programma ma NON vengono visualizzati
////////////////////////////////////////////////////////////////////////////
class TNikArray_sheet : public TArray_sheet
{
TArray _interno;
int _visible_items;
public:
TNikArray_sheet(short x, short y, short dx, short dy, const char* caption,
const char* head, byte buttons = 0, WINDOW parent = NULL_WIN,
int visible=0)
: TArray_sheet(x, y, dx, dy, caption,head, buttons),
_visible_items(visible) {}
bool destroy(int i = -1);
long add(TToken_string& s);
TToken_string& row(int i);
};
////////////////////////////////////////////////////////////////////////
//
// Schede, versamenti, pagamenti, percipienti....
//
////////////////////////////////////////////////////////////////////////
const int SCHEDA_NON_ESISTENTE = -2;
class TSchedaP
{
private:
long _codditta;
char _tipoa;
long _codanagr;
int _nprog;
real _spese_doc, _compenso_doc;
TDate _data_doc;
public:
bool read();
long codditta() const { return _codditta; }
char tipoa() const { return _tipoa; }
long codanagr() const { return _codanagr; }
int nprog() const { return _nprog; }
real compenso_doc() const;
real spese_doc() const;
int anno_doc() const;
bool operator == (const TSchedaP& sch) const
{
return (_codditta == sch.codditta() && _tipoa == sch.tipoa() &&
_codanagr == sch.codanagr() && _nprog == sch.nprog()) ;
}
bool operator != (const TSchedaP& sch) const
{
return (_codditta != sch.codditta() || _tipoa != sch.tipoa() ||
_codanagr != sch.codanagr() || _nprog != sch.nprog()) ;
}
bool not_empty() const { return _codditta != 0L && _tipoa != '\0' &&
_codanagr != 0L && _nprog != 0; }
bool ok() const { return not_empty(); }
void set(const long codditta=0L, const char tipoa=0, const long codanagr=0L, const int nprog=0)
{
_codditta=codditta; _tipoa=tipoa; _codanagr=codanagr; _nprog=nprog;
}
// Cancella la scheda con tutte le sue righe di pag. e vers.
int remove();
TSchedaP (const long codditta=0L, const char tipoa=0, const long codanagr=0L, const int nprog=0);
TSchedaP (TRectype& rec);
~TSchedaP();
};
class TPercipiente
{
private:
long _codditta;
char _tipoa;
long _codanagr;
public:
long codditta() const { return _codditta; }
char tipoa() const { return _tipoa; }
long codanagr() const { return _codanagr; }
bool not_empty() const { return _tipoa != '\0' && _codanagr != 0L; }
bool ok() const { return not_empty(); }
bool operator == (const TPercipiente& sch) const
{
return _tipoa == sch.tipoa() && _codanagr == sch.codanagr() ;
}
bool operator != (const TPercipiente& sch) const
{
return _tipoa != sch.tipoa() || _codanagr != sch.codanagr() ;
}
void set(const char tipoa=0, const long codanagr=0L)
{
_tipoa=tipoa; _codanagr=codanagr;
}
// Determina se esiste almeno una scheda per questo perc.
bool esiste_scheda();
// Cancella tutte le schede di questo percipiente
bool elimina_schede();
TPercipiente (const long codditta=0L, const char tipoa='\0', const long codanagr=0L) :
_codditta(codditta), _tipoa(tipoa), _codanagr(codanagr) {}
TPercipiente (const TRectype& rec);
};
class TVersamento
{
protected:
long _codditta;
char _tipoa;
long _codanagr;
int _nprog;
int _nriga;
real _importo_versato;
public:
long codditta() const { return _codditta; }
char tipoa() const { return _tipoa; }
long codanagr() const { return _codanagr; }
int nprog() const { return _nprog; }
int nriga() const { return _nriga; }
real importo_versato() const { return _importo_versato; }
void set_importo_versato(real& imp) { _importo_versato = imp; }
virtual TVersamento& operator = (const TVersamento& sch)
{
_codditta = sch.codditta();
_tipoa = sch.tipoa();
_codanagr = sch.codanagr();
_nprog = sch.nprog();
_nriga = sch.nriga();
return *this;
}
bool operator == (const TVersamento& sch) const
{
return (_codditta == sch.codditta() && _tipoa == sch.tipoa() &&
_codanagr == sch.codanagr() && _nprog == sch.nprog() &&
_nriga == sch.nriga()) ;
}
bool operator != (const TVersamento& sch) const
{
return (_codditta != sch.codditta() || _tipoa != sch.tipoa() ||
_codanagr != sch.codanagr() || _nprog != sch.nprog() ||
_nriga != sch.nriga()) ;
}
virtual void set(const long codditta=0L, const char tipoa=0, const long codanagr=0L, const int nprog=0, const int nriga=0, const real& impvers=ZERO);
virtual void set(TToken_string& row);
bool not_empty() const { return _codditta != 0L && _tipoa != '\0' &&
_codanagr != 0L && _nprog != 0 && _nriga != 0; }
bool ok() const { return not_empty(); }
TVersamento (const long codditta=0L, const char tipoa=0, const long codanagr=0L, const int nprog=0, const int nriga=0, const real& impvers=ZERO) :
_codditta(codditta), _tipoa(tipoa), _codanagr(codanagr), _nprog(nprog), _nriga(nriga)
{}
TVersamento(TRectype& rec);
};
// per suddividere il versamento sui vari pagamenti
// e per ricordarsi i versamenti gia' visti
class TVersamento_stampa : public TVersamento
{
private:
TAssoc_array _vers;
real _importo_versato_residuo;
real _importo_versato;
int _status; // esito read_pags
int _num_pags; // numero di pagamenti collegati
bool _gia_letti_pag;
int _num_last_pag; // numero dell'ultimo pagamento
public:
virtual void set(const long codditta=0L, const char tipoa=0, const long codanagr=0L, const int nprog=0, const int nriga=0, const real& impvers=ZERO);
virtual TVersamento_stampa& operator = (const TVersamento_stampa& sch)
{
_codditta = sch.codditta();
_tipoa = sch.tipoa();
_codanagr = sch.codanagr();
_nprog = sch.nprog();
_nriga = sch.nriga();
_importo_versato = sch.importo_versato();
return *this;
}
int read_pags(TLocalisamfile* pagf=NULL); // legge i pagamenti collegati
int num_pags(TLocalisamfile* pag=NULL);
bool last_pag(const int npag) const { return npag == _num_last_pag; }
real importo_versato() const { return _importo_versato; }
void set_importo_versato(const real& imp) { _importo_versato = imp; }
void add(TVersamento& vers);
bool find(TVersamento& vers);
real vers_stampa(TLocalisamfile* rpag, const int nriga_pag, const real& vers, const real& rit);
real importo_versato_residuo() const { return _importo_versato_residuo; }
TVersamento_stampa(const long codditta=0L, const char tipoa=0, const long codanagr=0L, const int nprog=0, const int nriga=0, const real& impvers=ZERO);
};
////////////////////////////////////////////////////////////////////////////
// Collegamento CG - 770
////////////////////////////////////////////////////////////////////////////
typedef enum { nessuno=0, fattura=1, pagamento=3, versamento=4,
occasionale=6, pagamento_piu_perc=7 } TTipo_coll;
struct TLink770
{
TTipo_coll _tipo_coll;
char _immissione;
char _tipo;
long _codanagr;
long _numreg;
TString16 _numdoc;
TString16 _datadoc;
real _spese;
real _compenso;
real _imposte;
real _ritenute;
real _totdoc;
bool read(const char* msg);
TLink770();
};
#endif