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:
mtollari 2017-07-13 12:27:06 +00:00
parent ccaf3f2549
commit 4a8623e5d2
5 changed files with 215 additions and 123 deletions

View File

@ -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();
}

View File

@ -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

View File

@ -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();

View File

@ -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();
}

View File

@ -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();
}