Patch level :2.2 nopatch

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :un sacco di modifiche su ribaltamenti, tabelle ripartizioni, conversione ecc.


git-svn-id: svn://10.65.10.50/trunk@12733 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2005-02-23 09:30:28 +00:00
parent 4da0917806
commit f99184fbe6
10 changed files with 178 additions and 53 deletions

View File

@ -13,7 +13,7 @@ int main(int argc, char** argv)
case 4: ca0500(argc,argv); break; //gestione centri di costo
case 5: ca0600(argc,argv); break; //gestione commesse
case 6: ca0700(argc,argv); break; //gestione fasi
case 7: ca0800(argc,argv); break; // ribaltamenti
case 7: ca0800(argc,argv); break; // tabelle ripartizioni
default: ca0100(argc,argv); break; // gestione tabelle
}
exit(0);

View File

@ -122,7 +122,7 @@ TMask * Tab_app_ca::set_mask(TMask * _m)
if (tabname == "CDC")
m = new TMask_tabanal("CDC", "CdC", "CdCDes"); else
if (tabname == "CMS")
m = new TMask_tabanal("CDC", "Cms", "CmsDes"); else
m = new TMask_tabanal("CMS", "Cms", "CmsDes"); else
if (tabname == "FSC")
m = new TMask_tabanal("FSC", "Fsc", "FscDes");
else

View File

@ -143,7 +143,7 @@ class TRiparti_app : public TRelation_application
TRelation* _rel;
TRiparti_msk* _msk;
const TString& somma_campi(TToken_string& row, int first) const;
const TString& somma_campi(TToken_string& row, int first, bool pdc = false) const;
void write_rows();
void spezza_campo(const TString& str, TToken_string& row, int first) const;
@ -160,7 +160,7 @@ protected:
virtual TMask* get_mask(int) { return _msk; }
};
const TString& TRiparti_app::somma_campi(TToken_string& row, int first) const
const TString& TRiparti_app::somma_campi(TToken_string& row, int first, bool pdc) const
{
TSheet_field& sheet = _msk->sfield(F_SHEET);
TMask& m = sheet.sheet_mask();
@ -174,7 +174,10 @@ const TString& TRiparti_app::somma_campi(TToken_string& row, int first) const
if (m.id2pos(id+i) < 0)
break;
const TEdit_field& fld = m.efield(id+i);
token.left_just(fld.size());
if (pdc)
token.right_just(fld.size(), '0');
else
token.left_just(fld.size());
str << token;
}
return str;
@ -211,6 +214,9 @@ void TRiparti_app::write_rows()
TRecord_array a(LF_RRIP, "NRIGA");
a.set_key(key);
TConfig ini(CONFIG_DITTA, "ca");
const bool use_pdc = ini.get_bool("UsePdcc");
TSheet_field& sheet = _msk->sfield(F_SHEET);
FOR_EACH_SHEET_ROW(sheet, i, row)
{
@ -219,7 +225,7 @@ void TRiparti_app::write_rows()
rec.put("CODCOSTO", somma_campi(*row, 1));
rec.put("CODCMS", somma_campi(*row, 5));
rec.put("CODFASE", somma_campi(*row, 9));
rec.put("CODCONTO", somma_campi(*row,13));
rec.put("CODCONTO", somma_campi(*row,13,use_pdc));
}
a.rewrite();
}

View File

@ -51,7 +51,7 @@ BEGIN
COPY USE F_CODICE_I
INPUT TIPO "B"
INPUT CODICE F_CODICE_B
DISPLAY "Codice " CODICE
DISPLAY "Codice@8 " CODICE
DISPLAY "Costo@20" CODCOSTO
DISPLAY "Commessa@20" CODCMS
DISPLAY "Descrizione@50" DESCRIZ

View File

