Patch level : OMASA

Files correlati     : cgp4.exe cgp4100a.msk omasa.ini
Ricompilazione Demo : [ ]
Commento            : Ulteriori modifiche a OSAMA B.L.


git-svn-id: svn://10.65.10.50/trunk@12128 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 2004-05-28 14:31:37 +00:00
parent fe2e1eb01e
commit 3ffd1a4a2e
4 changed files with 93 additions and 107 deletions

View File

@ -23,6 +23,8 @@
#define MAX_CG_ROWS 98 #define MAX_CG_ROWS 98
// tabella per la conversione dei numeri negativi (schede perforate????)
static unsigned char _tabella[10] = {0x7d,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52};
// TAutomask // TAutomask
@ -31,9 +33,7 @@ class TOmasa_mask : public TAutomask
protected: protected:
bool on_field_event(TOperable_field& o, TField_event e, long jolly); bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public: public:
TOmasa_mask(); TOmasa_mask();
virtual ~TOmasa_mask(){}; virtual ~TOmasa_mask(){};
}; };
@ -55,7 +55,10 @@ protected:
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str); virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
public: public:
void negativo(TString& importo);
int strip_zero(TString& importo);
bool my_isdigit(unsigned char ch);
int look(unsigned char carattere);
TOmasa_file(const TString& file_name); TOmasa_file(const TString& file_name);
virtual ~TOmasa_file() { } virtual ~TOmasa_file() { }
}; };
@ -68,15 +71,68 @@ TOmasa_file::TOmasa_file(const TString& file_name)
void TOmasa_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str) void TOmasa_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
{ {
const TString code(s.get(0)); const TString code(s.get(0));
TString valore; TString valore = str;
if (code == "_UPPERCASE") if (code == "_UPPERCASE")
{ {
valore.upper(); valore.upper();
} }
else if (code == "_IMPORTO")
{
negativo(valore);
}
else NFCHECK("Macro non definita: %s", (const char *)code); else NFCHECK("Macro non definita: %s", (const char *)code);
str = valore; str = valore;
} }
int TOmasa_file::strip_zero(TString& importo)
{
TString16 app;
int size = importo.len();
for (int i = 0; i < size; i++)
if (importo[i] != '0') break;
if (i > 0)
{
app = importo.mid(importo[i] == '.' ? i - 1 : i);
importo = app;
}
return (i ? i - 1 : i);
}
bool TOmasa_file::my_isdigit(unsigned char ch)
{
return (ch >= '0' && ch <= '9');
}
int TOmasa_file::look(unsigned char carattere)
{
for (int i = 0; i < 10; i++)
if (_tabella[i] == carattere)
return i;
return -1;
}
void TOmasa_file::negativo(TString& importo)
{
strip_zero(importo);
int size = importo.len();
if (!size) return;
unsigned char last = importo[size - 1];
if (!my_isdigit(last))
{
int new_last = look(last);
TString16 dep; dep << new_last;
if (new_last >= 0)
{
importo[size - 1] = dep[0];
importo.insert("-");
}
}
}
// TSkeleton_application // TSkeleton_application
@ -171,7 +227,7 @@ bool TOmasa::transfer()
while (_trasfile->read(curr) == NOERR) while (_trasfile->read(curr) == NOERR)
{ {
pi.setstatus(_trasfile->read_file()->tellg()); pi.setstatus(_trasfile->read_file()->tellg());
TString impstr = curr.get(F_IMPORTO); TString impstr = curr.get(F_VALOREVOCE);
impstr.insert(".",11); impstr.insert(".",11);
const real importo(impstr); const real importo(impstr);
TString16 contodare = curr.get(F_CONTODARE); TString16 contodare = curr.get(F_CONTODARE);
@ -190,23 +246,23 @@ bool TOmasa::transfer()
movpn->set("CODCMS",codcms); movpn->set("CODCMS",codcms);
if (!contodare.blank()) if (!contodare.blank())
{ {
movpn->set_paragraph("DARE"); movpn->set_paragraph("IMPORTI");
contodare.trim(); contodare.trim();
impstr = movpn->get(contodare, "DARE"); impstr = movpn->get(contodare, "IMPORTI");
// verificare se l'ultimo carattere e'una lettera = importo negativo
real importomem(impstr); real importomem(impstr);
importomem+=importo; importomem+=importo;
movpn->set(contodare, importomem.string()); movpn->set(contodare, importomem.string());
} }
if (!contoavere.blank()) if (!contoavere.blank())
{ {
movpn->set_paragraph("AVERE"); movpn->set_paragraph("IMPORTI");
contoavere.trim(); contoavere.trim();
impstr = movpn->get(contoavere, "AVERE"); impstr = movpn->get(contoavere, "IMPORTI");
real importomem(impstr); real importomem(impstr);
importomem+=importo; importomem-=importo;
movpn->set(contoavere, importomem.string()); movpn->set(contoavere, importomem.string());
} }
delete movpn; delete movpn;
if (pi.iscancelled()) if (pi.iscancelled())
return TRUE; return TRUE;
@ -249,23 +305,23 @@ bool TOmasa::transfer()
int numrig = 0; int numrig = 0;
TString_array vl; TString_array vl;
file_oo.list_variables(vl,TRUE, "DARE", TRUE); file_oo.list_variables(vl,TRUE, "IMPORTI", TRUE);
FOR_EACH_ARRAY_ROW(vl,rd,sd) FOR_EACH_ARRAY_ROW(vl,r,s)
{ {
TString16 contodare = (*sd).get(); TString16 contoomasa = (*s).get();
TString16 importodare = (*sd).get(); TString16 importos = (*s).get();
TToken_string conto = _configfile->get(contodare, "CONTI"); TToken_string conto = _configfile->get(contoomasa, "CONTI");
if (conto.empty()) if (conto.empty())
{ {
TMask mskconto("cgp4100b"); TMask mskconto("cgp4100b");
mskconto.set(F_CONTOOMASA, contodare); mskconto.set(F_CONTOOMASA, contoomasa);
if (mskconto.run() == K_ENTER) if (mskconto.run() == K_ENTER)
{ {
const int gr = mskconto.get_int(F_GRUPPO); const int gr = mskconto.get_int(F_GRUPPO);
const int co = mskconto.get_int(F_CONTO); const int co = mskconto.get_int(F_CONTO);
const long so = mskconto.get_long(F_SOTTOCONTO); const long so = mskconto.get_long(F_SOTTOCONTO);
conto.format("%d|%d|%ld", gr, co, so); conto.format("%d|%d|%ld", gr, co, so);
_configfile->set(contodare, conto, "CONTI"); _configfile->set(contoomasa, conto, "CONTI");
} }
else else
return TRUE; return TRUE;
@ -275,51 +331,21 @@ bool TOmasa::transfer()
movpn->set("ANNOES", annoes); movpn->set("ANNOES", annoes);
movpn->set("DATAREG", datareg); movpn->set("DATAREG", datareg);
movpn->set("NUMRIG", numrig); movpn->set("NUMRIG", numrig);
movpn->set("IMPORTO", importodare); real importo(importos);
movpn->set("SEZIONE", "D"); if (importo > 0)
const int indbil = cache().get(LF_PCON, conto, PCN_INDBIL)[0]; movpn->set("SEZIONE", "D");
if ((indbil != 1) && (indbil != 2)) else
movpn->set("CODCMS", codcms); movpn->set("SEZIONE", "A");
movpn->set("GRUPPO", conto.get(0)); importos.strip("-");
movpn->set("CONTO", conto.get(1)); movpn->set("IMPORTO", importos);
movpn->set("SOTTOCONTO", conto.get(2)); const char indbil = cache().get(LF_PCON, conto, PCN_INDBIL)[0];
} if ((indbil != '1') && (indbil != '2'))
file_oo.list_variables(vl,TRUE, "AVERE", TRUE);
FOR_EACH_ARRAY_ROW(vl,ra,sa)
{
TString16 contoavere = (*sa).get();
TString16 importoavere = (*sa).get();
TToken_string conto = _configfile->get(contoavere, "CONTI");
if (conto.empty())
{
TMask mskconto("cgp4100b");
mskconto.set(F_CONTOOMASA, contoavere);
if (mskconto.run() == K_ENTER)
{
const int gr = mskconto.get_int(F_GRUPPO);
const int co = mskconto.get_int(F_CONTO);
const long so = mskconto.get_long(F_SOTTOCONTO);
conto.format("%d|%d|%ld", gr, co, so);
_configfile->set(contoavere, conto, "CONTI");
}
else
return TRUE;
}
numrig++;
movpn->set_paragraph(format("%d,%d",LF_RMOV, numrig));
movpn->set("ANNOES", annoes);
movpn->set("DATAREG", datareg);
movpn->set("NUMRIG", numrig);
movpn->set("IMPORTO", importoavere);
movpn->set("SEZIONE", "A");
const int indbil = cache().get(LF_PCON, conto, PCN_INDBIL)[0];
if ((indbil != 1) && (indbil != 2))
movpn->set("CODCMS", codcms); movpn->set("CODCMS", codcms);
movpn->set("GRUPPO", conto.get(0)); movpn->set("GRUPPO", conto.get(0));
movpn->set("CONTO", conto.get(1)); movpn->set("CONTO", conto.get(1));
movpn->set("SOTTOCONTO", conto.get(2)); movpn->set("SOTTOCONTO", conto.get(2));
} }
delete movpn;
} }
tempdir.tempdir(); tempdir.tempdir();
@ -343,46 +369,3 @@ int cgp4100 (int argc, char* argv[])
main_app.run(argc, argv, TR("Importazione stipendi")); main_app.run(argc, argv, TR("Importazione stipendi"));
return TRUE; return TRUE;
} }
/*
numrig++;
movpn->set_paragraph(format("%d,%d",LF_RMOV, numrig));
movpn->set("ANNOES", annoes);
movpn->set("DATAREG", datareg);
movpn->set("NUMRIG", numrig);
movpn->set("IMPORTO", importo.string());
movpn->set("SEZIONE", "D");
movpn->set("CODCMS", codcms);
movpn->set("GRUPPO", conto.get(0));
movpn->set("CONTO", conto.get(1));
movpn->set("SOTTOCONTO", conto.get(2));
}
TToken_string conto = _configfile->get(contoavere, "CONTI");
if (conto.empty())
{
TMask mskconto("cgp4100b");
mskconto.set(F_CONTOOMASA, contoavere);
if (mskconto.run() == K_ENTER)
{
const int gr = mskconto.get_int(F_GRUPPO);
const int co = mskconto.get_int(F_CONTO);
const long so = mskconto.get_long(F_SOTTOCONTO);
conto.format("%d|%d|%ld", gr, co, so);
_configfile->set(contoavere, conto, "CONTI");
}
else
return TRUE;
}
numrig++;
movpn->set_paragraph(format("%d,%d",LF_RMOV, numrig));
movpn->set("ANNOES", annoes);
movpn->set("DATAREG", datareg);
movpn->set("NUMRIG", numrig);
movpn->set("IMPORTO", importo.string());
movpn->set("SEZIONE", "A");
movpn->set("CODCMS", F_CENTROCOSTO);
movpn->set("GRUPPO", conto.get(0));
movpn->set("CONTO", conto.get(1));
movpn->set("SOTTOCONTO", conto.get(2));
*/

