Patch level :10.0
Files correlati : Ricompilazione Demo : [ ] Commento : contabilizzazione analitica a buon punto (manca il creatore dei movana) git-svn-id: svn://10.65.10.50/trunk@20649 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
fb11d3182e
commit
59ef1027e6
591
ce/ce4400.cpp
591
ce/ce4400.cpp
@ -1,9 +1,16 @@
|
|||||||
#include <applicat.h>
|
#include <applicat.h>
|
||||||
#include <automask.h>
|
#include <automask.h>
|
||||||
|
#include <dongle.h>
|
||||||
|
#include <modaut.h>
|
||||||
#include <progind.h>
|
#include <progind.h>
|
||||||
|
#include <recarray.h>
|
||||||
#include <reprint.h>
|
#include <reprint.h>
|
||||||
#include <reputils.h>
|
#include <reputils.h>
|
||||||
|
|
||||||
|
#include "../ca/calib01.h"
|
||||||
|
#include "../ca/calib02.h"
|
||||||
|
#include "../ca/rmovana.h"
|
||||||
|
|
||||||
#include "../cg/cg2101.h"
|
#include "../cg/cg2101.h"
|
||||||
#include "../cg/cglib02.h"
|
#include "../cg/cglib02.h"
|
||||||
|
|
||||||
@ -16,6 +23,7 @@
|
|||||||
#include "cespi.h"
|
#include "cespi.h"
|
||||||
#include "movam.h"
|
#include "movam.h"
|
||||||
#include "movce.h"
|
#include "movce.h"
|
||||||
|
#include "salcecms.h"
|
||||||
|
|
||||||
//===============================================================================================
|
//===============================================================================================
|
||||||
//maschera
|
//maschera
|
||||||
@ -124,8 +132,8 @@ public:
|
|||||||
virtual int compare(const TSortable& s) const;
|
virtual int compare(const TSortable& s) const;
|
||||||
const TRectype& categoria() const;
|
const TRectype& categoria() const;
|
||||||
const TString& descr_categoria() const;
|
const TString& descr_categoria() const;
|
||||||
TRigamov(const int grp, const TString& spc, const int cat)
|
TRigamov(const int grp, const TString& spc, const int cat, bool is_anal = false)
|
||||||
: TRectype(LF_RMOV) { _grp = grp; _spc = spc; _cat = cat; }
|
: TRectype(is_anal ? LF_RMOVANA : LF_RMOV) { _grp = grp; _spc = spc; _cat = cat; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -153,7 +161,6 @@ int TRigamov::compare(const TSortable& s) const
|
|||||||
cmp = _spc.compare(sc._spc);
|
cmp = _spc.compare(sc._spc);
|
||||||
if (cmp == 0)
|
if (cmp == 0)
|
||||||
cmp = _cat - sc._cat;
|
cmp = _cat - sc._cat;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return cmp;
|
return cmp;
|
||||||
@ -161,25 +168,47 @@ int TRigamov::compare(const TSortable& s) const
|
|||||||
|
|
||||||
//===============================================================================================
|
//===============================================================================================
|
||||||
//Struct che serve per avere ammortamenti per categoria (Codcat|Qamm_tot|Qperse_tot)
|
//Struct che serve per avere ammortamenti per categoria (Codcat|Qamm_tot|Qperse_tot)
|
||||||
struct TSaldo_per_codice :public TSortable
|
struct TSaldo_per_codice : public TSortable
|
||||||
{
|
{
|
||||||
TString4 _spc;
|
TString4 _spc;
|
||||||
int _grp, _cat;
|
int _grp, _cat;
|
||||||
TString16 _idcespite;
|
TString16 _idcespite;
|
||||||
real _qnor, _qant, _qacc;//, _qperse;
|
real _qnor, _qant, _qacc;//, _qperse;
|
||||||
|
|
||||||
void add(const TRectype& rec_ammce);
|
void add(const TRectype& rec_ammce);
|
||||||
|
bool use_pdcc() const;
|
||||||
|
|
||||||
virtual int compare(const TSortable& s) const;
|
virtual int compare(const TSortable& s) const;
|
||||||
const TRectype& categoria() const;
|
const TRectype& categoria() const;
|
||||||
const TString& descr_categoria() const;
|
const TString& descr_categoria() const;
|
||||||
|
|
||||||
int compila_rmov(const int tipo, const int riga_nor, TArray& righe_mov, TLog_report& log, const int movdett) const;
|
int trova_quota_e_conto_CG(const int tipo, real& quota, TBill& zio, TLog_report& log) const;
|
||||||
int genera_righe(TArray& righe_mov, TLog_report& log, const int movdett) const;
|
int trova_quota_e_conto_CA(const int tipo, real& quota, TAnal_bill& zio, TLog_report& log) const;
|
||||||
|
|
||||||
|
int compila_rmov_CG(const int tipo, const int riga_nor, TArray& righe_mov, TLog_report& log, const int movdett) const;
|
||||||
|
int genera_righe_CG(TArray& righe_mov, TLog_report& log, const int movdett) const;
|
||||||
|
|
||||||
|
int compila_rmovana_CA(const int tipo, const int riga_nor, TArray& righe_movana, TLog_report& log,
|
||||||
|
const int movdett) const;
|
||||||
|
int genera_righe_CA(TArray& righe_movana, TLog_report& log, const int movdett) const;
|
||||||
|
|
||||||
|
|
||||||
TSaldo_per_codice(const int grp, const TString& spc, const int cat, const char* idcespite = "")
|
TSaldo_per_codice(const int grp, const TString& spc, const int cat, const char* idcespite = "")
|
||||||
: _grp(grp),_spc(spc), _cat(cat), _idcespite(idcespite) {}
|
: _grp(grp),_spc(spc), _cat(cat), _idcespite(idcespite) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool TSaldo_per_codice::use_pdcc() const
|
||||||
|
{
|
||||||
|
static char _use_pdcc = ' ';
|
||||||
|
if (_use_pdcc == ' ')
|
||||||
|
{
|
||||||
|
TConfig cfg = ca_config();
|
||||||
|
_use_pdcc = cfg.get_bool("UsePdcc");
|
||||||
|
}
|
||||||
|
return _use_pdcc != '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TSaldo_per_codice::add(const TRectype& rec_ammce)
|
void TSaldo_per_codice::add(const TRectype& rec_ammce)
|
||||||
{
|
{
|
||||||
//valore totale degli ammortamenti del cespite di tipo qnor,qant,qacc che trova in AMMCE
|
//valore totale degli ammortamenti del cespite di tipo qnor,qant,qacc che trova in AMMCE
|
||||||
@ -215,23 +244,39 @@ int TSaldo_per_codice::compare(const TSortable& s) const
|
|||||||
return cmp;
|
return cmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const TRectype& TSaldo_per_codice::categoria() const
|
||||||
|
{
|
||||||
|
//viene chiamato il metodo standard della ditta_cespiti con l'ultimo parametro true in modo che usi solo...
|
||||||
|
//...le categorie valide per il collegamento alla contabilita' (tabella CCC)
|
||||||
|
return ditta_cespiti().categoria(_grp, _spc, _cat, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString& TSaldo_per_codice::descr_categoria() const
|
||||||
|
{
|
||||||
|
TString& wrkstring = get_tmp_string();
|
||||||
|
wrkstring << _grp << ' ' << _spc << ' ' << _cat << ' ' ;
|
||||||
|
wrkstring << ditta_cespiti().categoria(_grp, _spc, _cat, false).get("S0");
|
||||||
|
return wrkstring;
|
||||||
|
}
|
||||||
|
|
||||||
bool str2bill(const TString& stringona, const int pos, TBill& zio)
|
bool str2bill(const TString& stringona, const int pos, TBill& zio)
|
||||||
{
|
{
|
||||||
const int gr = atoi(stringona.mid(pos, 3));
|
const int gr = atoi(stringona.mid(pos, 3));
|
||||||
const int co = atoi(stringona.mid(pos+3, 3));
|
const int co = atoi(stringona.mid(pos + 3, 3));
|
||||||
if (co <= 0)
|
if (co <= 0)
|
||||||
return false;
|
return false;
|
||||||
const long so = atoi(stringona.mid(pos+6, 6));
|
const long so = atoi(stringona.mid(pos + 6, 6));
|
||||||
zio.set(gr, co, so);
|
zio.set(gr, co, so);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TSaldo_per_codice::compila_rmov(const int tipo, const int riga_nor, TArray& righe_mov, TLog_report& log,
|
|
||||||
const int movdett) const
|
int TSaldo_per_codice::trova_quota_e_conto_CG(int tipo, real& quota, TBill& zio,
|
||||||
|
TLog_report& log) const
|
||||||
{
|
{
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
const char* field = "S1";
|
const char* field = "S1";
|
||||||
real quota;
|
|
||||||
switch (tipo)
|
switch (tipo)
|
||||||
{
|
{
|
||||||
case 1: quota = _qnor; pos = 24; break;
|
case 1: quota = _qnor; pos = 24; break;
|
||||||
@ -240,11 +285,11 @@ int TSaldo_per_codice::compila_rmov(const int tipo, const int riga_nor, TArray&
|
|||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
if (quota <= ZERO)
|
if (quota <= ZERO)
|
||||||
return -1;
|
return 0;
|
||||||
|
|
||||||
const TRectype& rec_ccc = categoria();
|
const TRectype& rec_ccc = categoria();
|
||||||
const TString& stringona = rec_ccc.get(field);
|
const TString& stringona = rec_ccc.get(field);
|
||||||
TBill zio;
|
|
||||||
if (!str2bill(stringona, pos, zio))
|
if (!str2bill(stringona, pos, zio))
|
||||||
{
|
{
|
||||||
pos = 24;
|
pos = 24;
|
||||||
@ -253,20 +298,116 @@ int TSaldo_per_codice::compila_rmov(const int tipo, const int riga_nor, TArray&
|
|||||||
TString msg;
|
TString msg;
|
||||||
msg << TR("Manca il conto per le quote ammortamento normali della categoria ") << descr_categoria();
|
msg << TR("Manca il conto per le quote ammortamento normali della categoria ") << descr_categoria();
|
||||||
log.log(2, msg);
|
log.log(2, msg);
|
||||||
return -1;
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
tipo = 1;
|
||||||
|
}
|
||||||
|
return tipo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int TSaldo_per_codice::trova_quota_e_conto_CA(int tipo, real& quota, TAnal_bill& zio, TLog_report& log) const
|
||||||
|
{
|
||||||
|
//caso CA con use_pdcc
|
||||||
|
TString80 stringona;
|
||||||
|
|
||||||
|
if (use_pdcc())
|
||||||
|
{
|
||||||
|
int pos = 0;
|
||||||
|
const char* field = "S1";
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 1: quota = _qnor; pos = 24; break;
|
||||||
|
case 2: quota = _qant; pos = 36; break;
|
||||||
|
case 3: quota = _qacc; pos = 48; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
if (quota <= ZERO)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
const TRectype& rec_ccc = categoria();
|
||||||
|
stringona = rec_ccc.get(field).mid(pos, 12);
|
||||||
|
zio.set_conto(stringona);
|
||||||
|
|
||||||
|
if (stringona.blank())
|
||||||
|
{
|
||||||
|
pos = 24;
|
||||||
|
stringona = rec_ccc.get(field).mid(pos, 12);
|
||||||
|
if (tipo == 1 || stringona.blank())
|
||||||
|
{
|
||||||
|
TString msg;
|
||||||
|
msg << TR("Manca il conto per le quote ammortamento normali della categoria ") << descr_categoria();
|
||||||
|
log.log(2, msg);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
tipo = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else //caso CA con use_pconana
|
||||||
|
{
|
||||||
|
char* field;
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 1: quota = _qnor; field = "S3"; break;
|
||||||
|
case 2: quota = _qant; field = "S4"; break;
|
||||||
|
case 3: quota = _qacc; field = "S5"; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
if (quota <= ZERO)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
const TRectype& rec_ccc = categoria();
|
||||||
|
stringona = rec_ccc.get(field);
|
||||||
|
|
||||||
|
if (stringona.blank())
|
||||||
|
{
|
||||||
|
stringona = rec_ccc.get("S3");
|
||||||
|
if (tipo == 1 || stringona.blank())
|
||||||
|
{
|
||||||
|
TString msg;
|
||||||
|
msg << TR("Manca il conto analitico per le quote ammortamento normali della categoria ") << descr_categoria();
|
||||||
|
log.log(2, msg);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
tipo = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pos == 24 && riga_nor >= 0)
|
if (tipo > 0)
|
||||||
|
zio.set_conto(stringona);
|
||||||
|
|
||||||
|
return tipo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//metodi per contabilità generale CG
|
||||||
|
//-----------------------------------
|
||||||
|
int TSaldo_per_codice::compila_rmov_CG(const int tipo, const int riga_nor, TArray& righe_mov, TLog_report& log,
|
||||||
|
const int movdett) const
|
||||||
|
{
|
||||||
|
real quota;
|
||||||
|
TBill zio;
|
||||||
|
|
||||||
|
const int tipo_trovato = trova_quota_e_conto_CG(tipo, quota, zio, log);
|
||||||
|
if (tipo_trovato <= 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (tipo_trovato == 1 && riga_nor >= 0)
|
||||||
{
|
{
|
||||||
TRectype& rmovnor = (TRectype&)righe_mov[riga_nor];
|
TRectype& rmovnor = (TRectype&)righe_mov[riga_nor];
|
||||||
rmovnor.add(RMV_IMPORTO, quota);
|
rmovnor.add(RMV_IMPORTO, quota);
|
||||||
|
|
||||||
return riga_nor;
|
return riga_nor;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRigamov* rmov = new TRigamov(_grp, _spc, _cat);
|
TRigamov* rmov = new TRigamov(_grp, _spc, _cat);
|
||||||
|
|
||||||
rmov->put(RMV_SEZIONE, "D");
|
rmov->put(RMV_SEZIONE, "D");
|
||||||
rmov->put(RMV_IMPORTO, quota);
|
rmov->put(RMV_IMPORTO, quota);
|
||||||
|
|
||||||
//conto e descrizione dipendono dal livello di dettaglio stabilito nella configurazione del collegamento CG/CE
|
//conto e descrizione dipendono dal livello di dettaglio stabilito nella configurazione del collegamento CG/CE
|
||||||
switch (movdett)
|
switch (movdett)
|
||||||
{
|
{
|
||||||
@ -312,33 +453,102 @@ int TSaldo_per_codice::compila_rmov(const int tipo, const int riga_nor, TArray&
|
|||||||
|
|
||||||
//metodo di alto livello per la compilazione delle righe contabili;chiama il metodo di basso livello..
|
//metodo di alto livello per la compilazione delle righe contabili;chiama il metodo di basso livello..
|
||||||
//..compila_rmov con i parametri caso x caso
|
//..compila_rmov con i parametri caso x caso
|
||||||
int TSaldo_per_codice::genera_righe(TArray& righe_mov, TLog_report& log, const int movdett) const
|
int TSaldo_per_codice::genera_righe_CG(TArray& righe_mov, TLog_report& log, const int movdett) const
|
||||||
{
|
{
|
||||||
const int righe_prima = righe_mov.items();
|
const int righe_prima = righe_mov.items();
|
||||||
const int riga_nor = compila_rmov(1, -1, righe_mov, log, movdett);
|
|
||||||
const int riga_ant = compila_rmov(2, riga_nor, righe_mov, log, movdett);
|
const int riga_nor = compila_rmov_CG(1, -1, righe_mov, log, movdett);
|
||||||
const int riga_acc = compila_rmov(3, riga_nor, righe_mov, log, movdett);
|
const int riga_ant = compila_rmov_CG(2, riga_nor, righe_mov, log, movdett);
|
||||||
// const int riga_persa = compila_rmov(4, -1, righe_mov, log, movdett);
|
const int riga_acc = compila_rmov_CG(3, riga_nor, righe_mov, log, movdett);
|
||||||
|
//const int riga_persa = compila_rmov_CG(4, -1, righe_mov, log, movdett);
|
||||||
|
|
||||||
const int righe_dopo = righe_mov.items();
|
const int righe_dopo = righe_mov.items();
|
||||||
return righe_dopo - righe_prima; //messo qui tanto per poter compilare
|
return righe_dopo - righe_prima; //messo qui tanto per poter compilare
|
||||||
}
|
}
|
||||||
|
|
||||||
const TRectype& TSaldo_per_codice::categoria() const
|
//metodi per analitica CA
|
||||||
|
//-------------------------
|
||||||
|
int TSaldo_per_codice::compila_rmovana_CA(const int tipo, const int riga_nor, TArray& righe_movana, TLog_report& log,
|
||||||
|
const int movdett) const
|
||||||
{
|
{
|
||||||
//viene chiamato il metodo standard della ditta_cespiti con l'ultimo parametro true in modo che usi solo...
|
real quota;
|
||||||
//...le categorie valide per il collegamento alla contabilita' (tabella CCC)
|
TAnal_bill zio;
|
||||||
return ditta_cespiti().categoria(_grp, _spc, _cat, true);
|
const int tipo_trovato = trova_quota_e_conto_CA(tipo, quota, zio, log);
|
||||||
|
if (tipo_trovato <= 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (tipo_trovato == 1 && riga_nor >= 0)
|
||||||
|
{
|
||||||
|
TRectype& rmovananor = (TRectype&)righe_movana[riga_nor];
|
||||||
|
rmovananor.add(RMOVANA_IMPORTO, quota);
|
||||||
|
|
||||||
|
return riga_nor;
|
||||||
|
}
|
||||||
|
|
||||||
|
TRigamov* rmovana = new TRigamov(_grp, _spc, _cat, true);
|
||||||
|
|
||||||
|
rmovana->put(RMOVANA_SEZIONE, "D");
|
||||||
|
rmovana->put(RMOVANA_IMPORTO, quota);
|
||||||
|
|
||||||
|
//conto e descrizione dipendono dal livello di dettaglio stabilito nella configurazione del collegamento CG/CE
|
||||||
|
switch (movdett)
|
||||||
|
{
|
||||||
|
case 0: //dettaglio per categoria
|
||||||
|
rmovana->put(RMOVANA_DESCR, rmovana->descr_categoria());
|
||||||
|
break;
|
||||||
|
case 1: //dettaglio per cespite
|
||||||
|
{
|
||||||
|
const TRectype& rec_cespi = cache().get(LF_CESPI, _idcespite);
|
||||||
|
rmovana->put(RMOVANA_DESCR, rec_cespi.get(CESPI_DESC));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2: //dettaglio per cespite con sottoconto=idcespite (idcespite numerico e di 6 cifre max!)
|
||||||
|
{
|
||||||
|
const TRectype& rec_cespi = cache().get(LF_CESPI, _idcespite);
|
||||||
|
rmovana->put(RMOVANA_DESCR, rec_cespi.get(CESPI_DESC));
|
||||||
|
bool ok = real::is_natural(_idcespite);
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
const long sottoc = atol(_idcespite);
|
||||||
|
ok = sottoc > 0 && sottoc < 1000000;
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
TString16 stringona = zio.conto().left(6);
|
||||||
|
stringona << _idcespite.right(6);
|
||||||
|
zio.set_conto(stringona);
|
||||||
|
ok = zio.ok();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
TString msg;
|
||||||
|
msg.format(FR("Il codice cespite %s non e' un sottoconto valido"), (const char*)_idcespite);
|
||||||
|
log.log(2, msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
rmovana->put(RMOVANA_CODCONTO, zio.conto());
|
||||||
|
|
||||||
|
return righe_movana.add(rmovana);
|
||||||
}
|
}
|
||||||
|
|
||||||
const TString& TSaldo_per_codice::descr_categoria() const
|
|
||||||
|
int TSaldo_per_codice::genera_righe_CA(TArray& righe_movana, TLog_report& log, const int movdett) const
|
||||||
{
|
{
|
||||||
TString& wrkstring = get_tmp_string();
|
const int righe_prima = righe_movana.items();
|
||||||
wrkstring << _grp << ' ' << _spc << ' ' << _cat << ' ' ;
|
|
||||||
wrkstring << ditta_cespiti().categoria(_grp, _spc, _cat, false).get("S0");
|
const int riga_nor = compila_rmovana_CA(1, -1, righe_movana, log, movdett);
|
||||||
return wrkstring;
|
const int riga_ant = compila_rmovana_CA(2, riga_nor, righe_movana, log, movdett);
|
||||||
|
const int riga_acc = compila_rmovana_CA(3, riga_nor, righe_movana, log, movdett);
|
||||||
|
|
||||||
|
const int righe_dopo = righe_movana.items();
|
||||||
|
return righe_dopo - righe_prima;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//===============================================================================================
|
//===============================================================================================
|
||||||
//TMovimentoPN_CE
|
//TMovimentoPN_CE
|
||||||
|
|
||||||
@ -456,17 +666,17 @@ class TPlus_minus : public TSaldo_per_codice
|
|||||||
TArray _ammmv, _movam, _movce;
|
TArray _ammmv, _movam, _movce;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void genera_mov_elim_ven(TConfig& config_ditta_ce, const TDate& datacomp, const TDate& datareg,
|
void genera_mov_elim_ven(const TDate& datareg, const TDate& datacomp, const bool definitivo, TLog_report& log) const;
|
||||||
const bool definitivo, TLog_report& log) const;
|
|
||||||
TPlus_minus(const int gruppo, const TString& specie, const int categoria,
|
TPlus_minus(const int gruppo, const TString& specie, const int categoria,
|
||||||
const TArray& ammmv, const TArray& movam, const TArray& movce)
|
const TArray& ammmv, const TArray& movam, const TArray& movce)
|
||||||
: TSaldo_per_codice(gruppo, specie, categoria), _ammmv(ammmv), _movam(movam), _movce(movce) {}
|
: TSaldo_per_codice(gruppo, specie, categoria), _ammmv(ammmv), _movam(movam), _movce(movce) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
//metodo per la generazione dei movimenti dovuti a plus/minus
|
//metodo per la generazione dei movimenti dovuti a plus/minus
|
||||||
void TPlus_minus::genera_mov_elim_ven(TConfig& config_ditta_ce, const TDate& datacomp, const TDate& datareg,
|
void TPlus_minus::genera_mov_elim_ven(const TDate& datareg, const TDate& datacomp, const bool definitivo, TLog_report& log) const
|
||||||
const bool definitivo, TLog_report& log) const
|
|
||||||
{
|
{
|
||||||
|
//Parametri dalla maschera
|
||||||
|
|
||||||
//parametri da utilizzare piu' volte
|
//parametri da utilizzare piu' volte
|
||||||
TString4 codcaus;
|
TString4 codcaus;
|
||||||
//conti fondo, immobilizzo, sopravenienza passiva, plusvalenza, minusvalenza cespite
|
//conti fondo, immobilizzo, sopravenienza passiva, plusvalenza, minusvalenza cespite
|
||||||
@ -509,6 +719,7 @@ void TPlus_minus::genera_mov_elim_ven(TConfig& config_ditta_ce, const TDate& dat
|
|||||||
const TString& tipodoc = movce.get(MOVCE_TPDOC);
|
const TString& tipodoc = movce.get(MOVCE_TPDOC);
|
||||||
const TDate& datadoc = movce.get_date(MOVCE_DTDOC);
|
const TDate& datadoc = movce.get_date(MOVCE_DTDOC);
|
||||||
|
|
||||||
|
TConfig config_ditta_ce(CONFIG_DITTA, "ce");
|
||||||
if (eliminazione)
|
if (eliminazione)
|
||||||
codcaus = config_ditta_ce.get("COAUEL");
|
codcaus = config_ditta_ce.get("COAUEL");
|
||||||
else
|
else
|
||||||
@ -683,22 +894,28 @@ void TPlus_minus::genera_mov_elim_ven(TConfig& config_ditta_ce, const TDate& dat
|
|||||||
class TContabilizza_ce : public TSkeleton_application
|
class TContabilizza_ce : public TSkeleton_application
|
||||||
{
|
{
|
||||||
TContabilizza_ce_mask* _mask;
|
TContabilizza_ce_mask* _mask;
|
||||||
|
TConfig* _config_ditta_ce;
|
||||||
|
bool _has_ca;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void main_loop();
|
virtual void main_loop();
|
||||||
virtual bool create();
|
virtual bool create();
|
||||||
virtual bool destroy();
|
virtual bool destroy();
|
||||||
|
|
||||||
void elabora();
|
void elabora(); //metodo di alto livello per la gestione ordinata del casino
|
||||||
void genera_mov(TArray& righe_mov, const TDate& datareg, const TDate& datacomp,
|
void contabilizza_CG(TAssoc_array& quote_per_codice, TLog_report& cont_cesp_log); //contabilizza ammortamenti in CG
|
||||||
const TString& codcaus, const int movdett, const bool definitivo, TLog_report& log);
|
void contabilizza_CA(TAssoc_array& anal_quote_per_codice, TLog_report& cont_cesp_log); //contabilizza ammortamenti in CA
|
||||||
void delete_old_movs(const TDate& ini_es);
|
void ordina_saldi(TAssoc_array& quote, TArray& saldi_ordinati); //prende quote e restituisce saldi_ordinati sortato
|
||||||
|
void genera_mov_CG(TArray& righe_mov, TLog_report& log); //genera movimenti CG
|
||||||
|
void genera_movana_CA(TArray& righe_movana, TLog_report& log); //genera movimenti CA
|
||||||
|
void delete_old_movs(const TDate& ini_es); //accoppa i movimenti provvisori (sia i CG che i CA collegati)
|
||||||
|
//void delete_old_movanas(const TDate& ini_es, const TString& codcaus);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//eliminatore dei movimenti CG e CA eventualmente collegati
|
||||||
void TContabilizza_ce::delete_old_movs(const TDate& ini_es)
|
void TContabilizza_ce::delete_old_movs(const TDate& ini_es)
|
||||||
{
|
{
|
||||||
TMovimentoPN_CE pn;
|
TMovimentoPN_CE pn;
|
||||||
@ -712,23 +929,47 @@ void TContabilizza_ce::delete_old_movs(const TDate& ini_es)
|
|||||||
TCursor cur_mov (&pn, filtro, 2, &darec);
|
TCursor cur_mov (&pn, filtro, 2, &darec);
|
||||||
const long items = cur_mov.items();
|
const long items = cur_mov.items();
|
||||||
cur_mov.freeze();
|
cur_mov.freeze();
|
||||||
TProgind progind(items, "Eliminazione vecchi movimenti provvisori cespiti in corso...", false, true);
|
TProgind progind(items, "Eliminazione movimenti provvisori cespiti...", false, true);
|
||||||
|
|
||||||
for (cur_mov = 0; cur_mov.pos() < items; ++cur_mov)
|
for (cur_mov = 0; cur_mov.pos() < items; ++cur_mov)
|
||||||
{
|
{
|
||||||
progind.addstatus(1);
|
progind.addstatus(1);
|
||||||
pn.read();
|
pn.read();
|
||||||
pn.remove();
|
TRectype& head = pn.curr();
|
||||||
|
const long numreg = head.get_long(MOV_NUMREG);
|
||||||
|
int err = pn.remove();
|
||||||
|
//rimuove anche l'eventuale movana collegato
|
||||||
|
if (_has_ca)
|
||||||
|
{
|
||||||
|
TString query;
|
||||||
|
query << "USE MOVANA KEY 3";
|
||||||
|
query << "\nFROM NUMREGCG=#NUMREGCG";
|
||||||
|
query << "\nTO NUMREGCG=#NUMREGCG";
|
||||||
|
TISAM_recordset recset(query);
|
||||||
|
recset.set_var("#NUMREGCG", numreg);
|
||||||
|
if (recset.items() > 0)
|
||||||
|
{
|
||||||
|
TAnal_mov movana(recset.cursor()->curr(LF_MOVANA));
|
||||||
|
movana.remove(recset.cursor()->file());
|
||||||
|
}
|
||||||
|
} //if(_has_ca)...
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//metodo per la generazione di movimenti contabili con righe per categoria
|
||||||
//metodo per la generazione di movimenti con righe per categoria (chiamata se movdett=0)
|
void TContabilizza_ce::genera_mov_CG(TArray& righe_mov, TLog_report& log)
|
||||||
void TContabilizza_ce::genera_mov(TArray& righe_mov, const TDate& datareg, const TDate& datacomp, const TString& codcaus,
|
|
||||||
const int movdett, const bool definitivo, TLog_report& log)
|
|
||||||
{
|
{
|
||||||
|
//Parametri config ditta cespiti
|
||||||
|
const TString4 codcaus = _config_ditta_ce->get("COAUQU");
|
||||||
|
const int movdett = _config_ditta_ce->get_int("MOVDETT");
|
||||||
|
|
||||||
|
//Parametri maschera
|
||||||
|
const TDate fine_es = _mask->get_date(F_FINE_ES);
|
||||||
|
const TDate datareg = _mask->get_date(F_DATAREG);
|
||||||
|
const TDate datacomp = min(fine_es, datareg);
|
||||||
|
const bool definitivo = _mask->get_bool(F_PROVDEF);
|
||||||
|
|
||||||
//Riempie i campi della testata movimento
|
//Riempie i campi della testata movimento
|
||||||
long numreg = get_new_numreg();
|
long numreg = get_new_numreg();
|
||||||
|
|
||||||
@ -817,20 +1058,82 @@ void TContabilizza_ce::genera_mov(TArray& righe_mov, const TDate& datareg, const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TContabilizza_ce::genera_movana_CA(TArray& righe_movana, TLog_report& log)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void TContabilizza_ce::ordina_saldi(TAssoc_array& quote, TArray& saldi_ordinati)
|
||||||
|
{
|
||||||
|
//riempie l'array saldi_ordinati con gli elementi dell'assoc quote
|
||||||
|
FOR_EACH_ASSOC_OBJECT(quote, h, k, obj)
|
||||||
|
saldi_ordinati.add(h->remove_obj());
|
||||||
|
//accoppa l'assoc
|
||||||
|
quote.destroy();
|
||||||
|
//e ordina l'array per categorie e cespite (questo assurdo giro serve perche' l'assoc non e' ordinabile)
|
||||||
|
saldi_ordinati.sort();
|
||||||
|
}
|
||||||
|
|
||||||
|
//metodo che gestisce la creazione dei movimenti CG dovuti ad ammortamenti
|
||||||
|
void TContabilizza_ce::contabilizza_CG(TAssoc_array& quote_per_codice, TLog_report& cont_cesp_log)
|
||||||
|
{
|
||||||
|
TArray saldi_ordinati;
|
||||||
|
ordina_saldi(quote_per_codice, saldi_ordinati);
|
||||||
|
|
||||||
|
const int movdett = _config_ditta_ce->get_int("MOVDETT");
|
||||||
|
|
||||||
|
//array con le righe movimento CG
|
||||||
|
TArray righe_mov;
|
||||||
|
//riempie l'array delle righe movimento CG
|
||||||
|
FOR_EACH_ARRAY_ITEM(saldi_ordinati, riga, sldobj)
|
||||||
|
{
|
||||||
|
const TSaldo_per_codice& sld = *(const TSaldo_per_codice*)sldobj;
|
||||||
|
sld.genera_righe_CG(righe_mov, cont_cesp_log, movdett);
|
||||||
|
}
|
||||||
|
|
||||||
|
//controllo sul numero righe dell'array (serve solo per controllo al sagace programmatore...)
|
||||||
|
const int nrighemov = righe_mov.items();
|
||||||
|
|
||||||
|
//a questo punto ha l'array con le righe movimento CG completo (righe_mov); da queste righe deve costruire..
|
||||||
|
//..uno o piu' movimenti di prima nota
|
||||||
|
//In base al movdett li creera' con righe per categoria o per cespite ma con fondi per categoria
|
||||||
|
//E' un metodo semimagico!
|
||||||
|
genera_mov_CG(righe_mov, cont_cesp_log);
|
||||||
|
}
|
||||||
|
|
||||||
|
//metodo che gestisce la creazione dei movimenti CA dovuti ad ammortamenti
|
||||||
|
void TContabilizza_ce::contabilizza_CA(TAssoc_array& anal_quote_per_codice, TLog_report& cont_cesp_log)
|
||||||
|
{
|
||||||
|
TArray anal_saldi_ordinati;
|
||||||
|
ordina_saldi(anal_quote_per_codice, anal_saldi_ordinati);
|
||||||
|
|
||||||
|
const int movdett = _config_ditta_ce->get_int("MOVDETT");
|
||||||
|
|
||||||
|
//array con le righe movimento CA
|
||||||
|
TArray righe_movana;
|
||||||
|
//riempie l'array delle righe movimento CA
|
||||||
|
FOR_EACH_ARRAY_ITEM(anal_saldi_ordinati, riga, sldobj)
|
||||||
|
{
|
||||||
|
const TSaldo_per_codice& anal_sld = *(const TSaldo_per_codice*)sldobj;
|
||||||
|
anal_sld.genera_righe_CA(righe_movana, cont_cesp_log, movdett);
|
||||||
|
}
|
||||||
|
|
||||||
|
//controllo sul numero righe dell'array (serve solo per controllo al sagace programmatore...)
|
||||||
|
const int nrighmovana = righe_movana.items();
|
||||||
|
|
||||||
|
//metodo per la creazione del/dei movana analitici
|
||||||
|
genera_movana_CA(righe_movana, cont_cesp_log);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//metodo per gestire la successione degli eventi ad alto livello
|
//metodo per gestire la successione degli eventi ad alto livello
|
||||||
void TContabilizza_ce::elabora()
|
void TContabilizza_ce::elabora()
|
||||||
{
|
{
|
||||||
|
// 0) Acquisizione parametri generali, eliminazione movimenti provvisori
|
||||||
|
//--------------------------------------------------------------------------------
|
||||||
//gettiamo un po' di parametri dalla maschera
|
//gettiamo un po' di parametri dalla maschera
|
||||||
const long codes = _mask->get_long(F_ESERCIZIO);
|
const long codes = _mask->get_long(F_ESERCIZIO);
|
||||||
const TDate ini_es = _mask->get_date(F_INIZIO_ES);
|
const TDate ini_es = _mask->get_date(F_INIZIO_ES);
|
||||||
const TDate fine_es = _mask->get_date(F_FINE_ES);
|
const TDate fine_es = _mask->get_date(F_FINE_ES);
|
||||||
//deve accoppare i movimenti provvisori di prima nota da inizio esercizio ad oggi?
|
|
||||||
if (_mask->get_bool(F_KILLOLD))
|
|
||||||
delete_old_movs(ini_es);
|
|
||||||
|
|
||||||
//ragionamenti sulle date
|
|
||||||
const TDate datareg = _mask->get_date(F_DATAREG);
|
|
||||||
const TDate datacomp = min(fine_es, datareg);
|
|
||||||
//se il trasferimento e' definitivo la data di calcolo e' quella finale dell'esercizio selezionato, senno'...
|
//se il trasferimento e' definitivo la data di calcolo e' quella finale dell'esercizio selezionato, senno'...
|
||||||
//...e' quella indicata in F_DATACALC
|
//...e' quella indicata in F_DATACALC
|
||||||
TDate datacalc;
|
TDate datacalc;
|
||||||
@ -840,32 +1143,39 @@ void TContabilizza_ce::elabora()
|
|||||||
else
|
else
|
||||||
datacalc = _mask->get_date(F_DATACALC);
|
datacalc = _mask->get_date(F_DATACALC);
|
||||||
|
|
||||||
|
const TDate datareg = _mask->get_date(F_DATAREG);
|
||||||
|
const TDate datacomp = min(fine_es, datareg);
|
||||||
|
|
||||||
|
//Legge un po' di parametri dal ditta.ini che servono al tipo di calcolo
|
||||||
|
//Situazione fiscale (99,99%) o civilistica (1 suora su 1.000.000)?
|
||||||
|
const int tpamm = _config_ditta_ce->get_int("TPAMM");
|
||||||
|
//Tipo di calcolo da eseguire in base al dettaglio
|
||||||
|
const int movdett = _config_ditta_ce->get_int("MOVDETT");
|
||||||
|
//Genera movimenti plus/minus? Parametro decisivo per poter generare movimenti cg da movimenti ce
|
||||||
|
const bool mov_plusmin = _config_ditta_ce->get_bool("COPLMN");
|
||||||
|
|
||||||
|
//deve accoppare i movimenti provvisori di prima nota da inizio esercizio ad oggi?
|
||||||
|
if (_mask->get_bool(F_KILLOLD))
|
||||||
|
{
|
||||||
|
delete_old_movs(ini_es);
|
||||||
|
}
|
||||||
|
|
||||||
//report con log errori
|
//report con log errori
|
||||||
TLog_report cont_cesp_log(TR("Contabilizzazione cespiti"));
|
TLog_report cont_cesp_log(TR("Contabilizzazione cespiti"));
|
||||||
cont_cesp_log.kill_duplicates();
|
cont_cesp_log.kill_duplicates();
|
||||||
|
|
||||||
//Legge un po' di parametri dal ditta.ini che servono al tipo di calcolo
|
|
||||||
TConfig config_ditta_ce(CONFIG_DITTA, "ce");
|
|
||||||
//Situazione fiscale (99,99%) o civilistica (1 suora su 1.000.000)?
|
|
||||||
const int tpamm = config_ditta_ce.get_int("TPAMM");
|
|
||||||
//Tipo di calcolo da eseguire in base al dettaglio
|
|
||||||
const int movdett = config_ditta_ce.get_int("MOVDETT");
|
|
||||||
//Codice causale da mettere nei movimenti generati
|
|
||||||
const TString4 codcaus = config_ditta_ce.get("COAUQU");
|
|
||||||
//Genera movimenti plus/minus? Parametro decisivo per poter generare movimenti cg da movimenti ce
|
|
||||||
const bool mov_plusmin = config_ditta_ce.get_bool("COPLMN");
|
|
||||||
|
|
||||||
//**********************************************************************************
|
// 1) Preparazione contabilizzazione CG/CA: ammortamenti
|
||||||
// 1) Generazione movimenti CG da ammortamenti
|
//----------------------------------------------------------------------
|
||||||
//**********************************************************************************
|
|
||||||
//programma vero e proprio (calcolo ammortamenti, selezione cespiti validi, trasferimento)
|
//programma vero e proprio (calcolo ammortamenti, selezione cespiti validi, trasferimento)
|
||||||
TISAM_recordset cespiti("USE CESPI");
|
TISAM_recordset cespiti("USE CESPI");
|
||||||
const TRecnotype nrec = cespiti.items();
|
const TRecnotype nrec = cespiti.items();
|
||||||
|
|
||||||
//Assoc_array Categoria-QammTot
|
//Assoc_array Categoria-QammTot
|
||||||
TAssoc_array quote_per_codice;
|
TAssoc_array quote_per_codice, anal_quote_per_codice;
|
||||||
TArray ammo_plus_minus;
|
TArray ammo_plus_minus;
|
||||||
|
|
||||||
|
//giro su tutti i cespiti
|
||||||
TProgind pi(nrec, TR("Ricalcolo ammortamenti in corso..."), true, true);
|
TProgind pi(nrec, TR("Ricalcolo ammortamenti in corso..."), true, true);
|
||||||
for (int i = 0; cespiti.move_to(i); i++)
|
for (int i = 0; cespiti.move_to(i); i++)
|
||||||
{
|
{
|
||||||
@ -888,9 +1198,13 @@ void TContabilizza_ce::elabora()
|
|||||||
const TRectype& rec_ammce = cespite.amm_pro();
|
const TRectype& rec_ammce = cespite.amm_pro();
|
||||||
|
|
||||||
//in base al tipo di dettaglio sceglie il codice dell'assoc_array
|
//in base al tipo di dettaglio sceglie il codice dell'assoc_array
|
||||||
//movdett=0 -> codice=codice categoria (assoc_array con record per categorie)
|
//movdett = 0 -> codice=codice categoria (assoc_array con record per categorie)
|
||||||
//movdett=1;2 -> codice=idcespite (assoc_array con record per cespite)
|
//movdett = 1;2 -> codice=idcespite (assoc_array con record per cespite)
|
||||||
TToken_string gsc;
|
|
||||||
|
//1.1) preparazione contabilizzazione CG
|
||||||
|
//----------------------------------------
|
||||||
|
TToken_string gsc;
|
||||||
|
//chiave per CG
|
||||||
gsc.add(gruppo); gsc.add(specie); gsc.add(codcat);
|
gsc.add(gruppo); gsc.add(specie); gsc.add(codcat);
|
||||||
if (movdett != 0)
|
if (movdett != 0)
|
||||||
gsc.add(idcespite);
|
gsc.add(idcespite);
|
||||||
@ -914,42 +1228,102 @@ void TContabilizza_ce::elabora()
|
|||||||
|
|
||||||
TPlus_minus* pm = new TPlus_minus(gruppo, specie, codcat, ammmv, movam, movce);
|
TPlus_minus* pm = new TPlus_minus(gruppo, specie, codcat, ammmv, movam, movce);
|
||||||
ammo_plus_minus.add(pm);
|
ammo_plus_minus.add(pm);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
//1.2) preparazione contabilizzazione CA
|
||||||
} //for(int i...
|
//----------------------------------------
|
||||||
|
if (_has_ca)
|
||||||
|
{
|
||||||
|
//per prima cosa necessita dei valori da salcecms
|
||||||
|
TToken_string key;
|
||||||
|
key.add(idcespite);
|
||||||
|
key.add(codes);
|
||||||
|
TRecord_array righe_salcecms(key, LF_SALCECMS);
|
||||||
|
//se il cespite, nell'esercizio selezionato, non ha manco un record in salcecms -> si assegna la chiave..
|
||||||
|
//..di default di salcecms, che si trova nella tabella CCE dell'esercizio cespite in questione
|
||||||
|
if (righe_salcecms.rows() == 0)
|
||||||
|
{
|
||||||
|
TString4 anno;
|
||||||
|
anno << codes;
|
||||||
|
const TRectype& rec_cce = cache().get("CCE", anno);
|
||||||
|
const TString& codcdc = rec_cce.get("S2");
|
||||||
|
const TString& codcms = rec_cce.get("S3");
|
||||||
|
const TString& codfase = rec_cce.get("S4");
|
||||||
|
TRectype rec_salcecms_default(LF_SALCECMS);
|
||||||
|
rec_salcecms_default.put(SALCECMS_IDCESPITE, idcespite);
|
||||||
|
rec_salcecms_default.put(SALCECMS_CODES, codes);
|
||||||
|
rec_salcecms_default.put(SALCECMS_NRIGA, 1);
|
||||||
|
rec_salcecms_default.put(SALCECMS_CODCDC, codcdc);
|
||||||
|
rec_salcecms_default.put(SALCECMS_CODCMS, codcms);
|
||||||
|
rec_salcecms_default.put(SALCECMS_CODFASE, codfase);
|
||||||
|
rec_salcecms_default.put(SALCECMS_PERCUTIL, CENTO);
|
||||||
|
//aggiunge al record_array vuoto il record standard
|
||||||
|
righe_salcecms.add_row(rec_salcecms_default);
|
||||||
|
}
|
||||||
|
//se il record_array ha un solo elemento (99% dei casi) è inutile impazzire...
|
||||||
|
if (righe_salcecms.rows() == 1)
|
||||||
|
{
|
||||||
|
const TRectype& curr_salcecms_line = righe_salcecms.row(1);
|
||||||
|
key = gsc;
|
||||||
|
key.add(curr_salcecms_line.get(SALCECMS_CODCDC));
|
||||||
|
key.add(curr_salcecms_line.get(SALCECMS_CODCMS));
|
||||||
|
key.add(curr_salcecms_line.get(SALCECMS_CODFASE));
|
||||||
|
TSaldo_per_codice* anal_sc = (TSaldo_per_codice*)anal_quote_per_codice.objptr(key);
|
||||||
|
//se non trova il codice (categoria o cespite) lo aggiunge...
|
||||||
|
if (anal_sc == NULL)
|
||||||
|
{
|
||||||
|
anal_sc = new TSaldo_per_codice(gruppo, specie, codcat, idcespite);
|
||||||
|
quote_per_codice.add(key, anal_sc);
|
||||||
|
}
|
||||||
|
anal_sc->add(rec_ammce);
|
||||||
|
}
|
||||||
|
else //senno' impazziamo!...
|
||||||
|
{
|
||||||
|
TGeneric_distrib d_qnor(rec_ammce.get_real(AMMCE_QNOR), 2);
|
||||||
|
TGeneric_distrib d_qacc(rec_ammce.get_real(AMMCE_QACC), 2);
|
||||||
|
TGeneric_distrib d_qant(rec_ammce.get_real(AMMCE_QANT), 2);
|
||||||
|
|
||||||
TArray saldi_ordinati;
|
for (int i = righe_salcecms.last_row(); i > 0; i = righe_salcecms.pred_row(i))
|
||||||
//riempie l'array saldi_ordinati con gli elementi dell'assoc quote_per_codice
|
{
|
||||||
FOR_EACH_ASSOC_OBJECT(quote_per_codice, h, k, obj)
|
const TRectype& curr_salcecms_line = righe_salcecms.row(i);
|
||||||
saldi_ordinati.add(h->remove_obj());
|
const real percutil = curr_salcecms_line.get_real(SALCECMS_PERCUTIL);
|
||||||
//accoppa l'assoc
|
d_qnor.add(percutil);
|
||||||
quote_per_codice.destroy();
|
d_qacc.add(percutil);
|
||||||
//e ordina l'array per categorie e cespite (questo assurdo giro serve perche' l'assoc non e' ordinabile)
|
d_qant.add(percutil);
|
||||||
saldi_ordinati.sort();
|
}
|
||||||
|
for (int i = righe_salcecms.last_row(); i > 0; i = righe_salcecms.pred_row(i))
|
||||||
//array con le righe movimento CG
|
{
|
||||||
TArray righe_mov;
|
const TRectype& curr_salcecms_line = righe_salcecms.row(i);
|
||||||
//riempie l'array delle righe movimento CG
|
key = gsc;
|
||||||
FOR_EACH_ARRAY_ITEM(saldi_ordinati, riga, sldobj)
|
key.add(curr_salcecms_line.get(SALCECMS_CODCDC));
|
||||||
{
|
key.add(curr_salcecms_line.get(SALCECMS_CODCMS));
|
||||||
const TSaldo_per_codice& sld = *(const TSaldo_per_codice*)sldobj;
|
key.add(curr_salcecms_line.get(SALCECMS_CODFASE));
|
||||||
sld.genera_righe(righe_mov, cont_cesp_log, movdett);
|
|
||||||
}
|
|
||||||
|
|
||||||
//controllo sul numero righe dell'array (serve solo per controllo al sagace programmatore...)
|
TSaldo_per_codice* anal_sc = (TSaldo_per_codice*)anal_quote_per_codice.objptr(key);
|
||||||
const int nrighemov = righe_mov.items();
|
if (anal_sc == NULL)
|
||||||
|
{
|
||||||
|
anal_sc = new TSaldo_per_codice(gruppo, specie, codcat, idcespite);
|
||||||
|
anal_quote_per_codice.add(key, anal_sc);
|
||||||
|
}
|
||||||
|
anal_sc->_qnor += d_qnor.get();
|
||||||
|
anal_sc->_qacc += d_qacc.get();
|
||||||
|
anal_sc->_qant += d_qant.get();
|
||||||
|
} //for(int i...
|
||||||
|
} //else(if(righe_salcecms == 1...
|
||||||
|
} //if(_has_ca)...
|
||||||
|
|
||||||
//a questo punto ha l'array con le righe movimento CG completo (righe_mov); da queste righe deve costruire..
|
} //if (cespite.calc_amm(tpamm,...
|
||||||
//..uno o piu' movimenti di prima nota
|
} //for (int i = 0; cespiti.move_to(i); i++)...
|
||||||
//In base al movdett li creera' con righe per categoria o per cespite ma con fondi per categoria
|
|
||||||
//E' un metodo semimagico!
|
|
||||||
genera_mov(righe_mov, datareg, datacomp, codcaus, movdett, definitivo, cont_cesp_log);
|
|
||||||
|
|
||||||
//**********************************************************************************
|
|
||||||
// 2) Generazione movimenti CG da movimenti cespiti di vendita/eliminazione
|
// 2) Generazione movimenti CG da ammortamenti cespiti
|
||||||
//**********************************************************************************
|
//----------------------------------------------------------------
|
||||||
|
//contabilizzazione in CG
|
||||||
|
contabilizza_CG(quote_per_codice, cont_cesp_log);
|
||||||
|
|
||||||
|
|
||||||
|
// 3) Generazione movimenti CG da movimenti cespiti di vendita/eliminazione
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
//solo se in configurazione ditta cespiti e' attivo il flag di generazione movimenti plus/minus...
|
//solo se in configurazione ditta cespiti e' attivo il flag di generazione movimenti plus/minus...
|
||||||
if (mov_plusmin)
|
if (mov_plusmin)
|
||||||
{
|
{
|
||||||
@ -960,13 +1334,18 @@ void TContabilizza_ce::elabora()
|
|||||||
FOR_EACH_ARRAY_ITEM(ammo_plus_minus, riga, pmobj)
|
FOR_EACH_ARRAY_ITEM(ammo_plus_minus, riga, pmobj)
|
||||||
{
|
{
|
||||||
const TPlus_minus& pm = *(const TPlus_minus*)pmobj;
|
const TPlus_minus& pm = *(const TPlus_minus*)pmobj;
|
||||||
pm.genera_mov_elim_ven(config_ditta_ce, datacomp, datareg, definitivo, cont_cesp_log);
|
pm.genera_mov_elim_ven(datareg, datacomp, definitivo, cont_cesp_log);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//***************************************
|
// 4) Generazione movimenti CA da ammortamenti cespiti
|
||||||
// 3) stampa il log degli errori
|
//----------------------------------------------------------
|
||||||
//***************************************
|
//contabilizzazione in CA
|
||||||
|
if (_has_ca)
|
||||||
|
contabilizza_CA(anal_quote_per_codice, cont_cesp_log);
|
||||||
|
|
||||||
|
// 5) stampa il log degli errori
|
||||||
|
//---------------------------------------
|
||||||
TReport_book book;
|
TReport_book book;
|
||||||
book.add(cont_cesp_log);
|
book.add(cont_cesp_log);
|
||||||
book.preview();
|
book.preview();
|
||||||
@ -976,11 +1355,17 @@ void TContabilizza_ce::elabora()
|
|||||||
bool TContabilizza_ce::create()
|
bool TContabilizza_ce::create()
|
||||||
{
|
{
|
||||||
_mask = new TContabilizza_ce_mask;
|
_mask = new TContabilizza_ce_mask;
|
||||||
|
//chiede se ha la CA; serve per la contabilizzazione analitica
|
||||||
|
_has_ca = dongle().active(CAAUT);
|
||||||
|
//config ditta cespiti
|
||||||
|
_config_ditta_ce = new TConfig(CONFIG_DITTA, "ce");
|
||||||
|
|
||||||
return TSkeleton_application::create();
|
return TSkeleton_application::create();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TContabilizza_ce::destroy()
|
bool TContabilizza_ce::destroy()
|
||||||
{
|
{
|
||||||
|
delete _config_ditta_ce;
|
||||||
delete _mask;
|
delete _mask;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -119,6 +119,7 @@ END
|
|||||||
DATA F_DATACALC
|
DATA F_DATACALC
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 8 "Data calcolo ammortamenti "
|
PROMPT 2 8 "Data calcolo ammortamenti "
|
||||||
|
FLAGS "A"
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user