@ -22,6 +22,7 @@
class TMovanal_msk : public TAutomask
{
TAssoc_array _saldi;
bool _use_pdc;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly);
@ -30,7 +31,7 @@ protected:
const TToken_string& rec2key(const TRectype& rec) const;
void aggiorna_saldo_riga(int r);
const TString& somma_campi(TToken_string& row, int first) const;
const TString& somma_campi(TToken_string& row, int first, bool pdc = false) const;
// Lettura movimento contabile
TToken_string& get_rip_row(const TRectype& rrip);
@ -135,7 +136,7 @@ TToken_string& TMovanal_msk::get_rip_row(const TRectype& rrip)
keyrow = somma_campi(*row, pos_cdc);
keyrow.add(somma_campi(*row, pos_cms));
keyrow.add(somma_campi(*row, pos_fas));
keyrow.add(somma_campi(*row, pos_con));
keyrow.add(somma_campi(*row, pos_con, _use_pdc));
if (keyrow == keyrip)
return *row;
}
@ -357,7 +358,7 @@ bool TMovanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly
return true;
}
const TString& TMovanal_msk::somma_campi(TToken_string& row, int first) const
const TString& TMovanal_msk::somma_campi(TToken_string& row, int first, bool pdc) const
{
TSheet_field& sheet = sfield(F_RIGHE);
TMask& m = sheet.sheet_mask();
@ -371,7 +372,10 @@ const TString& TMovanal_msk::somma_campi(TToken_string& row, int first) const
break;
const TEdit_field& fld = m.efield(id+i);
token = row.get(first+i);
token.left_just(fld.size());
if (pdc)
token.right_just(fld.size(), '0');
else
token.left_just(fld.size());
str << token;
}
return str;
@ -423,7 +427,7 @@ bool TMovanal_msk::row2rec(int r, TRectype& rec) const
rec.put(RMOVANA_CODCCOSTO, somma_campi(row, sheet.cid2index(S_CDC1)));
rec.put(RMOVANA_CODCMS, somma_campi(row, sheet.cid2index(S_CMS1)));
rec.put(RMOVANA_CODFASE, somma_campi(row, sheet.cid2index(S_FAS1)));
rec.put(RMOVANA_CODCONTO, somma_campi(row, sheet.cid2index(S_CON1)));
rec.put(RMOVANA_CODCONTO, somma_campi(row, sheet.cid2index(S_CON1), _use_pdc));
return true;
}
@ -532,7 +536,7 @@ TMovanal_msk::TMovanal_msk() : TAutomask("ca2100a")
sm.hide(-1); // Nasconde tutti campi fittizi
TConfig ini(CONFIG_DITTA, "ca");
const bool use_pdc = ini.get_bool("UsePdcc");
_use_pdc = ini.get_bool("UsePdcc");
const short id_cdc = 201+sf.cid2index(S_CDC1);
const short id_cms = 201+sf.cid2index(S_CMS1);
@ -542,7 +546,7 @@ TMovanal_msk::TMovanal_msk() : TAutomask("ca2100a")
ca_create_fields(sm, LF_CDC, 1, 2, id_cdc, id_cdc+50);
ca_create_fields(sm, LF_COMMESSE, 1, 6, id_cms, id_cms+50);
ca_create_fields(sm, LF_FASI, 1, 10, id_fas, id_fas+50);
ca_create_fields(sm, use_pdc ? LF_PCON : LF_PCONANA, 1, 14, id_con, id_con+50);
ca_create_fields(sm, _use_pdc ? LF_PCON : LF_PCONANA, 1, 14, id_con, id_con+50);
for (short id = id_con+3; id >= id_cdc; id--)
{

View File

@ -62,29 +62,32 @@ TRipartizione::TRipartizione(TString16 codice) : TMultiple_rectype(LF_RIP)
//--------------------------------------------------------------------
class TCache_ripartizioni : public TCache
{
TLocalisamfile _rip; //testate delle ripartizioni
protected:
virtual TObject* key2obj(const char* key);
public:
TRecord_array& righe(const char* costo);
TCache_ripartizioni() : _rip(LF_RIP) {_rip.setkey(4);}
const TRecord_array& righe(const char* costo);
};
TObject* TCache_ripartizioni::key2obj(const char* key)
{
TLocalisamfile rip(LF_RIP);
rip.setkey(4);
rip.put(RIP_TIPO, "B");
rip.put(RIP_CODCOSTO, key); //chiave 4 del file testate delle ripartizioni
TString16 chiave;
if (rip.read() == NOERR)
chiave << "B|" << rip.get(RIP_CODICE);
TRecord_array* rows = new TRecord_array(LF_RRIP, RRIP_NRIGA);
TRectype* chiave = new TRectype(LF_RRIP);
// chiave.put(RRIP_TIPO, "B");
// chiave.put(RRIP_CODICE, codice);
return (TObject*);
TRecord_array* rows = new TRecord_array(chiave, LF_RRIP);
return (TObject*)rows;
}
TRecord_array& TCache_ripartizioni::righe(const char* costo)
const TRecord_array& TCache_ripartizioni::righe(const char* costo)
{
return *(const TRecord_array*)objptr(costo);
}
//--------------------------------------------------------------------
@ -93,6 +96,7 @@ TRecord_array& TCache_ripartizioni::righe(const char* costo)
class TRib_movanal_app : public TSkeleton_application
{
TRib_movanal_msk * _mask;
TCache_ripartizioni _cache_rip;
protected:
virtual bool create();
@ -117,6 +121,14 @@ bool TRib_movanal_app::destroy()
return TSkeleton_application::destroy();
}
static void copia_campo(const TRectype& src, const char* campo_src,
TRectype& dst, const char* campo_dst)
{
const TString& valore = src.get(campo_src);
if (!valore.blank())
dst.put(campo_dst, valore);
}
bool TRib_movanal_app::cappotta_movimento(const TRelation& rel, void* pJolly)
{
TRib_movanal_app* app = (TRib_movanal_app*)pJolly;
@ -124,20 +136,56 @@ bool TRib_movanal_app::cappotta_movimento(const TRelation& rel, void* pJolly)
TAnal_mov& anal_mov = (TAnal_mov&)rel.curr(); //movimento analitica
TRecord_array& input_rows = anal_mov.body(); //record_array con le righe del mov_anal (INPUT)
//controllare
TRecord_array output_rows = input_rows; //crea il record_array di output come copia dell'INPUT..
output_rows.destroy_rows(); //..e poi lo pulisce
TToken_string key; //tokenstring in cui parcheggiare la chiave del record
for (int i = 1; i <= input_rows.rows(); i++)
bool ho_cambiato_qualchecosa = false;
//Esploditore
for (int r = 1; r <= input_rows.rows(); r++)
{
const TRectype& rec = input_rows.row(i);
key = "B";
key.add(rec.get(RMOVANA_CODCCOSTO));
const TRectype& rec = input_rows.row(r);
const TRecord_array& rrip = app->_cache_rip.righe(rec.get(RMOVANA_CODCCOSTO));
if (rrip.rows() > 0) //ci sono righe di ripartizione
{
// Importo totale da distribuire arrotondato ai decimali della valuta di conto
TGeneric_distrib distrib(rec.get_real(RMOVANA_IMPORTO), TCurrency::get_firm_dec());
// Calcolo tutte le percentuali da ripartire
int i;
for (i = 1; i <= rrip.rows(); i++)
distrib.add(rrip[i].get_real("RIPARTO"));
for (i = 1; i <= rrip.rows(); i++)
{
TRectype* newrec = new TRectype(rec);
const real imp = distrib.get(); // Legge la quota da distribuire
newrec->put("IMPORTO", imp); //e la mette nella nuova riga
//poi copia i valori dei campi cdc,cms,fsc,con in quelli di tipo ori (nello stesso record)
copia_campo(rec, RMOVANA_CODCCOSTO, *newrec, RMOVANA_CODCCORI);
copia_campo(rec, RMOVANA_CODCMS, *newrec, RMOVANA_CODCMSORI);
copia_campo(rec, RMOVANA_CODFASE, *newrec, RMOVANA_CODFASEORI);
copia_campo(rec, RMOVANA_CODCONTO, *newrec, RMOVANA_CODCONTORI);
//e mette nei campi std i valori che trova nelle righe ripartizione
copia_campo(rrip[i], RRIP_CODCOSTO, *newrec, RMOVANA_CODCCOSTO);
copia_campo(rrip[i], RRIP_CODCMS, *newrec, RMOVANA_CODCMS);
copia_campo(rrip[i], RRIP_CODFASE, *newrec, RMOVANA_CODFASE);
copia_campo(rrip[i], RRIP_CODCONTO, *newrec, RMOVANA_CODCONTO);
output_rows.add_row(newrec);
ho_cambiato_qualchecosa = true;
}
}
else //nessuna riga di ripartizione->aggiungo la riga input all'output
{
output_rows.add_row(rec);
}
}
if (ho_cambiato_qualchecosa)
output_rows.rewrite();
return true;
}
@ -158,6 +206,7 @@ void TRib_movanal_app::main_loop()
//usa la scan dei TCursor,quindi niente progind e for,x' gia' nel metodo
if (items > 0)
{
rel_movana.lfile().set_curr(new TAnal_mov); //il record principale della rel e' un TMov_anal!!
cur_movana.scan(cappotta_movimento, this, "Ribaltamento movimenti...");
}
else

View File

@ -1,4 +1,5 @@
#include <applicat.h>
#include <confapp.h>
#include <progind.h>
#include <relation.h>
#include <tabutil.h>
@ -12,6 +13,9 @@
#include "../cg/cg2101.h"
#include "calib01.h"
#include "cdc.h"
//#include "cms.h"
#include "movana.h"
#include "rmovana.h"
@ -175,16 +179,78 @@ bool TConversione_cm2ca::convert_phases()
curfsc.freeze();
TRectype& fasi_rec = fasi.curr();
TProgind pi(nrectab, "Conversione tabella fasi");
TRelation* relazione = NULL;
TCursor* cursore = NULL;
//se sono gia' state configurate le fasi nel ditta.ini...
/* TConfig config(CONFIG_DITTA, "ca");
const TString& fathfasi = config.get( "FathFasi", "ca");
if (fathfasi == "CDC")
{
TLocalisamfile cdc(LF_CDC); //devono gia' essere stati creati i files dell'analitica
if (cdc.first() == NOERR) //se il file del piano dei conti ha almeno un record...
{
relazione = new TRelation(LF_CDC);
cursore = new TCursor(relazione);
}
}
else if (fathfasi == "CMS")
{
TLocalisamfile cms(LF_COMMESSE); //devono gia' essere stati creati i files dell'analitica
if (cms.first() == NOERR) //se il file del piano dei conti ha almeno un record...
{
relazione = new TRelation(LF_COMMESSE);
cursore = new TCursor(relazione);
}
}
TRecnotype items = 0;
if (cursore !=NULL)
{
items = cursore->items();
cursore->freeze();
}
*/
for (curfsc = 0; curfsc.pos() < nrectab; ++curfsc)
{
pi.addstatus(1);
fasi_rec.zero();
fasi_rec.put("CODFASE", fsc.get("CODTAB"));
fasi_rec.put("DESCRIZ", fsc.get("S0"));
fasi.write();
if (cursore == NULL)
{
fasi_rec.zero();
fasi_rec.put("CODFASE", fsc.get("CODTAB"));
fasi_rec.put("DESCRIZ", fsc.get("S0"));
fasi.write();
}
/* else
{
TString80 codice;
const TRectype& rec = cursore->curr();
for (*cursore = 0; cursore->pos() < items; ++*cursore)
{
switch (rec.num())
{
case LF_CDC:
codice = rec.get(CDC_CODCOSTO);
break;
case LF_CMS:
codice = rec.get("CODCMS");
break;
default:
break;
}
fasi_rec.zero();
fasi_rec.put("CODCMSFAS", codice);
fasi_rec.put("CODFASE", fsc.get("CODTAB"));
fasi_rec.put("DESCRIZ", fsc.get("S0"));
fasi.write();
}
}*/
}
return true;
return true;
}
//------------------------------------------------------------------------------------------------

