Patch level : 12.0 420
Files correlati : Commento : Maschera: - Tolti attributi ghost ai campi clifoDoc - Aggiunto bottone invio per programma Java Programma: - Sistemata getCli - aggiunta xvt_fsys_fupdate() per copiare ssa nella cartella di ModuliSirio - definita macro IF_IS_ENABLED - Ottimizzate funzioni con reference - Aggiunta TTrFa_app::copySSA() - Reso funzionante la funzione di marcatura dei record esportati git-svn-id: svn://10.65.10.50/branches/R_10_00@23940 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ccaf3f2549
commit
4a8623e5d2
@ -96,24 +96,22 @@ TRectype getTrasFatt(TString reg, TString codiva)
|
||||
return cache().get(LF_TRASFATT, key);
|
||||
}
|
||||
|
||||
TRectype getCli(TString tipocf, TString codcf)
|
||||
TRectype getCli(const TString& tipocf, const TString& codcf, const TString& ocfpi)
|
||||
{
|
||||
if(tipocf != "O")
|
||||
{
|
||||
TString key = tipocf; key << "|" << codcf;
|
||||
return cache().get(LF_CLIFO, key);
|
||||
}
|
||||
// Cliente occasionale!
|
||||
else
|
||||
TString key = tipocf; key << "|" << codcf;
|
||||
const TRectype& cli = cache().get(LF_CLIFO, key);
|
||||
if(cli.get_bool("OCCAS"))
|
||||
{
|
||||
TRectype cli(LF_CLIFO);
|
||||
TRectype occas = cache().get(LF_OCCAS, codcf);
|
||||
TRectype occas = cache().get(LF_OCCAS, ocfpi);
|
||||
cli.put("RAGSOC" , occas.get("RAGSOC"));
|
||||
cli.put("CODRFSO" , "");
|
||||
cli.put("PAIV" , occas.get("PAIV"));
|
||||
cli.put("COFI" , occas.get("COFI"));
|
||||
return cli;
|
||||
}
|
||||
else
|
||||
return cli;
|
||||
}
|
||||
|
||||
// Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h)
|
||||
@ -129,6 +127,26 @@ static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str)
|
||||
return e;
|
||||
}
|
||||
|
||||
// Aggiorna il file dst se più vecchio di src (Potrebbe diventare una funzione di XVT.h)
|
||||
bool xvt_fsys_fupdate(const char* src, const char* dst)
|
||||
{
|
||||
bool ok = false;
|
||||
if (xvt_fsys_file_exists(src))
|
||||
{
|
||||
const long tsrc = xvt_fsys_file_attr(src, XVT_FILE_ATTR_MTIME);
|
||||
if (tsrc > 0)
|
||||
{
|
||||
long tdst = 0;
|
||||
if (xvt_fsys_file_exists(dst))
|
||||
tdst = xvt_fsys_file_attr(dst, XVT_FILE_ATTR_MTIME);
|
||||
if (tsrc > tdst)
|
||||
ok = xvt_fsys_fcopy(src, dst) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
// Controlla se l'azienda ha un RFSO
|
||||
bool haveRFSO(TString& codrfso)
|
||||
{
|
||||
@ -627,7 +645,8 @@ bool TTrFa_app::create()
|
||||
{
|
||||
createDB();
|
||||
}
|
||||
return TSkeleton_application::create();
|
||||
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
// Sincronizzo il DB SQL con quello di campo
|
||||
@ -674,6 +693,36 @@ bool TTrFa_app::createDB()
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TTrFa_app::copySSA()
|
||||
{
|
||||
TFilename tmp;
|
||||
|
||||
// Copia eventuali protezioni software
|
||||
TString_array files;
|
||||
if (list_files(SPESOMETROBASE "/*.ssa", files) == 0)
|
||||
{
|
||||
list_files("*.ssa", files);
|
||||
FOR_EACH_ARRAY_ROW(files, i, row)
|
||||
{
|
||||
tmp = SPESOMETROBASE; tmp.add(*row);
|
||||
xvt_fsys_fupdate(*row, tmp);
|
||||
}
|
||||
}
|
||||
files.destroy();
|
||||
if (list_files(SPESOMETROBASE "/*.ssa", files) != 1)
|
||||
{
|
||||
warning_box(FR("Nella cartella %s deve essere presente esattamente un file .ssa"), SPESOMETROBASE);
|
||||
return false;
|
||||
}
|
||||
|
||||
TFilename home;
|
||||
xvt_sys_get_env("USERPROFILE", home.get_buffer(), home.size());
|
||||
home.add("SoftwareSirio"); home.add(SPESOMETROBASE);
|
||||
if (!dexist(home))
|
||||
make_dir(home);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TTrFa_app::send(TTrFa_mask* msk)
|
||||
{
|
||||
// Controllo se è la prima esecuzione, in caso positivo chiedo se vuole controllare p.iva e cf
|
||||
@ -719,7 +768,14 @@ bool TTrFa_app::send(TTrFa_mask* msk)
|
||||
message_box("Ho esportato correttamente!");
|
||||
// Imposto l'esportazione
|
||||
if(yesno_box("Vuoi segnare i record esportati?"))
|
||||
setEsportato(sheet);
|
||||
{
|
||||
if(setEsportato(sheet))
|
||||
message_box("Record segnati correttamente!");
|
||||
else
|
||||
message_box("Ci sono stati degli errori durante la riscrittura dei records");
|
||||
msk->setFilterChanged();
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
message_box("Errore durante il salvataggio delle modifiche");
|
||||
@ -794,6 +850,7 @@ bool TTrFa_app::tff0100(TSheet_field& sheet)
|
||||
bool cli = false, fo = false;
|
||||
FOR_EACH_SHEET_ROW(sheet, r, strarr)
|
||||
{
|
||||
IF_IS_ENABLED(strarr);
|
||||
if(strarr->get_char(_tipocf) == 'C')
|
||||
cli = true;
|
||||
else
|
||||
@ -802,9 +859,10 @@ bool TTrFa_app::tff0100(TSheet_field& sheet)
|
||||
}
|
||||
// Metto qua il numero di telefono per dopo
|
||||
TString80 tel; tel << firm.get("PTEL") << firm.get("TEL");
|
||||
bool ok = true;
|
||||
bool ok = false;
|
||||
if(cli)
|
||||
{
|
||||
ok = true;
|
||||
TTrFa_record dte("TFF0100F");
|
||||
|
||||
// Controllo la presenza di un caricamento in attesa
|
||||
@ -841,6 +899,7 @@ bool TTrFa_app::tff0100(TSheet_field& sheet)
|
||||
}
|
||||
if(fo)
|
||||
{
|
||||
ok = true;
|
||||
TTrFa_record dtr("TFF0100F");
|
||||
|
||||
// Controllo la presenza di un caricamento in attesa
|
||||
@ -985,7 +1044,8 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
|
||||
{
|
||||
if(!p.add_status())
|
||||
return false;
|
||||
if(strcmp(strarr->get(_invio), "X") != 0) continue; // Non mi interessa se non è selezionata
|
||||
|
||||
IF_IS_ENABLED(strarr);
|
||||
|
||||
// Controllo il clifo, se non c'è lo aggiungo altrimenti salto sto giro
|
||||
TString checkClifo; checkClifo << strarr->get_char(_tipocf) << strarr->get_long(_codcf);
|
||||
@ -994,14 +1054,8 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
|
||||
else
|
||||
continue;
|
||||
|
||||
TAnagrafica cedeprest(LF_CLIFO, strarr->get_char(_tipocf), strarr->get_long(_codcf));
|
||||
TString keyCedPrest; keyCedPrest << strarr->get_char(_tipocf) << "|" << strarr->get_long(_codcf);
|
||||
|
||||
TRectype r_cedeprest = cache().get(LF_CLIFO, keyCedPrest);
|
||||
TString statocli = cache().get("%STA", r_cedeprest.get("STATOCF"), "S10");
|
||||
// Se rimane vuoto è italiano
|
||||
if(statocli == "")
|
||||
statocli = "IT";
|
||||
TRectype r_cedeprest = getCli(strarr->get(_tipocf), strarr->get(_codcf), strarr->get(_occas));
|
||||
TAnagrafica cedeprest(r_cedeprest);
|
||||
|
||||
TTrFa_record tff0400f("TFF0400F");
|
||||
tff0400f.set("P4_KEYPRGINVIO", getKey(strarr));
|
||||
@ -1016,28 +1070,26 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
|
||||
}
|
||||
else // Fattura normale
|
||||
{
|
||||
// Per le bolle doganali metto OO e 11 "9" in id paese e id fiscale iva
|
||||
if(strcmp(strarr->get(_codnum),"BD") == 0)
|
||||
if (cedeprest.stato_partita_IVA().full() && cedeprest.partita_IVA().full())
|
||||
{
|
||||
tff0400f.set("P4_FISCIVAPAESE", "OO");
|
||||
tff0400f.set("P4_FISCIVACOD", "99999999999");
|
||||
tff0400f.set("P4_FISCIVAPAESE", cedeprest.stato_partita_IVA());
|
||||
tff0400f.set("P4_FISCIVACOD", cedeprest.partita_IVA());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cedeprest.stato_partita_IVA().full() && cedeprest.partita_IVA().full())
|
||||
// Se non ho nemmeno un dato e sto processando una bolla doganale metto OO e 11 "9" in id paese e id fiscale iva
|
||||
if(cedeprest.codice_fiscale().empty() && strcmp(strarr->get(_codnum),"BD") == 0)
|
||||
{
|
||||
tff0400f.set("P4_FISCIVAPAESE", cedeprest.stato_partita_IVA());
|
||||
tff0400f.set("P4_FISCIVACOD", cedeprest.partita_IVA());
|
||||
tff0400f.set("P4_FISCIVAPAESE", "OO");
|
||||
tff0400f.set("P4_FISCIVACOD", "99999999999");
|
||||
}
|
||||
else
|
||||
{
|
||||
tff0400f.set("P4_CODFISC", cedeprest.codice_fiscale());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sono sicuro che se è di tipo 3,7 o 8 ha la ragione sociale
|
||||
char tipo = r_cedeprest.get_char(CLI_ALLEG);
|
||||
char tipo = r_cedeprest.exist(CLI_ALLEG) ? r_cedeprest.get_char(CLI_ALLEG) : '\0';
|
||||
bool rsoc = cedeprest.giuridica() || (tipo == '3' || tipo == '7' || tipo == '8');
|
||||
bool privato = tipo == '6';
|
||||
|
||||
@ -1146,8 +1198,9 @@ bool TTrFa_app::tff0700(TSheet_field& sheet)
|
||||
{
|
||||
if(!p.add_status())
|
||||
return false;
|
||||
if(strcmp(strarr->get(_invio), "X") != 0) continue; // Non mi interessa se non è selezionata
|
||||
|
||||
|
||||
IF_IS_ENABLED(strarr);
|
||||
|
||||
TString checkFatt; checkFatt << strarr->get_char(_tipocf) << "|" << strarr->get_long(_codcf) << "|" << strarr->get(_numdoc);
|
||||
if(fattSent.get_pos(checkFatt) < 0)
|
||||
{
|
||||
@ -1273,8 +1326,11 @@ bool TTrFa_app::setEsportato(TSheet_field& sheet)
|
||||
{
|
||||
if(!p.add_status())
|
||||
return false;
|
||||
if(strcmp(strarr->get(_invio), "X") != 0) continue; // Non mi interessa se non è selezionata
|
||||
if(strcmp(strarr->get(_forzata), "X") == 0)
|
||||
|
||||
IF_IS_ENABLED(strarr);
|
||||
|
||||
TString modificato = strarr->get(_forzata);
|
||||
if(modificato == "X")
|
||||
{
|
||||
ok = saveRec(*strarr, true);
|
||||
if(!ok) return false;
|
||||
@ -1282,7 +1338,7 @@ bool TTrFa_app::setEsportato(TSheet_field& sheet)
|
||||
else
|
||||
{
|
||||
TRectype row = cache().get(LF_MOV, TString(strarr->get(_numero)));
|
||||
row.put("TFINVIO", "X");
|
||||
row.put("TFINVIO", "I");
|
||||
row.put("TFDATA", TDate(TODAY).string());
|
||||
ok = row.rewrite(TLocalisamfile(LF_MOV)) == NOERR;
|
||||
if(!ok) return false;
|
||||
@ -1306,20 +1362,20 @@ bool TTrFa_app::emptyTables(TString key)
|
||||
|
||||
void TTrFa_app::main_loop()
|
||||
{
|
||||
// Sposto SSA
|
||||
if(!copySSA()) return;
|
||||
|
||||
TTrFa_mask msk("tf0100a");
|
||||
|
||||
while (msk.run() == K_ENTER)
|
||||
{
|
||||
if(msk.checkNotEmpty())
|
||||
send(&msk);
|
||||
if(msk.checkNotEmpty() && send(&msk))
|
||||
ini_set_string(CONFIG_DITTA, "tf", "LastSend", ++TDate(msk.get(F_DATAFIN)));
|
||||
}
|
||||
}
|
||||
|
||||
bool TTrFa_app::destroy()
|
||||
{
|
||||
if (_cofi.full())
|
||||
ini_set_string(CONFIG_DITTA, "pa", "TRASMITTCOD", _cofi);
|
||||
|
||||
xvt_sql_close(_db); _db = NULL;
|
||||
return TSkeleton_application::destroy();
|
||||
}
|
||||
|
@ -31,6 +31,12 @@ BEGIN
|
||||
PICTURE TOOL_ELABORA
|
||||
END
|
||||
|
||||
BUTTON DLG_EMAIL 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "Crea XML"
|
||||
PICTURE TOOL_EMAIL
|
||||
END
|
||||
|
||||
#include <helpbar.h>
|
||||
ENDPAGE
|
||||
|
||||
@ -250,7 +256,6 @@ BEGIN
|
||||
OUTPUT A_COFI COFI
|
||||
ADD RUN cg0 -1
|
||||
FIELD CODCF
|
||||
FLAGS "G"
|
||||
END
|
||||
|
||||
STRING A_OCFPI 16
|
||||
@ -270,7 +275,6 @@ BEGIN
|
||||
GROUP 3
|
||||
ADD RUN cg0 -6
|
||||
FIELD OCFPI
|
||||
FLAGS "G"
|
||||
END
|
||||
|
||||
STRING A_RAGSOC 50 47
|
||||
|
@ -53,6 +53,7 @@ enum filter_fatt
|
||||
#define FLAG_ERRORE "E"
|
||||
#define FLAG_NINVIO "N"
|
||||
#define FLAG_FORZATO "F"
|
||||
#define SPESOMETROBASE "ModuliSirio\\Spesometro"
|
||||
|
||||
/* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza)
|
||||
* per avere l'inserimento nello sheet corretto */
|
||||
@ -93,9 +94,11 @@ int getTipoDoc(TString id);
|
||||
// Ritorna il record custom
|
||||
TRectype getTrasFatt(TString reg, TString codiva);
|
||||
// Ritorna il cliente in un record di $clifo, con tipocf = "O" lo cerca in $occas
|
||||
TRectype getCli(TString tipocf, TString codcf);
|
||||
TRectype getCli(const TString& tipocf, const TString& codcf, const TString& ocfpi);
|
||||
// Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h)
|
||||
static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str);
|
||||
// Aggiorna il file dst se più vecchio di src (Potrebbe diventare una funzione di XVT.h)
|
||||
bool xvt_fsys_fupdate(const char* src, const char* dst);
|
||||
// Controlla se l'azienda ha un RFSO
|
||||
bool haveRFSO(TString& codrfso);
|
||||
// Decodifica il tipo di documento per il trasferimento fatture
|
||||
@ -104,6 +107,8 @@ const char * decodTipo(TToken_string* strarr);
|
||||
bool saveRec(TToken_string row, bool esportato = false);
|
||||
// Ritorno una data in formato ANSI
|
||||
inline TDate toDate(const char * date) { return TDate(date).string(); }
|
||||
// Salto se la riga non è abilitata
|
||||
#define IF_IS_ENABLED(strarr) if(strcmp(strarr->get(_invio), FLAG_INVIO) != 0 && strcmp(strarr->get(_invio), FLAG_FORZATO) != 0) continue;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// TTrFa_record
|
||||
@ -161,8 +166,8 @@ class TTrFa_cursors : TObject
|
||||
// Se trovo un record custom devo saltare tutti quelli che trovo successivamente, per fare ciò utilizzo una TToken_string
|
||||
TToken_string _alqCust;
|
||||
|
||||
TRectype _next(return_code& code, TString& tipocf, TString& codcf); // Si sposta avanti di un elemento
|
||||
TRectype _nextCust(return_code& code, TString& tipocf, TString& codcf); // Si sposta avanti di un elemento tra quelli custom
|
||||
TRectype _next(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento
|
||||
TRectype _nextCust(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento tra quelli custom
|
||||
bool checkRecord(TISAM_recordset* rec);
|
||||
public:
|
||||
//TTrFa_cursors();
|
||||
@ -170,7 +175,7 @@ public:
|
||||
long int getIvaItems() { return c_rmoviva->items(); }
|
||||
long int getIvaPos() { return c_rmoviva->cursor()->pos(); }
|
||||
TRectype getIva() { return c_rmoviva->cursor()->curr(); }
|
||||
int next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TString& codcf); // Legge tutto il prossimo movimento, in importi mette per ogni codiva la somma
|
||||
int next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TString& codcf, TString& ocfpi); // Legge tutto il prossimo movimento, in importi mette per ogni codiva la somma
|
||||
|
||||
int updateFilters(const char tipocf, const long codcf, TDate dal, TDate al, int cod = toSend);
|
||||
};
|
||||
@ -197,6 +202,7 @@ protected:
|
||||
TRecnotype nuovo_progr() const;
|
||||
void changeInvio(TString tipocf, TString codcf, TString numdoc, TString invio) const;
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
void openJava();
|
||||
|
||||
public:
|
||||
void setFilterChanged() { _filter_changed = true; }
|
||||
@ -212,7 +218,7 @@ public:
|
||||
// Controllo tutti i records
|
||||
bool checkAll();
|
||||
// Testo validità record
|
||||
bool checkRec(TPrinter* stampa, TToken_string rec);
|
||||
bool checkRec(TPrinter* stampa, TToken_string& rec);
|
||||
// Controllo che siano presenti records
|
||||
bool checkNotEmpty();
|
||||
// Controllo finale prima di inviare il tutto, se ci sono fatture
|
||||
@ -268,6 +274,7 @@ protected:
|
||||
bool show_log();
|
||||
bool syncronizeDB();
|
||||
bool createDB();
|
||||
bool copySSA();
|
||||
|
||||
public:
|
||||
virtual bool create();
|
||||
|
@ -166,27 +166,27 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case A_TIPOCF:
|
||||
case A_CODCF:
|
||||
case A_OCFPI:
|
||||
{
|
||||
if(e != fe_modify) break;
|
||||
TString tipocf, codcf;
|
||||
// Controllo se è un cliente occasionale
|
||||
tipocf = "O";
|
||||
codcf = o.mask().get(A_OCFPI);
|
||||
if(codcf.empty())
|
||||
{
|
||||
tipocf = o.mask().get(A_TIPOCF);
|
||||
codcf = o.mask().get(A_CODCF);
|
||||
}
|
||||
TRectype app = getCli(tipocf, codcf);
|
||||
// Leggo dal clifo
|
||||
TString tipocf, codcf, ocfpi;
|
||||
tipocf = o.mask().get(A_TIPOCF);
|
||||
codcf = o.mask().get(A_CODCF);
|
||||
ocfpi = o.mask().get(A_OCFPI);
|
||||
TRectype app = getCli(tipocf, codcf, ocfpi);
|
||||
o.mask().set(A_RAGSOC, app.get("RAGSOC"));
|
||||
o.mask().set(A_RFSO, app.get("CODRFSO"));
|
||||
o.mask().set(A_RAGSOCRFSO, getRFSO(app.get("CODRFSO")));
|
||||
o.mask().set(A_PAIV, app.get("PAIV"));
|
||||
o.mask().set(A_COFI, app.get("COFI"));
|
||||
|
||||
// Abilito se il cliente è occasionale
|
||||
o.mask().enable(A_OCFPI, app.get_bool("OCCAS"));
|
||||
|
||||
// Controllo autofattura
|
||||
TString key; key << prefix().firm().get("TIPOA") << "|" << prefix().firm().get("CODANAGR");
|
||||
TString piva = cache().get(LF_ANAG, key, "PAIV");
|
||||
@ -196,6 +196,7 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
o.mask().set(A_AUTOFATT, "X");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DLG_SAVEREC:
|
||||
if(e == fe_button)
|
||||
saveAll();
|
||||
@ -257,14 +258,26 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
return error_box(FR("Errore di cancellazione: %d"), err);
|
||||
}
|
||||
// In qualsiasi caso elimino sta riga
|
||||
TSheet_field& s = o.mask().sfield(F_RIGHE);
|
||||
TToken_string& row = s.row(jolly);
|
||||
row.destroy(jolly);
|
||||
TSheet_field& sheet = sfield(F_RIGHE);
|
||||
// Vado a cercare la riga
|
||||
FOR_EACH_SHEET_ROW(sheet, r, strarr)
|
||||
{
|
||||
long thisProg;
|
||||
TString thisAlq;
|
||||
strarr->get(_numero, thisProg);
|
||||
strarr->get(_aliquota, thisAlq);
|
||||
if(thisProg == progr && thisAlq == codalq) break;
|
||||
}
|
||||
sheet.destroy(r); // Aggiorna in automatico
|
||||
}
|
||||
else
|
||||
return error_box(TR("Riga non cancellabile"));
|
||||
}
|
||||
break;
|
||||
case DLG_EMAIL:
|
||||
if(e == fe_button)
|
||||
openJava();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -295,6 +308,27 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
return true;
|
||||
}
|
||||
|
||||
void TTrFa_mask::openJava()
|
||||
{
|
||||
TFilename tmp;
|
||||
tmp = SPESOMETROBASE "\\ModuliSirio.jar";
|
||||
tmp.make_absolute_path();
|
||||
|
||||
DIRECTORY old_dir; xvt_fsys_get_dir(&old_dir);
|
||||
DIRECTORY new_dir; xvt_fsys_convert_str_to_dir(tmp.path(), &new_dir);
|
||||
xvt_fsys_set_dir(&new_dir);
|
||||
const bool good = goto_url(tmp);
|
||||
if (good)
|
||||
{
|
||||
xvt_sys_sleep(3000);
|
||||
}
|
||||
else
|
||||
{
|
||||
error_box(FR("Impossibile eseguire Java -jar %s"), (const char*)tmp);
|
||||
}
|
||||
xvt_fsys_set_dir(&old_dir);
|
||||
}
|
||||
|
||||
void TTrFa_mask::loadConfig()
|
||||
{
|
||||
// Rilevo i tipi scelti
|
||||
@ -326,6 +360,7 @@ bool TTrFa_mask::saveAll()
|
||||
TSheet_field& sheet = sfield(F_RIGHE);
|
||||
//TString_array& strarr = sheet.rows_array();
|
||||
TString mod = "";
|
||||
TLocalisamfile mov(LF_MOV);
|
||||
FOR_EACH_SHEET_ROW(sheet, r, strarr)
|
||||
{
|
||||
strarr->get(_forzata, mod);
|
||||
@ -345,6 +380,12 @@ bool TTrFa_mask::saveAll()
|
||||
if(!ok)
|
||||
return false;
|
||||
}
|
||||
// Salvo il valore di invio se è stato modificato
|
||||
else if(strcmp(strarr->get(_invio), "X") != 0)
|
||||
{
|
||||
TRectype rmov = cache().get(LF_MOV, strarr->get(_numero));
|
||||
mov.rewrite(rmov);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -401,7 +442,7 @@ inline void printError(TPrinter* stampa, TString movimento, TString documento, T
|
||||
stampa->print(riga);
|
||||
}
|
||||
|
||||
bool TTrFa_mask::checkRec(TPrinter* stampa, TToken_string rec)
|
||||
bool TTrFa_mask::checkRec(TPrinter* stampa, TToken_string& rec)
|
||||
{
|
||||
bool ok = true;
|
||||
TString numMov = rec.get(_numero), numDoc = rec.get(_numdoc);
|
||||
@ -438,17 +479,8 @@ bool TTrFa_mask::checkRec(TPrinter* stampa, TToken_string rec)
|
||||
coderr << "3;";
|
||||
}
|
||||
|
||||
// Controllo Stato ***********************************************************************************
|
||||
/*
|
||||
TRectype clifo = getCli(rec.get(_tipocf), rec.get(_codcf));
|
||||
if(clifo.get("STATOCF") == "" &&
|
||||
*/
|
||||
// Flaggo il record con i messaggi di errore
|
||||
if(!ok)
|
||||
{
|
||||
rec.add("E", _invio);
|
||||
rec.add(coderr, _coderr);
|
||||
}
|
||||
rec.add(coderr, _coderr); // Sempre potrebbero esserci errori non bloccanti
|
||||
|
||||
return ok;
|
||||
}
|
||||
@ -499,6 +531,8 @@ void TTrFa_mask::theFinalCheckDown()
|
||||
cliDocs.add(key, newNumero);
|
||||
}
|
||||
}
|
||||
// Forzo l'aggiornamento dello sheet
|
||||
sfield(F_RIGHE).force_update();
|
||||
}
|
||||
|
||||
void TTrFa_mask::flagRow(int nrow, TString flag)
|
||||
@ -549,7 +583,6 @@ void TTrFa_mask::load_sheet()
|
||||
TTrFa_cursors c;
|
||||
|
||||
TSheet_field& sheet = sfield(F_RIGHE);
|
||||
TString_array& strarr = sheet.rows_array();
|
||||
|
||||
sheet.hide(); // Nascondo lo sheet per guadagnare un 20% di velocità di caricamento, le ottimizzazioni da PRO!
|
||||
if(!sheet.empty())
|
||||
@ -558,14 +591,14 @@ void TTrFa_mask::load_sheet()
|
||||
int items = c.updateFilters(tipo, codice, dal, al, get_int(F_FATTSEL));
|
||||
for(bool ok = true; items > 0 && ok;)
|
||||
{
|
||||
TString tipocf, codcf;
|
||||
int err = c.next(recimposte, ok, tipocf, codcf);
|
||||
TString tipocf, codcf, ocfpi;
|
||||
int err = c.next(recimposte, ok, tipocf, codcf, ocfpi);
|
||||
// Carico i clienti
|
||||
TRectype cli = getCli(tipocf, codcf);
|
||||
TRectype cli = getCli(tipocf, codcf, ocfpi);
|
||||
|
||||
FOR_EACH_ASSOC_OBJECT(recimposte, h, iva, rec)
|
||||
{
|
||||
TToken_string* row = new TToken_string;
|
||||
TToken_string& row = sheet.row(-1);
|
||||
TRectype movimento = *(TRectype*)rec;
|
||||
|
||||
// Controllo che sia un tipo documento da leggere
|
||||
@ -575,27 +608,27 @@ void TTrFa_mask::load_sheet()
|
||||
* basta settare i valori negli enum e lo sheet
|
||||
*/
|
||||
TRectype isCust = getTrasFatt(movimento.get("NUMREG"), iva);
|
||||
|
||||
row->add(isCust.get_bool("TFINVIO") ? "X" : "", _spedita); // Spedita
|
||||
row->add("X"); // Da spedire, sempre!
|
||||
row->add(isCust.full() ? "X" : "", _forzata); // Modificato
|
||||
row->add(movimento.get_long("NUMREG"), _numero); // Numero registrazione
|
||||
row->add(movimento.get_date("DATAREG"), _datareg); // Data Registrazione
|
||||
row->add(movimento.get("TIPO"), _tipocf); // Tipo Cli/For
|
||||
row->add(movimento.get("CODCF"), _codcf); // Codice Cli/For
|
||||
row->add(movimento.get("OCCAS"), _occas); // Codice Occasionale
|
||||
row->add(cli.get("RAGSOC"), _ragsoc); // Ragione sociale
|
||||
row->add(cli.get("CODRFSO"), _rfso); // Codice RF/SO
|
||||
row->add(getRFSO(cli.get("CODRFSO")), _ragsocrfso); // Ragione Sociale RF/SO
|
||||
row->add(movimento.get("TIPODOC"), _codnum); // Tipo documento
|
||||
row->add(movimento.get("NUMDOC"), _numdoc); // Numero documento
|
||||
row->add(movimento.get_date("DATADOC"), _datadoc); // Data documento
|
||||
row->add(natura(iva), _natura); // NATURA!
|
||||
row->add(iva, _aliquota); // Codice aliquota!
|
||||
row->add(findDetraib(movimento.get("TIPODET")), _detraibile); // Detraibilità
|
||||
row->add(movimento.get_real("IMPONIBILE"), _imponibile); // Imponibile
|
||||
row->add(movimento.get_real("IMPOSTA"), _importoIVA); // Imposta
|
||||
row->add(revCharge(movimento.get("NUMREG")), _reverse); // Rev.Charge
|
||||
|
||||
row.add(isCust.get("TFINVIO") == "I", _spedita); // Spedita
|
||||
row.add("X"); // Da spedire, sempre!
|
||||
row.add(isCust.full() ? "X" : "", _forzata); // Modificato
|
||||
row.add(movimento.get_long("NUMREG"), _numero); // Numero registrazione
|
||||
row.add(movimento.get_date("DATAREG"), _datareg); // Data Registrazione
|
||||
row.add(movimento.get("TIPO"), _tipocf); // Tipo Cli/For
|
||||
row.add(movimento.get("CODCF"), _codcf); // Codice Cli/For
|
||||
row.add(movimento.get("OCCAS"), _occas); // Codice Occasionale
|
||||
row.add(cli.get("RAGSOC"), _ragsoc); // Ragione sociale
|
||||
row.add(cli.get("CODRFSO"), _rfso); // Codice RF/SO
|
||||
row.add(getRFSO(cli.get("CODRFSO")), _ragsocrfso); // Ragione Sociale RF/SO
|
||||
row.add(movimento.get("TIPODOC"), _codnum); // Tipo documento
|
||||
row.add(movimento.get("NUMDOC"), _numdoc); // Numero documento
|
||||
row.add(movimento.get_date("DATADOC"), _datadoc); // Data documento
|
||||
row.add(natura(iva), _natura); // NATURA!
|
||||
row.add(iva, _aliquota); // Codice aliquota!
|
||||
row.add(findDetraib(movimento.get("TIPODET")), _detraibile); // Detraibilità
|
||||
row.add(movimento.get_real("IMPONIBILE"), _imponibile); // Imponibile
|
||||
row.add(movimento.get_real("IMPOSTA"), _importoIVA); // Imposta
|
||||
row.add(revCharge(movimento.get("NUMREG")), _reverse); // Rev.Charge
|
||||
|
||||
/*
|
||||
* Possono esistere movimenti custom dove il cliente ha una partita IVA propria
|
||||
@ -604,18 +637,17 @@ void TTrFa_mask::load_sheet()
|
||||
*/
|
||||
if(movimento.get("AUTOFATT") == "X" || pivaDitta == cli.get("PAIV")) // Se è un autofattura
|
||||
{
|
||||
row->add("X", _autofatt); // AutoFatt
|
||||
row->add(pivaDitta, _paiv); // P.IVA
|
||||
row->add(cofiDitta, _codfis); // Codice Fiscale
|
||||
row.add("X", _autofatt); // AutoFatt
|
||||
row.add(pivaDitta, _paiv); // P.IVA
|
||||
row.add(cofiDitta, _codfis); // Codice Fiscale
|
||||
}
|
||||
else
|
||||
{
|
||||
row->add("", _autofatt); // AutoFatt
|
||||
row->add(cli.get("PAIV"), _paiv); // P.IVA
|
||||
row->add(cli.get("COFI"), _codfis); // Codice Fiscale
|
||||
row.add("", _autofatt); // AutoFatt
|
||||
row.add(cli.get("PAIV"), _paiv); // P.IVA
|
||||
row.add(cli.get("COFI"), _codfis); // Codice Fiscale
|
||||
}
|
||||
|
||||
strarr.add(row);
|
||||
sheet.enable_cell(sheet.items()-1, _occas, movimento.get("OCCAS").full());
|
||||
}
|
||||
recimposte.destroy();
|
||||
}
|
||||
|
@ -13,17 +13,17 @@ TTrFa_cursors::~TTrFa_cursors()
|
||||
delete c_trasfatt;
|
||||
}
|
||||
|
||||
int TTrFa_cursors::next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TString& codcf)
|
||||
int TTrFa_cursors::next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TString& codcf, TString& ocfpi)
|
||||
{
|
||||
// Azzero recimposte
|
||||
recimposte.destroy();
|
||||
// Return code
|
||||
return_code err;
|
||||
// Record
|
||||
TRectype record = _next(err, tipocf, codcf);
|
||||
TRectype record = _next(err, tipocf, codcf, ocfpi);
|
||||
if(err == eof)
|
||||
{
|
||||
record = _nextCust(err, tipocf, codcf);
|
||||
record = _nextCust(err, tipocf, codcf, ocfpi);
|
||||
}
|
||||
while(err < nextmov)
|
||||
{
|
||||
@ -44,7 +44,7 @@ int TTrFa_cursors::next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TSt
|
||||
recimposte.add(record.get("CODIVA"), record);
|
||||
}
|
||||
if(err == foundidcust) break;
|
||||
record = _next(err, tipocf, codcf);
|
||||
record = _next(err, tipocf, codcf, ocfpi);
|
||||
}
|
||||
ok = err != eofcust;
|
||||
return err;
|
||||
@ -53,7 +53,7 @@ int TTrFa_cursors::next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TSt
|
||||
/*
|
||||
* Questa funzione precarica un array associativo con il movimento diviso per codiva e lo ritorna
|
||||
*/
|
||||
TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf)
|
||||
TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi)
|
||||
{
|
||||
TString numMov = c_rmoviva->get("23.NUMREG").as_string();
|
||||
// Record di ritorno
|
||||
@ -62,17 +62,9 @@ TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf
|
||||
if(_newMov)
|
||||
{
|
||||
_newMov = false;
|
||||
// Se è un cliente occasionale passo "O"
|
||||
if(c_rmoviva->get("23.OCFPI").as_string() != "")
|
||||
{
|
||||
tipocf = "O";
|
||||
codcf = c_rmoviva->get("23.OCFPI").as_string();
|
||||
}
|
||||
else
|
||||
{
|
||||
tipocf = c_rmoviva->get("23.TIPO").as_string();
|
||||
codcf = c_rmoviva->get("23.CODCF").as_string();
|
||||
}
|
||||
tipocf = c_rmoviva->get("23.TIPO").as_string();
|
||||
codcf = c_rmoviva->get("23.CODCF").as_string();
|
||||
ocfpi = c_rmoviva->get("23.OCFPI").as_string();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -131,7 +123,7 @@ TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf
|
||||
return retRec;
|
||||
}
|
||||
|
||||
TRectype TTrFa_cursors::_nextCust(return_code& code, TString& tipocf, TString& codcf)
|
||||
TRectype TTrFa_cursors::_nextCust(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi)
|
||||
{
|
||||
bool ok;
|
||||
// Preparo il nuovo cursore
|
||||
@ -146,6 +138,7 @@ TRectype TTrFa_cursors::_nextCust(return_code& code, TString& tipocf, TString& c
|
||||
}
|
||||
tipocf = c_trasfatt->get("TIPO").as_string();
|
||||
codcf = c_trasfatt->get("CODCF").as_string();
|
||||
ocfpi = c_trasfatt->get("OCFPI").as_string();
|
||||
code = ok ? foundidcust : eofcust;
|
||||
return c_trasfatt->cursor()->curr();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user