163 lines
4.1 KiB
C++
163 lines
4.1 KiB
C++
|
/**************************************************
|
|||
|
* File: ve61000.cpp *
|
|||
|
* Programma per il controllo degli ordini evasi *
|
|||
|
* Authors: Alessandro Bonazzi, Mattia Tollari *
|
|||
|
**************************************************/
|
|||
|
|
|||
|
#include <automask.h>
|
|||
|
#include <progind.h>
|
|||
|
#include <relation.h>
|
|||
|
#include <sheet.h>
|
|||
|
#include <tabutil.h>
|
|||
|
#include <defmask.h>
|
|||
|
|
|||
|
#include "velib04.h"
|
|||
|
#include "../cg/cgsaldac.h"
|
|||
|
|
|||
|
#include "ve61000a.h"
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////
|
|||
|
// MASCHERA //
|
|||
|
///////////////////////////////////////////////
|
|||
|
class TEliminazione_documenti_mask : public TAutomask
|
|||
|
{
|
|||
|
TString_array _tipi_doc; // Array di stringhe contenente i tipi documenti da elaborare
|
|||
|
|
|||
|
protected:
|
|||
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|||
|
|
|||
|
public:
|
|||
|
// Controlla se lo stato ed il tipo del documento sono validi e rispettano la selezione
|
|||
|
bool doc_tipo_stato_ok(const TRectype& doc);
|
|||
|
// Constructor and Distructor
|
|||
|
TEliminazione_documenti_mask(): TAutomask("ve61000a") {}
|
|||
|
~TEliminazione_documenti_mask() {}
|
|||
|
};
|
|||
|
|
|||
|
bool TEliminazione_documenti_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|||
|
{
|
|||
|
switch (o.dlg())
|
|||
|
{
|
|||
|
case DLG_USER:
|
|||
|
if (e == fe_button)
|
|||
|
{
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
bool TEliminazione_documenti_mask::doc_tipo_stato_ok(const TRectype& doc)
|
|||
|
// Verifica che il tipo documento corrente esista tra i tipi previsti dalla elaborazione
|
|||
|
// differita selezionata
|
|||
|
{
|
|||
|
bool found = false;
|
|||
|
const TString4 tipo = doc.get(DOC_TIPODOC);
|
|||
|
const char stato = doc.get_char(DOC_STATO);
|
|||
|
const int items = _tipi_doc.items();
|
|||
|
for (int i = 0; i < items && !found; i++)
|
|||
|
{
|
|||
|
TToken_string& t = _tipi_doc.row(i);
|
|||
|
const TString4 tipox(t.get(0));
|
|||
|
const char statox = t.get(1)[0];
|
|||
|
if (tipo == tipox && stato == statox)
|
|||
|
found = true;
|
|||
|
}
|
|||
|
return found;
|
|||
|
}
|
|||
|
|
|||
|
/////////////////////////////////////////////
|
|||
|
// APPLICAZIONE //
|
|||
|
/////////////////////////////////////////////
|
|||
|
|
|||
|
// TEliminazione_documenti
|
|||
|
// Applicazione per il controllo degli ordini evasi
|
|||
|
class TEliminazione_documenti_app : public TSkeleton_application
|
|||
|
{
|
|||
|
TEliminazione_documenti_mask* _msk;
|
|||
|
|
|||
|
protected: // TApplication
|
|||
|
// Controlla gli ordini
|
|||
|
void check();
|
|||
|
void fastCheck();
|
|||
|
|
|||
|
public:
|
|||
|
virtual bool create();
|
|||
|
virtual bool destroy();
|
|||
|
virtual void main_loop();
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
void TEliminazione_documenti_app::check()
|
|||
|
{
|
|||
|
// Creo la relazione alla tabella del Db
|
|||
|
TRelation rel(LF_DOC);
|
|||
|
// Definisco i due TRecType di inizio e fine per lo scorrimento
|
|||
|
TRectype recini(rel.curr());
|
|||
|
TRectype recfin(rel.curr());
|
|||
|
// Imposto il cursore
|
|||
|
rel.lfile().set_curr(new TDocumento);
|
|||
|
// Aggiungo dei filtri, in questo caso utilizzando la KEY 1 ho bisogno di
|
|||
|
// PROVV+ANNO
|
|||
|
// Inizio
|
|||
|
recini.put(DOC_PROVV, _msk->get(F_PROVV));
|
|||
|
recini.put(DOC_ANNO, _msk->get(F_DA_ANNO));
|
|||
|
// Fine
|
|||
|
recfin.put(DOC_PROVV, _msk->get(F_PROVV));
|
|||
|
recfin.put(DOC_ANNO, _msk->get(F_A_ANNO));
|
|||
|
// Istanzio il cursore
|
|||
|
TCursor cur(&rel, "", 1, &recini, &recfin);
|
|||
|
const long total = cur.items();
|
|||
|
// Se esistono righe
|
|||
|
if (total > 0)
|
|||
|
{
|
|||
|
TString msg = TR("Confermare l'eliminazione di ");
|
|||
|
msg.add_plural(total, TR("documento"));
|
|||
|
if (yesno_box(msg))
|
|||
|
{
|
|||
|
TProgress_monitor pi(total, title());
|
|||
|
// Blocco il cursore per garantire l'integrit<69> dei dati
|
|||
|
cur.freeze();
|
|||
|
for (cur = 0; cur.pos() < total; ++cur)
|
|||
|
{
|
|||
|
if (!pi.add_status())
|
|||
|
break;
|
|||
|
TDocumento& doc = (TDocumento&) cur.curr();
|
|||
|
// Imposto il documento allo stato eliminabile
|
|||
|
doc.put(DOC_STATO, 9);
|
|||
|
doc.remove();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
bool TEliminazione_documenti_app::create()
|
|||
|
{
|
|||
|
open_files(LF_TABCOM, LF_TAB, LF_DOC, LF_RIGHEDOC, LF_MOVANA, LF_RMOVANA, 0);
|
|||
|
_msk = new TEliminazione_documenti_mask();
|
|||
|
return TSkeleton_application::create();
|
|||
|
}
|
|||
|
|
|||
|
bool TEliminazione_documenti_app::destroy()
|
|||
|
{
|
|||
|
if (_msk) delete _msk;
|
|||
|
return TSkeleton_application::destroy();
|
|||
|
}
|
|||
|
|
|||
|
void TEliminazione_documenti_app::main_loop()
|
|||
|
{
|
|||
|
while (_msk->run() == K_ENTER)
|
|||
|
check();
|
|||
|
}
|
|||
|
|
|||
|
int ve61000 (int argc, char **argv)
|
|||
|
{
|
|||
|
TEliminazione_documenti_app a;
|
|||
|
a.run(argc,argv, TR("Elimiazione documenti"));
|
|||
|
return true;
|
|||
|
}
|