Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.2 patch 1358 git-svn-id: svn://10.65.10.50/trunk@18724 c028cbd2-c16b-5b4b-a496-9718f37d4682
271 lines
8.6 KiB
C++
Executable File
271 lines
8.6 KiB
C++
Executable File
#include <progind.h>
|
|
|
|
#include "velib04.h"
|
|
#include "ve6200.h"
|
|
#include "ve6200a.h"
|
|
|
|
#include <doc.h>
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TFatturazione_bolle_app
|
|
///////////////////////////////////////////////////////////
|
|
|
|
bool TFatturazione_bolle_app::create()
|
|
{
|
|
open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_OCCAS, LF_INDSP, LF_CFVEN,
|
|
LF_DOC, LF_RIGHEDOC, LF_ANAMAG, LF_MOVMAG, LF_RMOVMAG, LF_CONDV, LF_SVRIEP,
|
|
LF_AGENTI, LF_PERCPROV, LF_CAUSALI, 0);
|
|
|
|
TConfig cfg(CONFIG_DITTA, "ve");
|
|
_default_selection = cfg.get("FATBOLSEL");
|
|
|
|
return TSkeleton_application::create();
|
|
}
|
|
|
|
bool TFatturazione_bolle_app::process(TIndwin& iw, TElaborazione & eld,
|
|
TLista_documenti& din, const TDate& data_elab)
|
|
{
|
|
// Crea documenti di output
|
|
TLista_documenti dout;
|
|
bool ok = eld.elabora(din, dout, data_elab);
|
|
if (ok)
|
|
{
|
|
TString msg;
|
|
msg << din.items() << TR(" documenti raggruppati in ") << dout.items();
|
|
iw.set_text(msg); // Messaggio sul cliente
|
|
do_events(); // Attende visualizzazione
|
|
|
|
int err = dout.write(); // Scrive documenti di output
|
|
if (err == NOERR)
|
|
{
|
|
err = din.rewrite(); // Aggiorna stato dei documenti di input
|
|
if (err != NOERR)
|
|
ok = error_box("Errore %d durante la scrittura dei documenti raggruppati!", err);
|
|
}
|
|
else
|
|
ok = error_box("Errore %d durante l'aggiornamento dei documenti da raggruppare!", err);
|
|
}
|
|
else
|
|
{
|
|
const long codcli = din[0].get_long(DOC_CODCF);
|
|
ok = error_box("I documenti relativi al cliente %ld non sono stati elaborati.",
|
|
codcli);
|
|
}
|
|
return ok;
|
|
}
|
|
|
|
void TFatturazione_bolle_app::process_by_cli(const TMask& m)
|
|
{
|
|
TIndwin iw(0, "Inizializzazione ...\n ", TRUE, FALSE, 60);
|
|
|
|
const TDate data_elab = m.get_date(F_DATA_ELAB);
|
|
const int anno = data_elab.year();
|
|
|
|
const long dc = m.get_long(F_CODICE_CLIFO_DA);
|
|
const long ac = m.get_long(F_CODICE_CLIFO_A);
|
|
const int da = m.get_int(F_CODICE_AGENTE_DA);
|
|
const int aa = m.get_int(F_CODICE_AGENTE_A);
|
|
const TString16 dz(m.get(F_CODICE_ZONA_DA));
|
|
const TString16 az(m.get(F_CODICE_ZONA_A));
|
|
|
|
const TDate dd = m.get_date(F_DATA_DOCUMENTO_DA);
|
|
TString st_da = m.get(F_DATA_DOCUMENTO_A); // qui verificare
|
|
const TDate ad = st_da.not_empty() ? (TDate)(const char*)st_da : data_elab;
|
|
const TString& codnum = m.get(F_CODICE_NUMERAZIONE);
|
|
const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA);
|
|
const long an = m.get_long(F_NUMERO_DOCUMENTO_A);
|
|
|
|
TElaborazione * e = elab(m.get(F_CODICE_ELAB));
|
|
TElaborazione & eld = *e;
|
|
TToken_string tipidoc(24), statidoc(10);
|
|
eld.tipi_validi(tipidoc);
|
|
eld.stati_validi(statidoc);
|
|
|
|
TTipo_documento t(eld.tipo_iniziale(0));
|
|
char tipocf(t.tipocf());
|
|
TLista_cf clienti(tipocf);
|
|
const int tot_cli = clienti.leggi(dc, ac, da, aa, dz, az);
|
|
|
|
TString msg(80);
|
|
for (int c = 0; c < tot_cli && !iw.iscancelled(); c++)
|
|
{
|
|
const long codcli = clienti[c]; // Codice cliente in esame
|
|
msg = "Elaborazione dei documenti del cliente ";
|
|
msg << codcli << " ...";
|
|
iw.set_text(msg); // Messaggio sul cliente
|
|
do_events(); // Attende visualizzazione
|
|
|
|
TLista_documenti din; // Legge tutti i documenti di input
|
|
din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an);
|
|
if (din.items() > 0 && !iw.iscancelled())
|
|
{
|
|
bool ok = process(iw, eld, din, data_elab);
|
|
if (!ok) // In caso di errore termina qui l'elaborazione.
|
|
break;
|
|
}
|
|
}
|
|
delete e;
|
|
}
|
|
|
|
void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m)
|
|
{
|
|
TIndwin iw(0, "Inizializzazione ...\n ", TRUE, FALSE, 60);
|
|
|
|
const TDate data_elab = m.get_date(F_DATA_ELAB);
|
|
const int anno = data_elab.year();
|
|
|
|
const TString dr = m.get(F_RAGSOC_CLIFO_DA);
|
|
const TString ar = m.get(F_RAGSOC_CLIFO_A);
|
|
const int da = m.get_int(F_CODICE_AGENTE_DA);
|
|
const int aa = m.get_int(F_CODICE_AGENTE_A);
|
|
const TString16 dz(m.get(F_CODICE_ZONA_DA));
|
|
const TString16 az(m.get(F_CODICE_ZONA_A));
|
|
|
|
const TDate dd = m.get_date(F_DATA_DOCUMENTO_DA);
|
|
TString st_da = m.get(F_DATA_DOCUMENTO_A); // qui verificare
|
|
const TDate ad = st_da.not_empty() ? (TDate)(const char*)st_da : data_elab;
|
|
const TString& codnum = m.get(F_CODICE_NUMERAZIONE);
|
|
const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA);
|
|
const long an = m.get_long(F_NUMERO_DOCUMENTO_A);
|
|
|
|
TElaborazione * e = elab(m.get(F_CODICE_ELAB));
|
|
TElaborazione & eld = *e;
|
|
TToken_string tipidoc(24), statidoc(10);
|
|
eld.tipi_validi(tipidoc);
|
|
eld.stati_validi(statidoc);
|
|
|
|
TTipo_documento t(eld.tipo_iniziale(0));
|
|
char tipocf(t.tipocf());
|
|
TLista_cf clienti(tipocf);
|
|
const int tot_cli = clienti.leggi_ragsoc(dr, ar, da, aa, dz, az);
|
|
|
|
TString msg(80);
|
|
for (int c = 0; c < tot_cli && !iw.iscancelled(); c++)
|
|
{
|
|
const long codcli = clienti[c]; // Codice cliente in esame
|
|
msg = "Elaborazione dei documenti del cliente ";
|
|
msg << codcli << " ...";
|
|
iw.set_text(msg); // Messaggio sul cliente
|
|
do_events(); // Attende visualizzazione
|
|
|
|
TLista_documenti din; // Legge tutti i documenti di input
|
|
din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an);
|
|
if (din.items() > 0 && !iw.iscancelled())
|
|
{
|
|
bool ok = process(iw, eld, din, data_elab);
|
|
if (!ok) // In caso di errore termina qui l'elaborazione.
|
|
break;
|
|
}
|
|
}
|
|
delete e;
|
|
|
|
}
|
|
|
|
void TFatturazione_bolle_app::process_by_doc(const TMask& m)
|
|
{
|
|
TIndwin iw(0, "Inizializzazione ...\n ", TRUE, FALSE, 60);
|
|
|
|
const TDate data_elab = m.get_date(F_DATA_ELAB);
|
|
const int anno = data_elab.year();
|
|
long dc = m.get_long(F_CODICE_CLIFO_DA);
|
|
long ac = m.get_long(F_CODICE_CLIFO_A);
|
|
|
|
const int da = m.get_int(F_CODICE_AGENTE_DA);
|
|
const int aa = m.get_int(F_CODICE_AGENTE_A);
|
|
const TString8 dz(m.get(F_CODICE_ZONA_DA));
|
|
const TString8 az(m.get(F_CODICE_ZONA_A));
|
|
|
|
const TDate dd = m.get_date(F_DATA_DOCUMENTO_DA);
|
|
TDate ad = m.get_date(F_DATA_DOCUMENTO_A);
|
|
if (!ad.ok()) ad = data_elab;
|
|
|
|
const TString& codnum = m.get(F_CODICE_NUMERAZIONE);
|
|
const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA);
|
|
const long an = m.get_long(F_NUMERO_DOCUMENTO_A);
|
|
|
|
TElaborazione * e = elab(m.get(F_CODICE_ELAB));
|
|
TElaborazione & eld = *e;
|
|
TToken_string tipidoc(24), statidoc(10);
|
|
eld.tipi_validi(tipidoc);
|
|
eld.stati_validi(statidoc);
|
|
|
|
TTipo_documento t(eld.tipo_iniziale(0));
|
|
char tipocf(t.tipocf());
|
|
TLista_cf clienti(tipocf);
|
|
const int tot_cli = clienti.leggi(dc, ac);
|
|
TLista_documenti din, dout; // Legge tutti i documenti di input
|
|
|
|
TString msg(80);
|
|
for (int c = 0; c < tot_cli && !iw.iscancelled(); c++)
|
|
{
|
|
const long codcli = clienti[c]; // Codice cliente in esame
|
|
msg = "Elaborazione dei documenti del cliente ";
|
|
msg << codcli << " ...";
|
|
iw.set_text(msg); // Messaggio sul cliente
|
|
do_events(); // Attende visualizzazione
|
|
|
|
TLista_documenti list;
|
|
|
|
list.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an);
|
|
|
|
for (int i = list.items()-1; i >= 0; i--)
|
|
{
|
|
const TDocumento& doc = list[i];
|
|
|
|
bool to_del = FALSE;
|
|
const int agente = doc.get_int(DOC_CODAG);
|
|
if (agente > 0)
|
|
{
|
|
if (da > 0 && agente < da) to_del = TRUE;
|
|
if (aa > 0 && agente > aa) to_del = TRUE;
|
|
}
|
|
const TString8 zona = doc.get(DOC_ZONA);
|
|
if (zona.not_empty())
|
|
{
|
|
if (dz.not_empty() && zona < dz) to_del = TRUE;
|
|
if (az.not_empty() && zona > az) to_del = TRUE;
|
|
}
|
|
if (to_del)
|
|
din.destroy(i);
|
|
}
|
|
const int items = list.items();
|
|
for (int j = 0; j < items; j++)
|
|
din.add(list[j]);
|
|
}
|
|
if (din.items() > 0 && !iw.iscancelled())
|
|
bool ok = process(iw, eld, din, data_elab);
|
|
delete e;
|
|
}
|
|
|
|
void TFatturazione_bolle_app::main_loop()
|
|
{
|
|
TMask m("ve6200a");
|
|
m.set(F_SELEZIONE, _default_selection);
|
|
|
|
while (m.run() == K_ENTER)
|
|
{
|
|
const TString& select_from = m.get(F_SELEZIONE);
|
|
if (select_from != _default_selection)
|
|
{
|
|
TConfig cfg(CONFIG_DITTA, "ve");
|
|
cfg.set("FATBOLSEL", _default_selection = select_from);
|
|
}
|
|
if (m.get(F_ORDINAMENTO) == "R")
|
|
process_by_ragsoc(m);
|
|
else
|
|
{
|
|
if (select_from == "D")
|
|
process_by_doc(m);
|
|
else
|
|
process_by_cli(m);
|
|
}
|
|
}
|
|
}
|
|
|
|
int ve6200 (int argc, char **argv)
|
|
{
|
|
TFatturazione_bolle_app a;
|
|
a.run (argc, argv, "Fatturazione Bolle");
|
|
return TRUE;
|
|
}
|