Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/branches/R_10_00@21501 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2011-01-21 14:08:21 +00:00
parent 47580c0264
commit 94bcffc72d
4 changed files with 94 additions and 39 deletions

View File

@ -571,7 +571,7 @@ CLI_GRUPPO = 4
CLI_CONTO = 101
FOR_GRUPPO = 5
FOR_CONTO = 601
GRUPPI_MOV = 6|7|8
CONTI_MOV = 3,1,0|3,5,0|3,45,2|3,45,3|5,601,127|5,601,137|5,601,295|6,1,8|6,1,9|7,0,0|8,0,0|70,0,0
IVA_ESENTE = 999
CONTO_OMAGGI=8|15|22

View File

@ -12,6 +12,7 @@
#include <tabutil.h>
#include <utility.h>
#include <pconti.h>
#include <mov.h>
#include <rmov.h>
#include <rmoviva.h>
@ -44,6 +45,7 @@ protected:
void rec2ini(const TRectype& rec);
void recset2rec(const TODBC_recordset& recset, TRectype& rec, const TString_array& lista_campi);
real get_imponibile(const TRectype& rec);
real get_netto(const TRectype& rec, const real & lordo);
public:
virtual bool trasferisci();
@ -337,12 +339,30 @@ real THardy_movimenti::get_imponibile(const TRectype& rec)
if (gruppo.blank())
{
real& perc = (real&)_ivaind->find(codiva);
imponibile = imponibile+(imponibile*perc)/100;
imponibile = imponibile+(imponibile*perc)/CENTO;
}
}
return imponibile;
}
real THardy_movimenti::get_netto(const TRectype& rec, const real & lordo)
{
real val = lordo;
const char* codiva = rec.get(RMI_CODIVA);
if (_ivaind->is_key(codiva))
{
TString16 causale = get_str("IdCausale");
causale << "|4";
const TString& gruppo = cache().get(LF_RCAUSALI, causale, RCA_GRUPPO);
if (gruppo.blank())
{
real& perc = (real&)_ivaind->find(codiva);
val = (val * CENTO)/(CENTO + perc);
}
}
return val;
}
// gestisce tutto il procedimento di scrittura su ini delle righe iva e contabili
bool THardy_movimenti::scrivi_righe()
{
@ -352,7 +372,7 @@ bool THardy_movimenti::scrivi_righe()
TConfig& ini = config();
TString8 iva_esente = ini.get("IVA_ESENTE", "Parametri");
TToken_string conto_omaggi = ini.get("CONTO_OMAGGI", "Parametri");
TToken_string gruppi_mov = ini.get("GRUPPI_MOV", "Parametri");
const TString conti_mov = ini.get("CONTI_MOV", "Parametri");
// se è un movimento iva metto in atto il meccanismo di ricerca per assegnare le aliquote ai conti
if (_righeiva->items()>0)
{
@ -360,12 +380,33 @@ bool THardy_movimenti::scrivi_righe()
for (int i=_righecont->items() - 1;i>=0;i--)
{
TRectype& rec_rmov = *(TRectype*)_righecont->objptr(i);
const char* gruppo = rec_rmov.get(RMV_GRUPPO);
const int gruppo = rec_rmov.get_int(RMV_GRUPPO);
const int conto = rec_rmov.get_int(RMV_CONTO);
const long sottoconto = rec_rmov.get_long(RMV_SOTTOCONTO);
bool riga_omaggio = (atoi(gruppo) == conto_omaggi.get_int(0)) && (conto == conto_omaggi.get_int(1)) && (sottoconto == conto_omaggi.get_long(2));
if (((gruppi_mov.find(gruppo)) < 0) || (riga_omaggio))
_righecont->destroy(i);
TToken_string key;
key.add(gruppo);
key.add(conto);
const int tipoconto = atoi(cache().get(LF_PCON, key, PCN_INDBIL));
bool found = (tipoconto == 3) || (tipoconto == 4) ||
(gruppo == conto_omaggi.get_int(0)) && (conto == conto_omaggi.get_int(1)) && (sottoconto == conto_omaggi.get_long(2));
if (!found)
{
TToken_string cod("", ',');
cod.add(gruppo);
cod.add(conto);
cod.add(sottoconto);
// Provo il sottoconto ma se non riesco provo con conto e poi anche gruppo (formato -> 3,1,2 o 3,1,0 o 3,0,0)
for (int c = 2; !found && c >= 0; c--)
{
found = (conti_mov.find(cod)) >= 0;
cod.add(0, c);
}
if (!found)
_righecont->destroy(i);
}
}
_righecont->pack();
// secondo passo: per ogni riga iva cerco importo uguale in righe contabili,
@ -374,6 +415,7 @@ bool THardy_movimenti::scrivi_righe()
{
TRectype& rec_rmoviva = *(TRectype*)_righeiva->objptr(i);
const char* codiva = rec_rmoviva.get(RMI_CODIVA);
TCodiceIVA c(codiva);
const bool riga_omaggio = _ivaoma->is_key(codiva);
real imponibile = get_imponibile(rec_rmoviva);
@ -381,19 +423,35 @@ bool THardy_movimenti::scrivi_righe()
{
TRectype& rec_rmov = *(TRectype*)_righecont->objptr(j);
real importo = rec_rmov.get_real(RMV_IMPORTO);
if ((!riga_omaggio) && (importo == imponibile))
if ((!riga_omaggio) && (importo <= imponibile))
{
const real impon = rec_rmoviva.get_real(RMI_IMPONIBILE);
const real iva = rec_rmoviva.get_real(RMI_IMPOSTA);
c.imposta(importo);
rec_rmoviva.put(RMI_TIPOC, rec_rmov.get(RMV_TIPOC));
rec_rmoviva.put(RMI_GRUPPO, rec_rmov.get(RMV_GRUPPO));
rec_rmoviva.put(RMI_CONTO, rec_rmov.get(RMV_CONTO));
rec_rmoviva.put(RMI_SOTTOCONTO, rec_rmov.get(RMV_SOTTOCONTO));
const real wimp = get_netto(rec_rmoviva, importo);
const real wiva = c.imposta(wimp);
if (importo < imponibile)
{
rec_rmoviva.put(RMI_IMPONIBILE, wimp);
rec_rmoviva.put(RMI_IMPOSTA, wiva);
}
paragraph.format("%d,%d",LF_RMOVIVA, nrigai++);
_conf->set_paragraph(paragraph); // riga iva
rec2ini(rec_rmoviva);
_righecont->destroy(j, true);
j = _righecont->items();
// _righeiva->destroy(i);
rec_rmoviva.zero();
if (importo == imponibile)
rec_rmoviva.zero();
else
{
rec_rmoviva.put(RMI_IMPONIBILE, impon - wimp);
rec_rmoviva.put(RMI_IMPOSTA, iva - wiva);
}
}
}
}
@ -510,8 +568,7 @@ bool THardy_movimenti::trasferisci()
TFilename outdir;
outdir = ini.get("PATH", "Main");
TString80 listfiles = outdir;
listfiles << "\\ha*.ini";
TFilename listfiles = outdir; listfiles.add("ha*.ini");
TString_array transactions;
list_files(listfiles, transactions);
FOR_EACH_ARRAY_ROW(transactions, row, name)
@ -546,38 +603,37 @@ bool THardy_movimenti::trasferisci()
test_movcont();
// scrive RMOV e /o RMOVIVA a partire da array righe letti da db hardy
bool ok = scrivi_righe();
#ifdef DBG
TString msg;
if (ok)
msg << (iva ? TR("Movimento iva "): TR("Movimento contabile ")) << _kmovcont << TR(" generato nel file ") << temp;
else
if (!ok)
{
ntran--;
if (temp.exist())
temp.fremove();
msg << (iva ? TR("Il movimento iva "): TR("Il movimento contabile ")) << _kmovcont << TR(" ha generato un errore, non è stato convertito ");
TString msg;
msg << (iva ? TR("Il movimento iva "): TR("Il movimento contabile ")) << _kmovcont
<< TR(" ha generato un errore, non è stato convertito ");
log(msg, 2); // Non uso log_error per non dare messaggi fuorvianti
}
#ifdef DBG
else
{
TString msg;
msg << (iva ? TR("Movimento iva "): TR("Movimento contabile ")) << _kmovcont
<< TR(" generato nel file ") << temp;
log(msg);
}
log(msg);
#endif
}
if (_conf != NULL)
delete _conf;
show_log();
if (yesno_box(FR("Si desidera confermare l'importazione di %ld movimenti"), ntran-1))
{
TString app;
app << "cg2 -0 -i" << outdir << "/ha*.ini";
TExternal_app primanota(app);
primanota.run(true);
TString msg;
msg << TR("Importazione completata");
log(msg);
}
else
{
TString msg;
msg << TR("Importazione annullata");
log(msg);
}
return true;
}
@ -632,25 +688,16 @@ void TConvMovimentiHardy_mask::trasferisci()
TString query_header;
query_header << "ODBC(" << get(F_DSN) << ',' << get(F_USR) << ',' << get(F_PWD) << ")\n";
TReport_book book;
THardy_log log;
bool rep_to_print = false;
bool go_on = true;
const int anno = get_int(F_ANNO);
const TDate dadata = get_date(F_DADATA);
const TDate adata = get_date(F_ADATA);
if (go_on && (anno!=0))
if (anno!=0)
{
THardy_log log;
THardy_movimenti pc(anno, dadata, adata);
pc.init(TR("Movimenti contabili"), query_header, log);
go_on = pc.trasferisci();
book.add(log);
rep_to_print = true;
pc.trasferisci();
}
if (rep_to_print && book.pages() > 0)
book.preview();
}
bool TConvMovimentiHardy_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)

View File

@ -223,6 +223,12 @@ bool THardy_transfer::log_cancelled()
return log_error(TR("Procedura interrotta dall'utente"));
}
void THardy_transfer::show_log()
{
_log->preview();
_log->destroy();
}
bool THardy_transfer::test_write(TBaseisamfile& file)
{
int err = NOERR;

View File

@ -77,6 +77,8 @@ public:
void log(const char* msg, int sev = 0) const;
bool log_error(const char* msg);
bool log_cancelled();
void show_log();
const TRecordset& recordset() const;
TRecordset& recordset();