View File

@ -57,7 +57,9 @@ const char* TMultilevel_code_info::get_key_fieldname(int k) const
const RecDes& rd = prefix().get_recdes(_logicnum);
CHECKD(k > 0 && k <= rd.NKeys, "Invalid key ", k);
const KeyDes& ky = rd.Ky[k-1];
const int idx = (_logicnum == LF_TAB || _logicnum == LF_TABCOM) ? 1 : 0;
int idx = 0;
if (k == 1 && (_logicnum == LF_TAB || _logicnum == LF_TABCOM || _logicnum == LF_FASI))
idx = 1;
const int pos = ky.FieldSeq[idx] % MaxFields;
return rd.Fd[pos].Name;
}
@ -102,7 +104,7 @@ TMultilevel_code_info::TMultilevel_code_info(int logicnum) : _logicnum(logicnum)
_picture.add("999999");
_prompt.add("Sottoconto");
_key2_fields.add(new TFieldref(PCN_DESCR, LF_PCON));
_key2_fields.add(new TFieldref(PCN_DESCR, LF_PCON));
}
else
{
@ -440,17 +442,6 @@ const TToken_string& TSimple_anal_msk::get_key_value(int c) const
return val;
}
const char* TSimple_anal_msk::get_key_fieldname(int k) const
{
const int logic = get_logicnum();
const RecDes& rd = prefix().get_recdes(logic);
CHECKD(k > 0 && k <= rd.NKeys, "Invalid key ", k);
const KeyDes& ky = rd.Ky[k-1];
const int idx = (logic == LF_TAB || logic == LF_TABCOM) ? 1 : 0;
const int pos = ky.FieldSeq[idx] % MaxFields;
return rd.Fd[pos].Name;
}
void TSimple_anal_msk::append_select_clause(ostream& out, int level) const
{
const TFieldref& key = fieldref(level, 1);
@ -1167,7 +1158,7 @@ void ca_create_browse1(TEdit_field& kfld, int level, int logic, short key_id, sh
out << "DI \"" << TR("Descrizione") << "@50\" " << field << endl;
out << "OU " << (des_id+level) << ' ' << field << endl;
out << "CH RE" << endl;
//out << "FI " << mci.fieldref(level) << endl;
out << "FI " << mci.fieldref(level) << endl;
out << "EN" << endl;
out.close();

View File

@ -54,8 +54,6 @@ protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual void read(const char* msk);
const char* get_key_fieldname(int k) const;
void append_select_clause(ostream& out, int level) const;
void create_key_browse(TEdit_field& kfld, int level);
void create_des_browse(TEdit_field& kfld, int level);

11
ca/cdc.h Executable file
View File

@ -0,0 +1,11 @@
#ifndef __CDC_H
#define __CDC_H
#define CDC_CODCOSTO "CODCOSTO"
#define CDC_DESCRIZ "DESCRIZ"
#define CDC_DESCRAGG "DESCRAGG"
#define CDC_ADDETTI "ADDETTI"
#define CDC_GESTFASI "GESTFASI"
#define CDC_APPOGGIO "APPOGGIO"
#endif