View File

@ -4,9 +4,14 @@
#define F_DATAREG 102 #define F_DATAREG 102
#define F_CODCAUS 103 #define F_CODCAUS 103
#define F_DESCR 104 #define F_DESCR 104
#define F_SHEET_CONTI 105
// campi della maschera di conversione conti // campi della maschera di conversione conti
#define F_S_CONTOOMASA 101
#define F_S_GRUPPO 102
#define F_S_CONTO 103
#define F_S_SOTTOCONTO 104
#define F_S_DESCRIZIONE 105
// campi del tracciato record // campi del tracciato record

View File

@ -60,9 +60,5 @@ END
ENDPAGE ENDPAGE
PAGE "Tabella conversione conti" 0 -1 0 19
ENDPAGE
ENDMASK ENDMASK

View File

@ -80,12 +80,14 @@ TYPE(5) = NUMERO
POSITION(5) = 21 POSITION(5) = 21
LENGTH(5) = 13 LENGTH(5) = 13
DECIMAL(5) = 2 DECIMAL(5) = 2
MESSAGE(5) = _IMPORTO
NAME(6) = IMPORTO UNITARIO NAME(6) = IMPORTO UNITARIO
TYPE(6) = IMPORTO TYPE(6) = IMPORTO
POSITION(6) = 34 POSITION(6) = 34
LENGTH(6) = 13 LENGTH(6) = 13
DECIMAL(6) = 2 DECIMAL(6) = 2
MESSAGE(6) = _IMPORTO
NAME(7) = CONTO DARE NAME(7) = CONTO DARE
TYPE(7) = STRINGA TYPE(7) = STRINGA