campo-sirio/src/ve/ve6b00.cpp
Alessandro Bonazzi 8bdb4472ef Patch level : 12.0 982
Files correlati     : ve0.exe ve1.exe ve5.exe ve6.exe ve0200b.msk
Commento            :

Ristrutturato modulo li
2020-07-26 20:18:55 +02:00

163 lines
4.1 KiB
C++
Raw Blame History

/**************************************************
* File: ve600.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 "ve6b00a.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("ve6b00a") {}
~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 ve6b00 (int argc, char **argv)
{
TEliminazione_documenti_app a;
a.run(argc,argv, TR("Elimiazione documenti"));
return true;
}