Files correlati : ve0.exe ve0300a.ini ve0100a.msk ve0200g.msk ve1300.alx ve1.exe ve17001.rep ve17002.rep ve1700a.msk ve1700a.msk ve2.exe ve6.exe ve61000a.msk ve17001.rep ve17002.rep ve17002.rep ve17001.rep ve1700a.msk ve6b00a.msk MODIFICHE CRPA Se si mette il flag P sulla data documento della maschera di un tipo documento viene proposta l’ultima data inserita. Possibilità di impostare il numero di copie nell’inserimento/modifica di un documento. Righe documento massime 10000 Aggiunta ricerca per riferimento cliente (ricerca alternativa). Aggiunto indirizzo cliente/fornitore sulla ricerca documenti. Lista documenti avanzata (report). Aggiunte le regolarizzazioni nella contabilizzazione documenti Sistema abilitazione della data registrazione in contabilizzazione documenti Aggiunta la possibilità di usare campi del documento nella dicitura del riferimento. Gestiti i movimenti di sola iva in contabilizzazione. Riferimento per mese nelle partite. Ordinamento per documento nell’evasione ordini con un flag in configurazione Impostato il tipo CF in base al tipo documento Aggiunto il messaggio cliente alla stampa report delle vendite git-svn-id: svn://10.65.10.50/branches/R_10_00@24005 c028cbd2-c16b-5b4b-a496-9718f37d4682
163 lines
4.1 KiB
C++
163 lines
4.1 KiB
C++
/**************************************************
|
||
* 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("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 ve6b00 (int argc, char **argv)
|
||
{
|
||
TEliminazione_documenti_app a;
|
||
a.run(argc,argv, TR("Elimiazione documenti"));
|
||
return true;
|
||
}
|