campo-sirio/src/f9/f90600.cpp
Alessandro Bonazzi d84edb9602 Patch level : 12.00 1364
Files correlati     : f900.exe

Commento:
Implementata esclusione integrazioni
2024-10-28 22:31:46 +01:00

1420 lines
43 KiB
C++

#include <applicat.h>
#include <automask.h>
#include <config.h>
#include <progind.h>
#include <cfven.h>
#include <doc.h>
#include <mask.h>
#include <lffiles.h>
#include <isam.h>
#include <urldefid.h>
#include <progind.h>
#include <utility.h>
#include <sqlset.h>
#include "../ve/velib05.h"
#include "../fe/felib.h"
#include "../f1/f1lib.h"
#include "../fp/fplib.h"
#include "f901tab.h"
#include "f90600.h"
#include "f90600a.h"
#include "f90600b.h"
#include "f90600c.h"
#include "f90600d.h"
#define TABMOD_TABVER "S0" // Campo per la memorizzazione della versione attuale delle tabelle
#define TAB_BASE_VERSION 100 // Versione base delle tabelle
#define SQL_VERSION 104 // Utilizzo questo per controllare la versione attuale delle tabelle e nel caso aggiornarle
//TConfig_f9_mask
bool TConfigIntf9_mask::on_key(const KEY key)
{
if (key == K_SHIFT + K_F12)
{
if (run_fp_psw_mask())
{
enable(CF_LVLNEW);
}
}
return true;
}
bool TConfigIntf9_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case CF_LVLNEW:
if (e == fe_close)
{
TMask& config_mask = o.mask();
TString new_lvl = config_mask.get(CF_LVLNEW);
TString old_lvl = config_mask.get(CF_LVLOLD);
if (new_lvl.empty())
return o.error_box("Livello Patch non conforme. Impossibile aggiornare");
if (new_lvl > old_lvl)
return o.error_box("Per impostare un livello patch superiore dell'attuale\nè sufficente riavviare il programma.");
}
break;
default: break;
}
return true;
}
//TArchInt_mask
bool TArchInt_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case DLG_ELABORA:
if (e == fe_button)
open_win_estr();
fill();
break;
case DLG_CONFIG:
if (e == fe_button)
open_win_conf();
break;
case DLG_DELREC:
if (e == fe_button)
delete_pack();
break;
case B_SHOWESTR:
open_apri_estr_win();
break;
case DLG_FINDREC:
if (e == fe_button)
controllo_errori();
break;
default: break;
}
return true;
}
void TArchInt_mask::open_apri_estr_win()
{
static TString last_fill_id = 0;
TString id;
TToken_string* row_estrazione = nullptr;
FOR_EACH_SHEET_ROW(sfield(S_ELAB), nr, row)
{
if (row->get(0)[0] == 'X')
{
if (TString(row->get(cid2index(F_STATESTR))).starts_with("02"))
{
message_box("Impossibile controllare un pacchetto in stato di errore '02'.\n"
"Usare il 'Controllo Estrazioni' per vedere i movimenti in errore.");
return;
}
row_estrazione = row;
id = row->get(cid2index(F_IDESTR));
break;
}
}
if (row_estrazione == nullptr)
{
message_box("Selezionare un pacchetto.");
return;
}
if (last_fill_id != id)
{
_inclusi_msk.set_from_estrazione(*row_estrazione);
_inclusi_msk.fill_estr();
_inclusi_msk.fill_res();
last_fill_id = id;
}
_inclusi_msk.run();
}
void TArchInt_mask::fill() const
{
TString query;
query << "SELECT * FROM " F9_DRD " WHERE " DRD_CODSOC " = '" << F9CONF.get_ambiente() << "' AND " DRD_ID_EST " like 'R%' ORDER BY " << DRD_TIME << " DESC;";
fp_db().sq_set_exec(query, false);
TSheet_field& sf = sfield(S_ELAB);
sf.reset();
int i = 0;
for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next())
{
TString tipo;
const int row = sf.set_row_cell(F_ARCH_B, fp_db().sq_get(DRD_STATO) == "09");
sf.set_row_cell(F_IDESTR, fp_db().sq_get(DRD_ID_EST), row);
sf.set_row_cell(F_DATAESTR, fp_db().sq_get_date(DRD_TIME), row);
sf.set_row_cell(F_PROV_B, fp_db().sq_get(DRD_FLAG_PD) == "P", row);
sf.set_row_cell(F_TIPODOC, fp_db().sq_get(DRD_TIPODOC), row);
sf.set_row_cell(F_DATADAL, fp_db().sq_get_date(DRD_DATADA), row);
sf.set_row_cell(F_DATAAL, fp_db().sq_get_date(DRD_DATAA), row);
sf.set_row_cell(F_USER, fp_db().sq_get(DRD_UTENTE), row);
TString s = fp_db().sq_get(DRD_STATO);
s << " - " << TArchiviazioneIntegrazioni::traduci_stato(fp_db().sq_get(DRD_STATO));
sf.set_row_cell(F_STATESTR, s, row);
sf.set_row_cell(F_DESCR_E, fp_db().sq_get(DRD_DESC), row);
}
sf.force_update();
}
void TArchInt_mask::delete_estr_fld(const TString& idestr)
{
TFilename dir(F9CONF.get_addr_doc_loc());
if (dexist(dir))
{
dir << SLASH << F9CONF.get_ambiente() << SLASH << idestr << SLASH << "*";
remove_files(dir, true);
}
}
void TArchInt_mask::delete_pack(const bool all)
{
// Se nello sheet non c'e' selezionata alcuna riga viene richiamata col flag all = true
bool flag = false;
TSheet_field& sf = sfield(S_ELAB);
FOR_EACH_SHEET_ROW(sf, nr, row)
{
if (row->get(0)[0] == 'X' || all)
{
flag = true;
const TString id_estr(row->get(cid2index(F_IDESTR)));
TString query;
const TString& codsoc(F9CONF.get_ambiente());
query << "BEGIN\n"
" DECLARE @flag_prov CHAR(1), @stato CHAR(2);\n\n"
" SELECT @flag_prov = " DRD_FLAG_PD ", @stato = " DRD_STATO "\n"
" FROM " F9_DRD "\n"
" WHERE " DRD_ID_EST " = '" << id_estr << "';\n\n"
" IF (@flag_prov = 'P' OR @stato = '" D_GEST_ERR "' OR @stato = '" IN_DIAGN "' OR @stato = '" D_WA_ERR "' OR @stato = '" D_ERR_SOS "') BEGIN\n"
" DELETE FROM " F9_ERR " WHERE " ERR_CODSOC " = '" << codsoc << "' AND " ERR_IDESTR " = '" << id_estr << "';\n"
" END\n"
" ELSE BEGIN\n"
" SELECT @flag_prov AS FLAG, @stato AS STATO;\n"
" END\n"
"END";
fp_db().sq_set_exec(query);
// Elimino testata in DRD, solo se provvis.
query.cut(0) << "BEGIN\n"
" DECLARE @flag_prov CHAR(1), @stato CHAR(2);\n\n"
" SELECT @flag_prov = " DRD_FLAG_PD ", @stato = " DRD_STATO "\n"
" FROM " F9_DRD "\n"
" WHERE " DRD_ID_EST " = '" << id_estr << "';\n\n"
" IF (@flag_prov = 'P' OR @stato = '" D_GEST_ERR "' OR @stato = '" IN_DIAGN "' OR @stato = '" D_WA_ERR "' OR @stato = '" D_ERR_SOS "') BEGIN\n"
" DELETE FROM " F9_DRD " WHERE " DRD_CODSOC " = '" << codsoc << "' AND " DRD_ID_EST " = '" << id_estr << "';\n"
" DELETE FROM " F9_IVA " WHERE " IVA_CODSOC " = '" << codsoc << "' AND " IVA_IDLAN " = '" << id_estr << "';\n"
" DELETE FROM " F9_MOVESTR " WHERE " MES_CODSOC " = '" << codsoc << "' AND " MES_IDESTR " = '" << id_estr << "';\n"
" END\n"
" SELECT @flag_prov AS FLAG, @stato AS STATO;\n"
"END";
fp_db().sq_set_exec(query);
TString stato = fp_db().sq_get("STATO");
if (fp_db().sq_get("FLAG") != "P" && stato != D_GEST_ERR && stato != IN_DIAGN && stato != D_WA_ERR && stato != D_ERR_SOS && !all)
{
warning_box("E' possibile eliminare solo un'estrazione provvisoria\no in uno degli stati di errore se definitiva (02 - 05 - 08).");
return;
}
fp_db().sq_commit();
// DA VEDERE
delete_estr_fld(id_estr);
if (!all)
break;
}
}
if (!flag)
{
if (noyes_box("Eliminare tutti i pacchetti provvisori o in stato di errore gestionale?"))
delete_pack(true);
}
fill();
}
void TArchInt_mask::controllo_errori()
{
TString id_estr, stato;
TSheet_field& sf = sfield(S_ELAB);
bool flag = false;
FOR_EACH_SHEET_ROW(sf, nr, row)
{
if (row->get(0)[0] == 'X')
{
id_estr << row->get(cid2index(F_IDESTR));
stato << row->get(cid2index(F_STATESTR));
flag = true;
break;
}
}
if (flag)
{
if (stato.cut(2) == D_GEST_ERR)
{
TControlloIntegrazioni_mask controllo(F9CONF.get_ambiente(), id_estr);
controllo.run();
}
else
warning_box("Impossibile controllare un'estrazione che non e'\nin stato di %s ('" D_GEST_ERR "').", TArchiviazioneIntegrazioni::traduci_stato(D_GEST_ERR));
}
else
warning_box("Selezionare un'estrazione.");
}
void TArchInt_mask::open_win_estr()
{
if (!F9CONF.get_ambiente().full())
warning_box("Inserire codice ambiente societa' in configurazione");
else f9Int_app().run_estr_msk();
}
void TArchInt_mask::open_win_conf()
{
TConfigIntf9_mask m("Configurazione Archiviazione Sostitutiva", 1, 70, 30, 55, 5);
TLocalisamfile tabmod(LF_TABMOD);
tabmod.put("MOD", "F9");
tabmod.put("COD", "SQL");
tabmod.put("CODTAB", "VERSION");
const bool exists = tabmod.read() == NOERR;
int version = exists ? real(tabmod.get(TABMOD_TABVER)).integer() : TAB_BASE_VERSION - 2;
m.add_button_tool(DLG_OK, "Conferma", TOOL_OK);
m.add_button_tool(DLG_NULL, "", 0);
m.add_button_tool(DLG_QUIT, "Esci", TOOL_QUIT);
m.add_groupbox(CF_CODGROUP, 0, "Codice Ambiente Societa' (WEBAPP):", 1, 0, 69, 3, "");
m.add_string(CF_CODSOC, 0, "Codice ambiente ", 4, 1, 10, "", 10);
m.add_groupbox(CF_ADDRGROUP, 0, "Indicare percorso documenti cartacei:", 1, 3, 69, 4, "");
m.add_string(CF_ADDRDOC, 0, "Server ", 2, 4, 256, "", 40);
m.add_string(CF_ADDRDOCLOC, 0, "Locale ", 2, 5, 256, "", 40);
m.add_groupbox(CF_ESTRGROUP, 0, "Opzioni estrazione", 1, 7, 69, 4, "");
m.add_boolean(CF_CARTEXP, 0, "Estrai anche documenti cartacei", 2, 8);
m.add_groupbox(CF_LVLGROUP, 0, "Livello Patch Tabelle F9", 1, 11, 69, 4, "");
m.add_string(CF_LVLOLD, 0, "Livello Attuale", 35, 12, 10, "D", 10);
m.add_string(CF_LVLNEW, 0, "Nuovo Livello ", 2, 12, 10, "D", 10);
m.set_handlers();
m.set(CF_CODSOC, F9CONF.get_ambiente());
m.set(CF_ADDRDOC, F9CONF.get_addr_doc());
m.set(CF_ADDRDOCLOC, F9CONF.get_addr_doc_loc());
m.set(CF_CARTEXP, F9CONF.get_has_cartexp());
m.set(CF_LVLOLD, version);
m.disable(CF_LVLOLD);
if (m.run() == K_ENTER)
save_conf(m);
}
bool TArchInt_mask::save_conf(TMask& config_mask)
{
TString old_codsoc = F9CONF.get_ambiente();
TString new_lvl = config_mask.get(CF_LVLNEW);
TString old_lvl = config_mask.get(CF_LVLOLD);
if (config_mask.get(CF_CODSOC).empty())
warning_box("Codice Ambiente vuoto. Impossibile salvare i dati.");
F9CONF.set_ambiente(config_mask.get(CF_CODSOC));
F9CONF.set_addr_doc(config_mask.get(CF_ADDRDOC));
F9CONF.set_addr_doc_loc(config_mask.get(CF_ADDRDOCLOC));
F9CONF.set_has_cartexp(config_mask.get_bool(CF_CARTEXP));
config_mask.close();
//f9Int_app().edit_wa(old_codsoc);
if (new_lvl.full() && (new_lvl != old_lvl))
{
TLocalisamfile tabmod(LF_TABMOD);
tabmod.put("MOD", "F9");
tabmod.put("COD", "SQL");
tabmod.put("CODTAB", "VERSION");
tabmod.put("S0", real(new_lvl));
if (tabmod.write_rewrite() == NOERR)
{
config_mask.set(CF_LVLOLD, new_lvl);
config_mask.set(CF_LVLNEW, "");
message_box("Versione impostata!");
}
else
return error_box("Impossibile aggiornare il livello degli archivi");
}
return true;
}
TArchInt_mask::TArchInt_mask() : TAutomask("f90600a")
{
int i = 0;
// Controllo che esistano delle categorie documentali.
fill();
}
/////////////////////////////////////////////////////////
// Tf9IntEstrai_mask
////////////////////////////////////////////////////////
int Tf9IntEstrai_mask::estrai()
{
const TDate dataini = get_dataini();
const TDate dataend = get_dataend();
const char tipodoc = get_tipodoc();
const bool flagpro = is_provviso();
TFilename path;
TLog_report log("Log estrazione");
//f9_app().get_spotlite_path(path);
// Vero e proprio oggetto estrazione
_estrazione = new TEstrazione(
F9CONF.get_ambiente(), // Codice ambiente
flagpro, // Flag prov.
tipodoc, // Tipo doc.
get_descr(), // Descrizione estrazione
F9CONF.get_addr_doc(), // Cartella documenti
false, // Estrazione di un escluso
path, // Spotlight path
&log, // Log
&dataini, // Data estr. mov dal
&dataend, // Data estr. mov al
F9CONF.get_has_cartexp() // Flag per estrarre anche i doc. cartacei
);
const TString& doc_sdi = get(ES_DOCSDI);
// Leggo i movimenti e li carico nell'estrazione. /////////////
TString query;
query = "USE MOV KEY 2";
query << "\nFROM DATAREG=" << dataini.date2ansi() << "\nTO DATAREG=" << dataend.date2ansi();
TISAM_recordset mov(query);
TProgress_monitor* progr = new TProgress_monitor(mov.items(), "Acquisizione movimenti", false);
TLocalisamfile clifo(LF_CLIFO);
const TipoIVA tipo = tipodoc == 'A' ? iva_acquisti : iva_vendite;
int count = 0;
// Prendo tutti i movimenti a partire da una data e li carico tutti fino alla data finale
TToken_string caus_list = select_causali(doc_sdi, tipodoc);
for (bool ok = mov.move_first(); progr->add_status() && ok; ok = mov.move_next())
{
const TString& cod_cau = mov.get_string(MOV_CODCAUS);
if (causale_in_lista(cod_cau, caus_list))
{
TToken_string elab_f9(mov.get_string(MOV_ELABF9), ';'); // Stringa del campo elaborazione f9 nel file mov
bool escluso = (elab_f9.items() == 3 && elab_f9.get_bool(2));
const TCausale & caus = cached_causale(mov.get_string(MOV_CODCAUS), mov.get_date(MOV_DATAREG).year());
const bool stampato = mov.get_bool(MOV_REGST);
const TRegistro& reg = caus.reg();
const TipoIVA& iva = reg.iva();
TString numdoc = mov.get_string(MOV_NUMDOCEXT);
long nreg = mov.get_long(MOV_NUMREG);
if (numdoc.blank())
numdoc = mov.get_string(MOV_NUMDOC);
// Se definitivo controllo il flag di stampato REGST
if ((flagpro || stampato) && numdoc.full())
{
// Creo il movimento da inserire e lo inserisco
_estrazione->add_mov(new TMovimento_estr(mov, tipo, escluso));
++count;
}
}
}
delete progr;
_stats = { 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0 };
// Effettiva estrazione. Faccio partire diagnostica e scrittura db.
const result_estr result = _estrazione->estrai_integrazioni();
//LAVORO SULLE STAT
int tot;
tot = (int)_stats.int_match + (int)_stats.int_nomatch + (int)_stats.int_err;
TString msg;
msg << "Tot. Docs : " << tot << "\n";
msg << "Mov. Integrazione estratti : " << (int)_stats.int_match << "\n";
msg << "Mov. Integrazione XML non trovato: " << (int)_stats.int_nomatch << "\n";
msg << "Mov. Integrazione in errore : " << (int)_stats.int_err;
message_box(msg);
return result;
}
bool Tf9IntEstrai_mask::causale_in_lista(const TString& cod_cau, TToken_string cau_list)
{
bool in_list = false;
int a = cau_list.items(); //da rimuovere
for (int i = 0; i < cau_list.items(); i++)
{
TString prov = cau_list.get(i); //dr
if (cod_cau == cau_list.get(i))
{
in_list = true;
break;
}
}
return in_list;
}
TToken_string Tf9IntEstrai_mask::select_causali(const TString& tipo_sdi, const char reg)
{
TCursor cur(new TRelation(LF_CAUSALI));
TToken_string caus_list;
const int items = cur.items();
for (cur.first_item(); cur.pos() < items; cur.succ_item())
{
const TRectype& rec = cur.curr();
if (reg == 'V')
{
const TString& tipodocsdi = rec.get(CAU_TIPODOCSDI);
if ((tipo_sdi == "T" && tipodocsdi.full()) || tipodocsdi == tipo_sdi)
caus_list.add(rec.get(CAU_CODCAUS));
}
else if (reg == 'A')
{
if (rec.get(CAU_CODCAUREG).full())
{
const TCausale & caus_coll = cached_causale(rec.get(CAU_CODCAUREG), get_date(ES_DATAEND).year());
const TString& tipodocsdi = caus_coll.tipodocsdi();
if ((tipo_sdi == "T" && tipodocsdi.full()) || tipodocsdi == tipo_sdi)
caus_list.add(rec.get(CAU_CODCAUS));
}
}
}
return caus_list;
}
bool Tf9IntEstrai_mask::estrai_handler(TMask_field& f, KEY key)
{
Tf9IntEstrai_mask& msk = (Tf9IntEstrai_mask&)f.mask();
TArchiviazioneIntegrazioni& app = f9Int_app();
// Estraggo
const int stato = msk.estrai(); // Main function
// Gestione risultato estrazione
if (stato == 1)
{
message_box("Estrazione avvenuta con successo!");
//app.segna_estratti();
}
if (stato == 0 || stato == -3)
{
warning_box("L'estrazione non e' stata completata. Controllare il log degli errori.");
//if (stato == 0) // Errore scrittura F9IVA, non segno in errore in testata...
//msk.segna_in_errore(); // ... se l'errore e' dovuto alla scrittura sul db.
}
msk.field(ES_DESCR).set("");
msk.stop_run(K_FORCE_CLOSE);
return true;
}
Tf9IntEstrai_mask::Tf9IntEstrai_mask() : TMask("Estrazione", 1, 60, 18), _estrazione(nullptr)
{
add_button_tool(DLG_ELABORA, "Estrai", TOOL_ELABORA);
add_button_tool(DLG_NULL, "", 0);
add_button_tool(DLG_QUIT, "Esci", TOOL_QUIT);
add_groupbox(ES_DATEGROUP, 0, "Inserire periodo per estrazione:", 1, 0, 59, 3, "");
add_date(ES_DATAINI, 0, "dal", 4, 1, "");
add_date(ES_DATAEND, 0, " al", 33, 1, "");
add_groupbox(ES_FLAGGROUP, 0, "Selezionare tipo di estrazione:", 1, 3, 28, 3, "");
add_list(ES_FLAGPROV, 0, "Flag provvisorio", 2, 4, 1, "", "P|D", "Provvisorio|Definitivo");
add_groupbox(ES_TIPOGROUP, 0, "Selezionare documenti da estrarre:", 32, 3, 28, 4, "");
add_list(ES_TIPODOC, 0, "Tipi documento", 33, 4, 1, "", "A|V", "Acquisti|Vendite");
add_list(ES_DOCSDI, 0, "Tipi doc SDI", 33, 5, 5, "", "T|TD16|TD17|TD18|TD19|TD28",
"TUTTI|TD16 Integ. rev. chrg|TD17 Integ. servizi estero|TD18 Integ. beni intracom.|TD19 Integ. beni ex art. 17|TD28 Fatt. cartacea S.Marino");
add_groupbox(ES_DESCGROUP, 0, "Inserire descrizione estrazione:", 1, 7, 59, 3, "");
add_string(ES_DESCR, 0, "Descrizione", 2, 8, 250, "", 40);
set_handler(DLG_ELABORA, estrai_handler);
//set_handler(ES_DATAINI, dataini_handler);
//set_handler(ES_DATAEND, dataend_handler);
TDate dt(TODAY); dt.set_day(1); dt.set_month(1);
set(ES_DATAINI, dt);
set(ES_DATAEND, today);
}
////////////////////////////////////////////////////////
// TControlloIntegrazioni_mask
////////////////////////////////////////////////////////
void TControlloIntegrazioni_mask::associa() // todo: levare gli ultimi residui del vecchio funzionamento del controllo errori
{
TToken_string* mov_sel = selected_mov();
TToken_string* fat_sel = selected_fat();
if (mov_sel == nullptr || fat_sel == nullptr)
{
warning_box("Selezionare prima un movimento e una fattura elettronica.");
return;
}
int numreg = mov_sel->get_int(cid2index(F_CNUMREG));
TRectype & mov = (TRectype &)cache().get(LF_MOV, numreg);
TToken_string keys(fat_sel->get(cid2index(F_FPROKEYS)), ';');
bool ok = true;
char c = _tipo_doc_err;
//DAT CAPIRE COME TIRARE FUORI TIPO IVA ESTR
if (_tipo_doc_err == 'A')
{
ok &= associa_int_acq(mov_sel->get_int(cid2index(F_CNUMREG)), keys);
}
else
{
ok &= associa_int_ven(mov_sel->get_int(cid2index(F_CNUMREG)), keys);
}
if (ok)
{
// Tolgo il flag di in errore sul vettore in modo da rifare la fill e non venir piu' contato come da controllare
int count = -1;
FOR_EACH_ARRAY_ROW(_controllo_mov, r, row)
if (count < _selected_mov && row->get_bool(0)) // Devo saltare tutti quelli che non hanno il flag e contare solo quelli che ce l'hanno
count++;
dberr_del_err(_cod_soc, _id_estr, mov_sel->get_int(cid2index(F_CNUMREG)));
}
}
bool TControlloIntegrazioni_mask::associa_int_ven(const long numreg, TToken_string key_paf)
{
TRectype & mov = (TRectype &)cache().get(LF_MOV, numreg);
bool ok = mov.full();
ok &= key_paf.full();
if (ok) // Scrivo sul movimento il riferimento al fppro
{
//mov.put(MOV_IDDOCSDI, fppro_db().get_numdoc());
//mov.put(MOV_DATADOCSDI, fppro_db().get_datadoc());
mov.put(MOV_KEYPAF, key_paf);
ok = mov.rewrite() == NOERR;
}
else // Se la scrittura sul db fallisce levo sul movimento il riferimento all'fppro
{
//mov.zero(MOV_IDDOCSDI);
//mov.zero(MOV_DATADOCSDI);
mov.zero(MOV_KEYPAF);
mov.rewrite();
}
return ok;
}
bool TControlloIntegrazioni_mask::associa_int_acq(const long numreg, TToken_string key_fppro)
{
TRectype & mov = (TRectype &)cache().get(LF_MOV, numreg);
bool ok = mov.full();
ok &= key_fppro.full();
if (ok) // Scrivo sul movimento il riferimento al fppro
{
//mov.put(MOV_IDDOCSDI, fppro_db().get_numdoc());
//mov.put(MOV_DATADOCSDI, fppro_db().get_datadoc());
mov.put(MOV_KEYFPPRO, key_fppro);
ok = mov.rewrite() == NOERR;
}
else // Se la scrittura sul db fallisce levo sul movimento il riferimento all'fppro
{
//mov.zero(MOV_IDDOCSDI);
//mov.zero(MOV_DATADOCSDI);
mov.zero(MOV_KEYFPPRO);
mov.rewrite();
}
return ok;
}
void TControlloIntegrazioni_mask::conferma_esclusi() const
{
const TMask& mask = *this;
TSheet_field& sf = mask.sfield(S_CONTROLLO);
FOR_EACH_SHEET_ROW_LOOP(sf, row)
{
const long nreg = sf.get_long_row_cell(row, F_CNUMREG);
TRectype & movs = (TRectype&)cache().get(LF_MOV, nreg);
if (sf.get_bool_row_cell(row, F_CESCLUDI))
{
TToken_string stato("", ';');
stato.add("", 0);
stato.add(today.date2ansi());
stato.add("X");
movs.put(MOV_ELABF9, stato);
movs.rewrite();
sf.set_row_cell(F_CESCLUSO, "Si", row);
TString query;
query << "UPDATE " F9_ERR " SET ESCLUSO = 'Si' WHERE " ERR_CODSOC " = '" << _cod_soc << "' AND IDESTR = '" <<
_id_estr << "' AND NUMREG = '" << nreg << "';";
fp_db().sq_set_exec(query);
fp_db().sq_commit();
}
else
{
if (movs.get(MOV_ELABF9).full())
{
movs.put(MOV_ELABF9, "");
sf.set_row_cell(F_CESCLUSO, "", row);
movs.rewrite();
TString query;
query << "UPDATE " F9_ERR " SET ESCLUSO = NULL WHERE " ERR_CODSOC " = '" << _cod_soc << "' AND IDESTR = '" <<
_id_estr << "' AND NUMREG = '" << nreg << "';";
fp_db().sq_set_exec(query);
fp_db().sq_commit();
}
}
}
sf.force_update();
sf.show();
}
TToken_string* TControlloIntegrazioni_mask::selected_mov()
{
TSheet_field& movs = sfield(S_CONTROLLO);
FOR_EACH_SHEET_ROW(movs, nr, row)
{
if (row->get(0)[0] == 'X')
{
_selected_mov = nr;
return row;
}
}
return nullptr;
}
TToken_string* TControlloIntegrazioni_mask::selected_fat() const
{
TSheet_field& fppro = sfield(S_FPPRO);
FOR_EACH_SHEET_ROW(fppro, nr, row)
{
if (row->get(0)[0] == 'X')
return row;
}
return nullptr;
}
TArray& TControlloIntegrazioni_mask::import_error_list()
{
_tipo_doc_err = dberr_get_err(_cod_soc, _id_estr, _controllo_mov);
return _controllo_mov;
}
void TControlloIntegrazioni_mask::fill_sheets()
{
TSheet_field& sf = sfield(S_CONTROLLO);
sf.reset();
if (!_is_escluso)
import_error_list();
else
_controllo_mov = f9Int_app().esclusi();
FOR_EACH_ARRAY_ROW(_controllo_mov, r, row)
{
TToken_string& sfrow = sf.row(-1);
if (row->get_bool(0))
{
sfrow = *row;
sf.set_row_cell(101, false, r);
}
}
sf.force_update();
// Fill fppro sheet
if (_tipo_doc_err == 'A')
fill_fppro_sheet();
else
fill_pafw300_sheet();
}
void TControlloIntegrazioni_mask::fill_pafw300_sheet(bool filter)
{
TSheet_field& sf = sfield(S_FPPRO);
sf.reset();
const char* order;
switch (_ordin)
{
default:
case 'D': order = "P7_DATA"; break;
case 'N': order = "P7_NUMERO"; break;
case 'F': order = "FORNITORE"; break;
case 'R': order = "P2_ANADENOMIN"; break;
case 'P': order = "P2_FISCIVACOD"; break;
}
TString query;
query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT,\n" <<
"PW_TIPODOC AS TIPODOC, P7_DATA AS DATA, P7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC,\n" <<
"PW_RAGSOC AS CLIENTE, " <<
"P2_ANADENOMIN AS RAGSOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAF2700F\n" <<
"JOIN PAF0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" <<
"JOIN PAF0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" <<
"JOIN PAFW300F ON PQ_KEYPRGINVIO = PW_KEYPRGINVIO AND PQ_KEYHEADERFATT = PW_KEYHEADERFATT AND PQ_KEYBODYFATT = PW_KEYBODYFATT\n" <<
"WHERE PW_DATA > '20211201'" << "\n";
if (filter)
{
if (!_flt_da_data.empty())
query << "AND PW_DATA >= '" << _flt_da_data.date2ansi() << "'";
else
query << "AND PW_DATA >= '20010101'";
if (!_flt_a_data.empty())
query << "AND PW_DATA <= '" << _flt_a_data.date2ansi() << "'\n";
else
query << "AND PW_DATA <= '" << today.date2ansi() << "'\n";
if (!_flt_tipodoc.empty())
query << "AND PW_TIPODOC = '" << _flt_tipodoc << "'\n";
if (!_flt_numdoc.empty())
query << "AND P7_NUMERO like '%" << _flt_numdoc << "%'\n";
if (!_flt_tot_doc_da.is_zero())
query << "AND PQ_IMPTOTDOC >= '" << _flt_tot_doc_da << "'\n";
if (!_flt_tot_doc_a.is_zero())
query << "AND PQ_IMPTOTDOC <= '" << _flt_tot_doc_a << "'\n";
if (!_flt_ragsoc.empty())
query << "AND P2_ANADENOMIN like '%" << _flt_ragsoc << "%'\n";
if (!_flt_codforn.empty())
query << "AND PW_RAGSOC = '" << _flt_codforn << "'\n";
if (!_flt_piva.empty())
query << "AND P2_FISCIVACOD = '" << _flt_piva << "'\n";
}
query << "ORDER BY " << order << " " << (_verso == 'A' ? "ASC" : "DESC") << "\n";
fp_db().sq_set_exec(query, false);
for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next())
{
const int row = sf.set_row_cell(F_FTIPODOC, fp_db().sq_get("TIPODOC"));
sf.set_row_cell(F_FDATA, fp_db().sq_get_date("DATA"), row);
sf.set_row_cell(F_FNUMDOC, fp_db().sq_get("NUMDOC"), row);
sf.set_row_cell(F_FIMPTOTDOC, fp_db().sq_get("IMPTOTDOC"), row);
sf.set_row_cell(F_FFORNITORE, fp_db().sq_get("CLIENTE"), row);
sf.set_row_cell(F_FRAGSOC, fp_db().sq_get("RAGSOC"), row);
sf.set_row_cell(F_FSTATOPIVA, fp_db().sq_get("STATOPIVA"), row);
sf.set_row_cell(F_FPIVA, fp_db().sq_get("PIVA"), row);
TString s = fp_db().sq_get("KEYPRGINVIO");
s << ";" << fp_db().sq_get("KEYHEADERFATT") << ";" << fp_db().sq_get("KEYBODYFATT");
sf.set_row_cell(F_FPROKEYS, s, row);
}
sf.force_update();
}
void TControlloIntegrazioni_mask::fill_fppro_sheet(bool filter)
{
TSheet_field& sf = sfield(S_FPPRO);
sf.reset();
const char* order;
switch (_ordin)
{
default:
case 'D': order = "P7_DATA"; break;
case 'N': order = "P7_NUMERO"; break;
case 'F': order = "FORNITORE"; break;
case 'R': order = "P2_ANADENOMIN"; break;
case 'P': order = "P2_FISCIVACOD"; break;
}
TString query;
query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT,\n" <<
"PZ_TIPODOC AS TIPODOC, P7_DATA AS DATA, P7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC,\n" <<
"PZ_CLIFOR AS FORNITORE, " <<
"P2_ANADENOMIN AS RAGSOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" <<
"JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" <<
"JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" <<
"JOIN FPPRO00F ON PQ_KEYPRGINVIO = PZ_KEYPRGINVIO AND PQ_KEYHEADERFATT = PZ_KEYHEADERFATT AND PQ_KEYBODYFATT = PZ_KEYBODYFATT\n" <<
"WHERE PZ_DATA > '20211201'" << "\n";
if (filter)
{
if (!_flt_da_data.empty())
query << "AND P7_DATA >= '" << _flt_da_data.date2ansi() << "'";
else
query << "AND P7_DATA >= '20010101'";
if (!_flt_a_data.empty())
query << "AND P7_DATA <= '" << _flt_a_data.date2ansi() << "'\n";
else
query << "AND P7_DATA <= '" << today.date2ansi() << "'\n";
if (!_flt_tipodoc.empty())
query << "AND PZ_TIPODOC = '" << _flt_tipodoc << "'\n";
if (!_flt_numdoc.empty())
query << "AND P7_NUMERO like '%" << _flt_numdoc << "%'\n";
if (!_flt_tot_doc_da.is_zero())
query << "AND PQ_IMPTOTDOC >= '" << _flt_tot_doc_da << "'\n";
if (!_flt_tot_doc_a.is_zero())
query << "AND PQ_IMPTOTDOC <= '" << _flt_tot_doc_a << "'\n";
if (!_flt_ragsoc.empty())
query << "AND P2_ANADENOMIN like '%" << _flt_ragsoc << "%'\n";
if (!_flt_codforn.empty())
query << "AND PZ_CLIFOR = '" << _flt_codforn << "'\n";
if (!_flt_piva.empty())
query << "AND P2_FISCIVACOD = '" << _flt_piva << "'\n";
}
query << "ORDER BY " << order << " " << (_verso == 'A' ? "ASC" : "DESC") << "\n";
fp_db().sq_set_exec(query, false);
for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next())
{
const int row = sf.set_row_cell(F_FTIPODOC, fp_db().sq_get("TIPODOC"));
sf.set_row_cell(F_FDATA, fp_db().sq_get_date("DATA"), row);
sf.set_row_cell(F_FNUMDOC, fp_db().sq_get("NUMDOC"), row);
sf.set_row_cell(F_FIMPTOTDOC, fp_db().sq_get("IMPTOTDOC"), row);
sf.set_row_cell(F_FFORNITORE, fp_db().sq_get("CLIENTE"), row);
sf.set_row_cell(F_FRAGSOC, fp_db().sq_get("RAGSOC"), row);
sf.set_row_cell(F_FSTATOPIVA, fp_db().sq_get("STATOPIVA"), row);
sf.set_row_cell(F_FPIVA, fp_db().sq_get("PIVA"), row);
TString s = fp_db().sq_get("KEYPRGINVIO");
s << ";" << fp_db().sq_get("KEYHEADERFATT") << ";" << fp_db().sq_get("KEYBODYFATT");
sf.set_row_cell(F_FPROKEYS, s, row);
}
sf.force_update();
}
void TControlloIntegrazioni_mask::open_win_filter()
{
TMask& m = get_win_filter();
m.set(F_FLTDATADA, _flt_da_data);
m.set(F_FLTDATAA, _flt_a_data);
m.run();
_flt_da_data = m.get_date(F_FLTDATADA);
_flt_a_data = m.get_date(F_FLTDATAA);
_flt_tipodoc = m.get(F_FLTTIPODOC);
_flt_numdoc = m.get(F_FLTNUMDOC);
_flt_tot_doc_da = m.get_real(F_FLTTOTDOCDA);
_flt_tot_doc_a = m.get_real(F_FLTTOTDOCA);
//_flt_codforn = m.get(F_FLTCODFORN);
_flt_ragsoc = m.get(F_FLTRAGSOC);
_flt_piva = m.get(F_FLTPIVA);
//Ordinamento
_ordin = m.get(F_ORDER)[0];
_verso = m.get(F_VERSO)[0];
ini_set_string(CONFIG_DITTA, INI_PAR_MOD, "ORDINAM", &_ordin);
ini_set_string(CONFIG_DITTA, INI_PAR_MOD, "VERSO", &_verso);
}
TMask& TControlloIntegrazioni_mask::get_win_filter()
{
TMask* m = nullptr;
if (m == nullptr)
{
m = new TMask("Filtro griglia FPPRO", 1, 65, 36, 60, 2);
// TOOLBAR
m->add_button_tool(DLG_OK, "Conferma", TOOL_OK);
m->add_button_tool(DLG_NULL, "", 0);
//m->add_button_tool(DLG_QUIT, "Esci", TOOL_QUIT);
// Filtro Documenti
m->add_groupbox(F_FLTDOCGRP, 0, "@BFiltra sui parametri del documento", 1, 1, 59, 5);
m->add_list(F_FLTTIPODOC, 0, "TIPO DOC. ", 2, 2, 8, "",
"|TD01|TD02|TD03|TD04|TD05|TD06|TD07|TD08|TD10|TD11|TD16|TD17|TD18|TD19|TD20|TD21|TD22|TD23|TD24|TD25|TD26|TD27|TD28",
"|TD01|TD02|TD03|TD04|TD05|TD06|TD07|TD08|TD10|TD11|TD16|TD17|TD18|TD19|TD20|TD21|TD22|TD23|TD24|TD25|TD26|TD27|TD28");
m->add_string(F_FLTNUMDOC, 0, "NUM.DOC.", 30, 2, 8);
m->add_string(F_FLTTOTDOCDA, 0, "TOT.DOC. DA", 2, 3, 8);
m->add_string(F_FLTTOTDOCA, 0, "A ", 10, 4, 8);
// Filtro date
m->add_groupbox(F_FLTDATAGRP, 0, "@BFiltra per data documento", 1, 6, 59, 3);
m->add_date(F_FLTDATADA, 0, "DATA DOC. DAL", 2, 7);
m->add_date(F_FLTDATAA, 0, " AL", 30, 7);
// Filtro per fornitore
m->add_groupbox(F_FLTFORNGRP, 0, "@BFiltra per parametri fornitore", 1, 9, 59, 4);
//m->add_string(F_FLTCODFORN, 0, "CODICE ", 2, 10, 8);
m->add_string(F_FLTPIVA, 0, "P.IVA", 30, 10, 15);
m->add_string(F_FLTRAGSOC, 0, "RAG.SOC.", 2, 11, 48);
// Ordinatori
m->add_radio(F_ORDER, 0, "@BOrdina per:", 1, 13, 59, "D|N|F|R|P", "DATA|NUMDOC|FORNITORE|RAGSOC|PIVA", "Z");
m->add_radio(F_VERSO, 0, "@BVerso:", 1, 16, 59, "A|D", "Crescente|Decrescente", "Z");
//m->set_handler(DLG_OK, save_conf_handler);
_ordin = ini_get_string(CONFIG_DITTA, INI_PAR_MOD, "ORDINAM", "D")[0];
_verso = ini_get_string(CONFIG_DITTA, INI_PAR_MOD, "VERSO", "A")[0];
m->set(F_FLTDATADA, _flt_da_data);
m->set(F_FLTDATAA, _flt_a_data);
m->set(F_FLTDATAA, _flt_tipodoc);
m->set(F_FLTNUMDOC, _flt_numdoc);
m->set(F_FLTTOTDOCDA, _flt_tot_doc_da);
m->set(F_FLTTOTDOCA, _flt_tot_doc_a);
//m->set(F_FLTCODFORN, _flt_codforn);
m->set(F_FLTPIVA, _flt_piva);
m->set(F_FLTRAGSOC, _flt_ragsoc);
m->set(F_ORDER, &_ordin);
m->set(F_VERSO, &_verso);
}
return *m;
}
bool TControlloIntegrazioni_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case DLG_USER:
if (e == fe_button && jolly > 0)
{
TSheet_field& sf = sfield(S_CONTROLLO);
TToken_string& row = sf.row(sf.selected());
TRectype mov(LF_MOV);
mov.put(MOV_NUMREG, row.get(sf.cid2index(F_CNUMREG)));
//if (open_mov(mov))
//fill();
}
break;
case B_FILTER_CONF:
if (e == fe_button)
{
open_win_filter();
if (_tipo_doc_err == 'V')
fill_pafw300_sheet(true);
else
fill_fppro_sheet(true);
field(B_FILTER_OFF).enable();
field(B_FILTER_ON).disable();
}
break;
case B_FILTER_ON:
if (e == fe_button)
{
if (_tipo_doc_err == 'V')
fill_pafw300_sheet(true);
else
fill_fppro_sheet(true);
field(B_FILTER_OFF).enable();
field(B_FILTER_ON).disable();
}
break;
case B_FILTER_OFF:
if (e == fe_button)
{
if (_tipo_doc_err == 'V')
fill_pafw300_sheet(false);
else
fill_fppro_sheet(false);
field(B_FILTER_ON).enable();
field(B_FILTER_OFF).disable();
}
break;
case B_ASSOC:
if (e == fe_button)
{
associa();
fill_sheets(); // Ricarico gli sheet
}
break;
case B_ESCL:
if (e == fe_button)
{
conferma_esclusi();
fill_sheets();
}
break;
case B_SELESCL:
if (e == fe_button)
{
_sel_esclusi = !_sel_esclusi;
field(B_ASSOC).enable(!_sel_esclusi);
field(B_ESCL).enable(_sel_esclusi);
field(B_ALLESCL).enable(_sel_esclusi);
sfield(S_CONTROLLO).enable_column(cid2index(F_CESCLUDI), _sel_esclusi);
sfield(S_CONTROLLO).force_update();
}
break;
case B_ALLESCL:
if (e == fe_button)
{
TSheet_field& sf = sfield(S_CONTROLLO);
sf.hide();
const bool active = *sf.row(0).get(cid2index(F_CESCLUDI)) == 'X';
FOR_EACH_SHEET_ROW(sf, nr, row)
row->add(active ? " " : "X", cid2index(F_CESCLUDI));
sf.force_update();
sf.show();
}
break;
case S_CONTROLLO:
if (e == fe_init)
sfield(S_CONTROLLO).enable_column(cid2index(F_CESCLUDI), false);
break;
case F_CSEL:
if (e == fe_modify)
//selfatt(o, jolly);
break;
default: break;
}
return true;
}
TControlloIntegrazioni_mask::TControlloIntegrazioni_mask(const char* codsoc, const char* id_estr, const bool esclusi)
: TAutomask("f90600b"), _ordin('D'), _verso('A'), _selected_mov(0), _sel_esclusi(false)
{
_cod_soc = codsoc;
_id_estr = id_estr;
field(B_ESCL).disable();
field(B_ALLESCL).disable();
_is_escluso = esclusi;
field(B_FILTER_ON).disable();
field(B_FILTER_OFF).disable();
// Fill controllo sheet
if (!_is_escluso)
import_error_list();
else
_controllo_mov = f9Int_app().esclusi();
_datada = EOTIME;
_dataa = 0L;
FOR_EACH_ARRAY_ROW(_controllo_mov, r, row)
{
if (row->get_bool(0))
{
const TDate& d = row->get_date(3);
if (d < _datada)
_datada = d;
if (d > _dataa)
_dataa = d;
}
}
fill_sheets();
}
////////////////////////////////////////////////////////
// TApri_pacchetto_msk
////////////////////////////////////////////////////////
void TApri_pacchetto_msk::conferma_esclusi() const
{
TSheet_field& sf = sfield(S_INCL);
FOR_EACH_SHEET_ROW_LOOP(sf, row)
{
const long nreg = sf.get_long_row_cell(row, FI_NUMREG);
TRectype & movs = (TRectype&)cache().get(LF_MOV, nreg);
const TString & da_escludere = sf.get_str_row_cell(row, FI_IESCLUDI);
if (da_escludere == "S")
{
TToken_string stato("", ';');
stato.add("", 0);
stato.add(today.date2ansi());
stato.add("X");
movs.put(MOV_ELABF9, stato);
movs.rewrite();
sf.set_row_cell(FI_IESCLUSO, true, row);
}
else
{
if (movs.get(MOV_ELABF9).full())
{
movs.zero(MOV_ELABF9);
sf.set_row_cell(FI_IESCLUSO, false, row);
movs.rewrite();
}
}
}
sf.force_update();
}
bool TApri_pacchetto_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case DLG_USER:
if (e == fe_button)
{
TSheet_field& sf = sfield(S_INCL);
TToken_string& row = sf.row(sf.selected());
TRectype mov(LF_MOV);
mov.put(MOV_NUMREG, row.get(sf.cid2index(FI_NUMREG)));
//open_mov(mov);
}
break;
case B_ISELESCL:
if (e == fe_button)
{
static bool sel_esclusi = false;
if (_provv || TArchiviazioneIntegrazioni::is_stato_errore(_statoestr))
{
sel_esclusi = !sel_esclusi;
field(B_IESCL).enable(sel_esclusi);
field(B_IALLESCL).enable(sel_esclusi);
sfield(S_INCL).enable_column(cid2index(FI_IESCLUDI), sel_esclusi);
sfield(S_INCL).force_update();
return true;
}
warning_box("E' possibile escludere i movimenti solo per pacchetti bloccati\nin stato di errore '" D_WA_ERR " - %s'",
TArchiviazioneIntegrazioni::traduci_stato(D_WA_ERR));
}
break;
case B_IESCL:
if (e == fe_button)
conferma_esclusi();
break;
case B_IALLESCL:
if (e == fe_button)
{
TSheet_field& sf = sfield(S_INCL);
const bool active = *sf.row(0).get(cid2index(FI_IESCLUDI)) == 'S';
FOR_EACH_SHEET_ROW_LOOP(sf, row)
sf.set_row_cell(FI_IESCLUDI, active ? "N" : "S", row);
sf.force_update();
return true;
}
break;
default: break;
}
return true;
}
void TApri_pacchetto_msk::fill_estr() const
{
TString query;
query << "SELECT " IVA_SEZIVA ", " IVA_DATADOC ", " IVA_NUMDOC ", " IVA_NPROT "\n"
"FROM " F9_IVA "\n"
"WHERE " IVA_CODSOC " = '" << F9CONF.get_ambiente() << "' AND " IVA_IDLAN " = '" << _idestr << "'";
// REG + DATAREG + PROTIVA + DATAINC + DATA74TER + NUMREG
TSQL_recordset rec("");
fp_db().sq_set_exec(query, false);
TSheet_field& sf = sfield(S_ESCL);
sf.reset();
TProgress_monitor prog(fp_db().sq_items(), "Caricamento dati estrazione...");
for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next())
{
if (!prog.add_status())
break;
TString sql;
sql << "SELECT NUMREG, DATAREG, DATADOC, CODCAUS, TIPODOC, MESELIQ, NUMDOC, TOTDOC, CODCF, REG, PROTIVA, DESCR, ELABF9\n"
"FROM MOV\n"
"WHERE REG = '" << fp_db().sq_get(IVA_SEZIVA) << "' AND DATADOC='" << TDate(fp_db().sq_get_date(IVA_DATADOC)).date2ansi() << "'"
" AND PROTIVA = '" << fp_db().sq_get(IVA_NPROT) << "'";
rec.set(sql);
rec.move_first();
const int row = sf.set_row_cell(FI_NUMREG, rec.get(0).as_string()); // Numreg
sf.set_row_cell(FI_DATAREG, rec.get(1).as_date(), row); // Data reg
sf.set_row_cell(FI_DATADOC, rec.get(2).as_string(), row); // Data doc
TString codcaus;
codcaus << rec.get(3).as_string();
codcaus.lpad(3, '0');
sf.set_row_cell(FI_CODCAUS, codcaus, row); // Cod caus
sf.set_row_cell(FI_TIPOMOV, rec.get(4).as_string(), row); // Tipo doc
sf.set_row_cell(FI_MESELIQ, rec.get(5).as_string(), row); // Mese liq
sf.set_row_cell(FI_NUMDOC, rec.get(6).as_string(), row); // Num doc
sf.set_row_cell(FI_IMPTOTDOC, rec.get(7).as_string(), row); // Tot doc
sf.set_row_cell(FI_FORN, rec.get(8).as_string(), row); // Clifo
TToken_string key(_tipodoc == 'A' ? "F" : "C");
key.add(rec.get(8).as_string());
const TRectype& clifo = cache().get(LF_CLIFO, key);
sf.set_row_cell(FI_RAGSOC, clifo.get(CLI_RAGSOC), row); // Rag soc
TString protiva(rec.get(9).as_string());
protiva << "/" << rec.get(10).as_string();
sf.set_row_cell(FI_PROTIVA, protiva, row); // Prot iva
sf.set_row_cell(FI_DESCR, rec.get(11).as_string(), row); // Descr
sf.set_row_cell(FI_IESCLUSO, TToken_string(rec.get(12).as_string(), ';').get_bool(2), row); // Escluso
}
sf.force_update();
}
void TApri_pacchetto_msk::fill_res() const
{
TString query;
query << "SELECT * FROM " F9_MOVESTR "\n"
"INNER JOIN " F9_IVA " ON " IVA_IDLAN " = " MES_IDESTR " AND " IVA_NUMOR " = " MES_NUMREG "\n"
"WHERE " MES_CODSOC " = '" << F9CONF.get_ambiente() << "' AND " MES_IDESTR " = '" << _idestr << "'";
fp_db().sq_set_exec(query, false);
TSheet_field& sf = sfield(S_RES);
TProgress_monitor prog(fp_db().sq_items(), "Caricamento dati estrazione...");
sf.reset();
for (bool ok = fp_db().sq_next(); prog.add_status() && ok; ok = fp_db().sq_next())
{
TString td = fp_db().sq_get(IVA_CAUSSOS);
const TRectype & mov = cache().get(LF_MOV, fp_db().sq_get(MES_NUMREG));
const int row = sf.set_row_cell(F_RSEL, fp_db().sq_get_int(MES_ESTR) ? "X" : " "); // Estratto
sf.set_row_cell(F_RNUMREG, mov.get(MOV_NUMREG), row); // Numreg
sf.set_row_cell(F_RDATAREG, mov.get_date(MOV_DATAREG), row); // Data reg
sf.set_row_cell(F_RDATADOC, mov.get_date(MOV_DATADOC), row); // Data doc
sf.set_row_cell(F_RTIPODOCSDI, td, row); // Tipo Doc SDI
sf.set_row_cell(F_RCODCAUS, mov.get(MOV_CODCAUS), row); // Cod caus
sf.set_row_cell(F_RTIPOMOV, mov.get(MOV_TIPODOC), row); // Tipo doc
sf.set_row_cell(F_RMESELIQ, mov.get_int(MOV_MESELIQ), row); // Mese liq
sf.set_row_cell(F_RNUMDOC, mov.get(MOV_NUMDOC), row); // Num doc
sf.set_row_cell(F_RIMPTOTDOC, mov.get_real(MOV_TOTDOC), row); // Tot doc
sf.set_row_cell(F_RFORN, mov.get_int(MOV_CODCF), row); // Clifo
TToken_string key(mov.get(MOV_TIPO));
key.add(mov.get(MOV_CODCF));
const TRectype & clifo = cache().get(LF_CLIFO, key);
sf.set_row_cell(F_RRAGSOC, clifo.get(CLI_RAGSOC), row); // Rag soc
TString protiva(mov.get(MOV_REG));
protiva << "/" << mov.get(MOV_PROTIVA);
sf.set_row_cell(F_RPROTIVA, protiva, row); // Prot iva
sf.set_row_cell(F_RDESCR, mov.get(MOV_DESCR), row); // Descr
sf.set_row_cell(F_RDESCRERR, fp_db().sq_get(MES_ERR), row); // Descrizione errore
}
sf.force_update();
}
void TApri_pacchetto_msk::set_from_estrazione(TToken_string& row_estrazione)
{
set(F_IIDESTR, _idestr.cut(0) << row_estrazione.get(cid2index(F_IDESTR)));
set(F_IDATA, _dataestr = row_estrazione.get(cid2index(F_DATAESTR)));
set(F_IPROV, _provv = *row_estrazione.get(cid2index(F_PROV_B)) == 'X');
set(F_ITIPOD, (_tipodoc = *row_estrazione.get(cid2index(F_TIPODOC))) == 'V' ? "Vendite" : "Acquisti");
(_statoestr.cut(0) << row_estrazione.get(cid2index(F_STATESTR))).cut(2);
set(F_ISTATOESTR, TString(_statoestr) << " - " << TArchiviazioneIntegrazioni::traduci_stato(_statoestr));
set(F_IDAL, _datadal = row_estrazione.get(cid2index(F_DATADAL)));
set(F_IAL, _dataal = row_estrazione.get(cid2index(F_DATAAL)));
}
TApri_pacchetto_msk::TApri_pacchetto_msk() : TAutomask("f90600d.msk"), _provv(true), _tipodoc('A')
{
field(B_IESCL).disable();
field(B_IALLESCL).disable();
}
////////////////////////////////////////////////////////
// TArchiviazioneIntegrazioni
////////////////////////////////////////////////////////
const char* TArchiviazioneIntegrazioni::traduci_stato(const TString& cod)
{
static TString stato;
static TString last_cod;
if (last_cod != cod)
{
last_cod = cod;
stato.cut(0);
if (cod == "01")
stato << "in diagnostica";
else if (cod == "02")
stato << "errore diagnostica gestionale";
else if (cod == "03")
stato << "diagnostica gestionale passata";
else if (cod == "04")
stato << "controllo WebApp";
else if (cod == "05")
stato << "errore diagnostica WebApp";
else if (cod == "06")
stato << "diagnostica WebApp passata";
else if (cod == "07")
stato << "in elaborazione da sostitutiva";
else if (cod == "08")
stato << "errore diagnostica da sostitutiva";
else if (cod == "09")
stato << "Archiviato";
}
return (const char*)stato;
}
void TArchiviazioneIntegrazioni::main_loop()
{
_msk = new TArchInt_mask;
_estr_msk = new Tf9IntEstrai_mask;
//m.set(1, true);
while (_msk->run() != K_QUIT) {}
}
bool TArchiviazioneIntegrazioni::create()
{
open_files(LF_TAB, LF_TABCOM, LF_TABMOD, LF_ANAG,
LF_CLIFO, LF_CFVEN, LF_CFBAN, LF_NDITTE,
LF_DOC, LF_RIGHEDOC, LF_CODCORR, LF_ANAMAG, 0);
const TRectype cfven(LF_CFVEN);
if (cfven.length(CFV_PADESTIN) != 7) // Nuova lunghezza per privati
return error_box(TR("Database non convertito per fatturazione F.P."));
//nel caso checkare qui le tabelle dell f9
return TSkeleton_application::create();
}
bool TArchiviazioneIntegrazioni::destroy()
{
return TSkeleton_application::destroy();
}
int f90600(int argc, char* argv[])
{
TArchiviazioneIntegrazioni archInt;
archInt.run(argc, argv, TR("Archiviazione Integrazioni"));
return 0;
}