Patch level : 10.0 1054
Files correlati : fe0.exe fe0100a.msk fetbcon.msk Ricompilazione Demo : [ ] Commento : Corretta gestione contratti git-svn-id: svn://10.65.10.50/branches/R_10_00@22392 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
7291299ce2
commit
7a187457cf
137
fe/fe0100.cpp
137
fe/fe0100.cpp
@ -53,38 +53,29 @@ static const TString& provincia_di(const TString& codcom)
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TContratti
|
||||
// TContratto
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
const TRectype& contratto(char tipocf, long codcf, const char* codcont)
|
||||
class TContratto : public TObject
|
||||
{
|
||||
TString80 key; key.format("%c%6ld%s", tipocf, codcf, codcont);
|
||||
TRectype& c = (TRectype&)cache().get("&CON", key);
|
||||
if (c.empty())
|
||||
{
|
||||
int primo_anno = c.get_int("I0");
|
||||
if (primo_anno < 2010)
|
||||
{
|
||||
const TDate inizio = c.get("D0");
|
||||
primo_anno = inizio.year();
|
||||
if (primo_anno < 2010)
|
||||
primo_anno = 2010;
|
||||
c.put("I0", primo_anno);
|
||||
}
|
||||
TRectype _rec;
|
||||
|
||||
real importo = c.get("R0");
|
||||
if (importo <= ZERO)
|
||||
{
|
||||
importo = primo_anno > 2010 ? 3000 : 25000;
|
||||
c.put("R0", importo);
|
||||
}
|
||||
}
|
||||
return c;
|
||||
}
|
||||
protected:
|
||||
bool importo_annuale(int anno, real& importo, real& imposta) const;
|
||||
bool importo_figli(int anno, real& importo, real& imposta) const;
|
||||
|
||||
bool importo_contratto(const TRectype& c, int anno, real& importo, real& imposta)
|
||||
public:
|
||||
virtual bool ok() const { return !_rec.empty(); }
|
||||
bool totale_annuale(int anno, real& importo, real& imposta) const;
|
||||
|
||||
bool init(const TRectype& rec);
|
||||
TContratto(char tipocf, long codcf, const char* codcont);
|
||||
TContratto(const TRectype& rec) : _rec(rec) { init(rec); }
|
||||
};
|
||||
|
||||
bool TContratto::importo_annuale(int anno, real& importo, real& imposta) const
|
||||
{
|
||||
if (c.empty() || anno < 2010)
|
||||
if (_rec.empty() || anno < 2010)
|
||||
return false;
|
||||
|
||||
// Determina l'indice i [0..3] degli importi del contratto per l'anno richiesto
|
||||
@ -93,7 +84,7 @@ bool importo_contratto(const TRectype& c, int anno, real& importo, real& imposta
|
||||
for (i = 3; i > 0; i--)
|
||||
{
|
||||
fld[1] = '0'+i;
|
||||
const int y = c.get_int(fld);
|
||||
const int y = _rec.get_int(fld);
|
||||
if (y > 0 && y <= anno)
|
||||
break;
|
||||
}
|
||||
@ -101,17 +92,17 @@ bool importo_contratto(const TRectype& c, int anno, real& importo, real& imposta
|
||||
// Determina il nome del campo importo corrispondente all'indice i: 0 -> R0; 1 -> R2; 2 -> R4; 3 -> R6
|
||||
fld[0] = 'R';
|
||||
fld[1] = '0'+(i*2);
|
||||
importo = c.get_real(fld);
|
||||
importo = _rec.get_real(fld);
|
||||
|
||||
fld[1]++; // Il campo imposta è sempre quello successivo a quello dell'importo
|
||||
imposta = c.get_real(fld);
|
||||
imposta = _rec.get_real(fld);
|
||||
|
||||
return importo > ZERO;
|
||||
}
|
||||
|
||||
bool importo_figli_contratto(const TRectype& c, int anno, real& importo, real& imposta)
|
||||
bool TContratto::importo_figli(int anno, real& importo, real& imposta) const
|
||||
{
|
||||
const TString& codtab = c.get("CODTAB");
|
||||
const TString& codtab = _rec.get("CODTAB");
|
||||
const TString& prefix = codtab.left(7);
|
||||
const TString& suffix = codtab.mid(7);
|
||||
|
||||
@ -125,33 +116,66 @@ bool importo_figli_contratto(const TRectype& c, int anno, real& importo, real& i
|
||||
importo = imposta = ZERO;
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
{
|
||||
real imp, iva;
|
||||
importo_figli_contratto(recset.cursor()->curr(), anno, imp, iva);
|
||||
const TContratto child(recset.cursor()->curr());
|
||||
real imp, iva; child.importo_figli(anno, imp, iva);
|
||||
importo += imp;
|
||||
imposta += iva;
|
||||
}
|
||||
if (importo <= ZERO)
|
||||
importo_contratto(c, anno, importo, imposta);
|
||||
importo_annuale(anno, importo, imposta);
|
||||
|
||||
return !importo.is_zero();
|
||||
}
|
||||
|
||||
real importo_totale_contratto(char tipocf, long codcf, const char* codcont, int anno,
|
||||
real& importo, real& imposta)
|
||||
bool TContratto::totale_annuale(int anno, real& importo, real& imposta) const
|
||||
{
|
||||
importo = imposta = ZERO;
|
||||
const TRectype& c = contratto(tipocf, codcf, codcont);
|
||||
if (!c.empty() && anno >= 2010)
|
||||
if (!_rec.empty() && anno >= 2010)
|
||||
{
|
||||
const TString& padre = c.get("S1");
|
||||
const TString& padre = _rec.get("S1");
|
||||
if (padre.full())
|
||||
importo_totale_contratto(tipocf, codcf, padre, anno, importo, imposta);
|
||||
{
|
||||
const TString& codtab = _rec.get("CODTAB");
|
||||
const TContratto master(codtab[0], atol(codtab.mid(1,6)), padre);
|
||||
master.totale_annuale(anno, importo, imposta);
|
||||
}
|
||||
else
|
||||
importo_figli_contratto(c, anno, importo, imposta);
|
||||
importo_figli(anno, importo, imposta);
|
||||
}
|
||||
return importo > ZERO;
|
||||
}
|
||||
|
||||
bool TContratto::init(const TRectype& rec)
|
||||
{
|
||||
_rec = rec;
|
||||
if (!_rec.empty())
|
||||
{
|
||||
int primo_anno = _rec.get_int("I0");
|
||||
if (primo_anno < 2010)
|
||||
{
|
||||
const TDate inizio = _rec.get("D0");
|
||||
primo_anno = inizio.year();
|
||||
if (primo_anno < 2010)
|
||||
primo_anno = 2010;
|
||||
_rec.put("I0", primo_anno);
|
||||
}
|
||||
|
||||
real importo = _rec.get("R0");
|
||||
if (importo <= ZERO)
|
||||
{
|
||||
importo = primo_anno > 2010 ? 3000 : 25000;
|
||||
_rec.put("R0", importo);
|
||||
}
|
||||
}
|
||||
return ok();
|
||||
}
|
||||
|
||||
TContratto::TContratto(char tipocf, long codcf, const char* codcont) : _rec(LF_TABMOD)
|
||||
{
|
||||
TString80 key; key.format("%c%6ld%s", tipocf, codcf, codcont);
|
||||
init(cache().get("&CON", key));
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TAnagrafica
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -492,14 +516,15 @@ class TDati_rilevanti_set : public TAS400_recordset
|
||||
protected:
|
||||
virtual bool set_field(const TAS400_column_info& fi, const TVariant& var);
|
||||
void init();
|
||||
bool set_val(int n, const TVariant& v) { return TAS400_recordset::set(n-1, v); }
|
||||
|
||||
public:
|
||||
bool set(unsigned int n, const TVariant& v) { return TAS400_recordset::set(n-1, v); }
|
||||
bool set(unsigned int n, const TString& v) { return TAS400_recordset::set(n-1, TVariant(v)); }
|
||||
bool set(unsigned int n, char v) { TString4 str; str << v; return TAS400_recordset::set(n-1, TVariant(str)); }
|
||||
bool set(unsigned int n, int v) { return TAS400_recordset::set(n-1, TVariant(long(v))); }
|
||||
bool set(unsigned int n, const real& v) { return TAS400_recordset::set(n-1, v.integer()); }
|
||||
bool set(unsigned int n, const TDate& v) { return TAS400_recordset::set(n-1, TVariant(v)); }
|
||||
bool set(unsigned int n, const TVariant& v) { return set_val(n, v); }
|
||||
bool set(unsigned int n, const TString& v) { return set_val(n, v); }
|
||||
bool set(unsigned int n, char v) { TString4 str; str << v; return set_val(n, str); }
|
||||
bool set(unsigned int n, int v) { return set_val(n, long(v)); }
|
||||
bool set(unsigned int n, const real& v) { return set_val(n, v.integer()); }
|
||||
bool set(unsigned int n, const TDate& v) { return set_val(n, v); }
|
||||
void add_control_rec(int zero_o_nove);
|
||||
TDati_rilevanti_set(int anno);
|
||||
};
|
||||
@ -761,8 +786,10 @@ bool TDati_rilevanti_msk::salva_allegato(const TRectype& mov, TFast_isamfile& fa
|
||||
if (contratto.full())
|
||||
{
|
||||
alleg.put(ALL_CONTRATTO, contratto);
|
||||
|
||||
const TContratto cont(tipocf, codcf, contratto);
|
||||
real importotot, impostatot;
|
||||
importo_totale_contratto(tipocf, codcf, contratto, anno, importotot, impostatot);
|
||||
cont.totale_annuale(anno, importotot, impostatot);
|
||||
alleg.put(ALL_IMPORTOTOT, importotot);
|
||||
alleg.put(ALL_IMPOSTATOT, impostatot);
|
||||
}
|
||||
@ -823,19 +850,11 @@ bool TDati_rilevanti_msk::elabora_movimento(const TRectype& mov, TFast_isamfile&
|
||||
if (natura_operazione == 4 && datareg < data_limite_scontrini)
|
||||
continue;
|
||||
|
||||
const bool com_obbl = ci.get_bool("B6");
|
||||
if (com_obbl)
|
||||
{
|
||||
// Le bollette vengono già spedite dal Enel, per cui non si devono spedire nuovamente
|
||||
ignora_movimento(mov, TR("oggetto di comunicazione obbligatoria all'anagrafe tributaria"), log);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Esportazioni
|
||||
const bool art_8 = ci.get("S2") == "20" && ci.get("S3") == "1";
|
||||
if (art_8)
|
||||
{
|
||||
ignora_movimento(mov, TR("soggetto all'articolo 8 (del dpr 26/10/1972)"), log);
|
||||
ignora_movimento(mov, TR("soggetto all'articolo 8 (del dpr 26-10-1972)"), log);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1399,9 +1418,9 @@ bool TDati_rilevanti_msk::on_field_event(TOperable_field& o, TField_event e, lon
|
||||
if (e == fe_modify || (e == fe_init && !o.empty()))
|
||||
{
|
||||
TMask& m = o.mask();
|
||||
const TContratto cont(m.get(A_TIPOCF)[0], m.get_long(A_CODCF), m.get(A_CONTRATTO));
|
||||
real importo, imposta;
|
||||
importo_totale_contratto(m.get(A_TIPOCF)[0], m.get_long(A_CODCF), m.get(A_CONTRATTO),
|
||||
get_int(F_ANNO), importo, imposta);
|
||||
cont.totale_annuale(get_int(F_ANNO), importo, imposta);
|
||||
m.set(A_IMPORTOTOT, importo);
|
||||
m.set(A_IMPOSTATOT, imposta);
|
||||
}
|
||||
|
@ -254,11 +254,14 @@ NUMBER A_NUMREG 7
|
||||
BEGIN
|
||||
PROMPT 41 5 "N. operazione "
|
||||
FIELD NUMREG
|
||||
USE MOV
|
||||
USE MOV SELECT (TIPO==#A_TIPOCF)&&(BETWEEN(CODCF,#A_CODCF,#A_CODCF))
|
||||
JOIN LF_CLIFO INTO TIPOCF==TIPO CODCF==CODCF
|
||||
INPUT NUMREG A_NUMREG
|
||||
DISPLAY "Numero@7" NUMREG
|
||||
DISPLAY "Data@10" DATAREG
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
|
||||
OUTPUT A_NUMREG NUMREG
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN cg2 -0
|
||||
@ -345,7 +348,7 @@ BEGIN
|
||||
OUTPUT A_NUMRETT NUMREG
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN cg2 -0
|
||||
NUM_EXPR #A_NUMRETT!=#A_NUMREG
|
||||
NUM_EXPR (#A_NUMRETT=0)||(#A_NUMRETT!=#A_NUMREG)
|
||||
WARNING "Inserire un numero registrazione diverso da quello principale"
|
||||
END
|
||||
|
||||
|
@ -14,8 +14,8 @@ END
|
||||
LIST F_CON_TIPOCF 1 9
|
||||
BEGIN
|
||||
PROMPT 2 2 ""
|
||||
ITEM "F|Fornitore"
|
||||
ITEM "C|Cliente"
|
||||
ITEM "F|Fornitore"
|
||||
FIELD CODTAB[1,1]
|
||||
KEY 1
|
||||
END
|
||||
@ -33,8 +33,8 @@ BEGIN
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD CODTAB[2,7]
|
||||
KEY 1
|
||||
MESSAGE EMPTY ENABLE,F_RAGSOC
|
||||
MESSAGE DISABLE,F_RAGSOC
|
||||
MESSAGE EMPTY ENABLE,F_CON_RAGSOC
|
||||
MESSAGE DISABLE,F_CON_RAGSOC
|
||||
END
|
||||
|
||||
STRING F_CON_RAGSOC 50
|
||||
@ -56,8 +56,8 @@ BEGIN
|
||||
FIELD CODTAB[8,25]
|
||||
USE &CON
|
||||
JOIN LF_CLIFO INTO TIPOCF=CODTAB[1,1] CODCF=CODTAB[2,7]
|
||||
INPUT CODTAB[1,1] F_CON_TIPOCF SELECT
|
||||
INPUT CODTAB[2,7] F_CON_CODCF
|
||||
INPUT CODTAB[1,1] F_CON_TIPOCF SELECT
|
||||
INPUT CODTAB[2,7] F_CON_CODCF
|
||||
INPUT CODTAB[8,25] F_CON_CONTRATTO
|
||||
DISPLAY "Contratto" CODTAB[8,]
|
||||
DISPLAY "Descrizione@50" S0
|
||||
@ -75,7 +75,7 @@ STRING F_CON_DESCRIZIONE 50
|
||||
BEGIN
|
||||
PROMPT 2 4 "Descrizione "
|
||||
FIELD S0
|
||||
USE &CON KEY 2 SELECT (CODTAB[1,1]==#F_TIPOCF)&&(STR(CODTAB[2,7]=#F_CODCF))
|
||||
USE &CON KEY 2 SELECT (CODTAB[1,1]==#F_CON_TIPOCF)&&(STR(CODTAB[2,7]=#F_CON_CODCF))
|
||||
JOIN LF_CLIFO INTO TIPOCF=CODTAB[1,1] CODCF=CODTAB[2,7]
|
||||
INPUT S0 F_CON_DESCRIZIONE
|
||||
DISPLAY "Descrizione@50" S0
|
||||
@ -137,19 +137,19 @@ ENDMASK
|
||||
|
||||
PAGE "Rateizzazione" -1 -1 25 5
|
||||
|
||||
NUMBER R_ANNO 4
|
||||
NUMBER R_CON_ANNO 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "Anno "
|
||||
FIELD I0
|
||||
END
|
||||
|
||||
CURRENCY R_IMPORTO 12
|
||||
CURRENCY R_CON_IMPORTO 12
|
||||
BEGIN
|
||||
PROMPT 1 2 "Importo "
|
||||
FIELD R0
|
||||
END
|
||||
|
||||
CURRENCY R_IMPOSTA 12
|
||||
CURRENCY R_CON_IMPOSTA 12
|
||||
BEGIN
|
||||
PROMPT 1 3 "Imposta "
|
||||
FIELD R1
|
||||
|
Loading…
x
Reference in New Issue
Block a user