campo-sirio/ve/ve5500.cpp
alex d030bbabe2 Patch level : 4.0 667
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Riportata la versione 3.1 patch 766


git-svn-id: svn://10.65.10.50/trunk@14628 c028cbd2-c16b-5b4b-a496-9718f37d4682
2006-12-13 16:22:33 +00:00

149 lines
3.7 KiB
C++
Executable File

#include <applicat.h>
#include <automask.h>
#include <progind.h>
#include <relation.h>
#include "ve5300.h"
#include "velib.h"
///////////////////////////////////////////////////////////
// TPackdoc mask
///////////////////////////////////////////////////////////
class TPackdoc_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TPackdoc_mask() : TAutomask("ve5500a") { open(); }
};
bool TPackdoc_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_FROM_NUM:
case F_TO_NUM:
case F_FROM_FRNDOC:
case F_FROM_TONDOC:
break;
default:
break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// Main program
///////////////////////////////////////////////////////////
class TPackdoc_app : public TSkeleton_application
{
protected:
public:
virtual void main_loop();
};
void TPackdoc_app::main_loop()
{
open_files(LF_TAB, LF_TABCOM, LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_MOV,
LF_ANAMAG, LF_SCONTI, LF_UMART, LF_CLIFO, LF_CFVEN, LF_INDSP,
LF_OCCAS, LF_MOVMAG, LF_RMOVMAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, 0);
TPackdoc_mask m;
while (m.run() == K_ENTER)
{
TRectype rec_from(LF_DOC);
rec_from.put(DOC_ANNO, m.get(F_FROM_ANNO));
rec_from.put(DOC_CODNUM, m.get(F_FROM_NUM));
rec_from.put(DOC_PROVV, m.get(F_FROM_PROVV));
rec_from.put(DOC_NDOC, m.get(F_FROM_FRNDOC));
TRectype rec_to(rec_from);
rec_to.put(DOC_NDOC, m.get(F_FROM_TONDOC));
TRelation rel(LF_DOC);
TCursor cur(&rel, "", 1, &rec_from, &rec_to);
long newdocnum = m.get_long(F_FROM_FRNDOC);
const long tot = cur.items();
cur.freeze();
if (newdocnum <= 0L)
newdocnum = 1L;
if (tot > 0L)
{
TProgind pi(tot, "Compattamento in corso...", FALSE, TRUE);
for (cur = 0; cur.pos() < tot; ++cur)
{
pi.addstatus(1);
TDocumento doc(cur.curr());
const char provv = doc.get_char(DOC_PROVV);
const int anno = doc.get_int(DOC_ANNO);
const TString4 codnum = doc.get(DOC_CODNUM);
const long ndoc = doc.get_long(DOC_NDOC);
if (ndoc > newdocnum)
{
TLocalisamfile rdocfile(LF_RIGHEDOC);
rdocfile.setkey(4);
rdocfile.put(RDOC_DAPROVV, provv);
rdocfile.put(RDOC_DAANNO, anno);
rdocfile.put(RDOC_DACODNUM, codnum);
rdocfile.put(RDOC_DANDOC, ndoc);
TRectype r(rdocfile.curr());
const int err = rdocfile.read(_isgteq);
if (rdocfile.curr() != r && (doc.get_long(DOC_NUMREG) == 0) && (doc.get_long(DOC_NUMANT) == 0))
{
TDocumento newdoc(doc);
newdoc.renum_ndoc(newdocnum);
newdoc.zero(DOC_MOVMAG);
newdoc.zero(DOC_NUMREG);
newdoc.zero(DOC_NUMANT);
newdoc.zero(DOC_NUMREGCA);
// Devo azzerare anche il numero di movmag sulle righe per rigenerarlo corretto
for (int r = newdoc.physical_rows(); r > 0; r--)
newdoc[r].zero(RDOC_MOVMAG);
int err = newdoc.write();
if (err == NOERR)
{
err = doc.remove();
if (err != NOERR)
{
error_box("Errore n.ro %d,nella cancellazione del\n documento %ld", err, ndoc);
break;
}
}
else
{
error_box("Errore n.ro %d,nella creazione del\n documento %ld da l documento %ld", err, newdocnum, ndoc);
break;
}
}
else
{
message_box("Il Documento %ld e' riferito in un altro documento.\nCompattamento interrotto", ndoc);
break;
}
}
newdocnum++;
}
}
}
}
int ve5500(int argc, char* argv[])
{
TPackdoc_app a;
a.run(argc, argv, "Compattamento documenti");
return 0;
}