Patch level : 12.0 420

Files correlati     : tf
Commento            : 
- Sistemato salvataggio record custom
- Aggiunto controllo record a volte escono record con flag errato dalle queries
- Aggiunto controllo tipo documento
- Sistemata procedura controllo errori, adesso riceve il puntatore di strarr
- Modificata esportazione tff0400 se è un estero non CEE al posto del codice_fiscale riempio la partita_IVA con quello che è li presente

git-svn-id: svn://10.65.10.50/branches/R_10_00@23959 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
mtollari 2017-07-18 09:49:17 +00:00
parent c6668aa742
commit 42fac4d92f
4 changed files with 72 additions and 27 deletions

View File

@ -238,14 +238,10 @@ const char* decodTipo(TToken_string* strarr)
bool saveRec(TToken_string row, bool esportato)
{
static TLocalisamfile trasfatt(LF_TRASFATT);
// Devo inserire la riga in trasfatt
TRectype rCust(LF_TRASFATT);
if(strcmp(row.get(_spedita), "X") == 0) // Controllo che non sia già stata spedita prima
{
TString key = row.get(_numero); key << "|"<< row.get(_aliquota);
rCust = cache().get(LF_TRASFATT, key);
}
// Controllo non si sa mai
TString key = row.get(_numero); key << "|"<< row.get(_aliquota);
TRectype rCust = cache().get(LF_TRASFATT, key);
// Se la riga non esiste metto la chiave
if(rCust.empty())
{
rCust.put("NUMREG", row.get(_numero));
@ -263,7 +259,8 @@ bool saveRec(TToken_string row, bool esportato)
rCust.put("AUTOFATT", row.get(_autofatt));
if(esportato)
{
rCust.put("TFINVIO", true);
TString invio = esportato? "I" : row.get(_invio);
rCust.put("TFINVIO", invio);
rCust.put("TFDATA", TDate(TODAY));
}
@ -956,7 +953,7 @@ bool TTrFa_app::tff0200(TString key)
}
// DatiSede
TString via = _ditta.via_residenza(), cap = _ditta.CAP_residenza(), nazione = _ditta.stato_residenzaISO();
TString via = _ditta.via_residenza(), cap = _ditta.CAP_residenza(), nazione = _ditta.stato_residenza_ISO();
// Valori necessari, se non ci sono salto
if(via.full() && cap.full() && nazione.full())
{
@ -976,7 +973,7 @@ bool TTrFa_app::tff0200(TString key)
if(r_ana.get_char("TIPORFSO") == 'S') // Stabile Organizzazione
{
TAnagrafica rfso(r_ana);
TString via = rfso.via_residenza(), cap = rfso.CAP_residenza(), nazione = rfso.stato_residenzaISO();
TString via = rfso.via_residenza(), cap = rfso.CAP_residenza(), nazione = rfso.stato_residenza_ISO();
tff0200f.set("P2_STABORGIND", via);
tff0200f.set("P2_STABORGNRCIVICO", rfso.civico_residenza());
@ -1007,7 +1004,7 @@ bool TTrFa_app::tff0300(TString key, TRectype r_ana)
TTrFa_record tff0300f("TFF0300F");
tff0300f.set("P3_KEYPRGINVIO", key);
tff0300f.set("P3_FISCIVAPAESE", rfso.stato_residenzaISO());
tff0300f.set("P3_FISCIVAPAESE", rfso.stato_residenza_ISO());
tff0300f.set("P3_FISCIVACODICE", paiv);
if(r_ana.get_char("TIPOA") == 'G')
@ -1097,7 +1094,18 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
tff0400f.set("P4_FISCIVACOD", "99999999999");
}
else
tff0400f.set("P4_CODFISC", cedeprest.codice_fiscale());
{
// Se è un estero non CEE prendo nella partita IVA metto l'identificativo fiscale
if(cedeprest.estero_non_CEE())
{
tff0400f.set("P4_FISCIVAPAESE", cedeprest.stato_partita_IVA());
tff0400f.set("P4_FISCIVACOD", cedeprest.codice_fiscale());
}
else
{
tff0400f.set("P4_CODFISC", cedeprest.codice_fiscale());
}
}
}
}
if(cedeprest.ok()) // Con bolle doganali non a posto impazzisce
@ -1162,9 +1170,9 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
{
tff0400f.set("P4_ANADENOM", cedeprest.ragione_sociale());
}
TString via = cedeprest.via_residenza(), cap = cedeprest.CAP_residenza(), nazione = cedeprest.stato_residenzaISO();
TString via = cedeprest.via_residenza(), cap = cedeprest.CAP_residenza(), nazione = cedeprest.stato_residenza_ISO();
// Valori necessari, se non ci sono salto
if(via.full() && cap.full() && nazione.full())
if(via.full() && (cap.full() || cedeprest.estero()) && nazione.full())
{
tff0400f.set("P4_SEDEIND", via);
tff0400f.set("P4_SEDENRCIVICO", cedeprest.civico_residenza());
@ -1227,6 +1235,8 @@ bool TTrFa_app::tff0700(TSheet_field& sheet)
tff0700f.set("P7_KEYHEADERFATT", getHeader(strarr));
tff0700f.set("P7_KEYBODYFATT", getBody(strarr));
TString natura = strarr->get(_natura);
tff0700f.set("P7_TIPODOC", decodTipo(strarr));
tff0700f.set("P7_DATA", toDate(strarr->get(_datadoc)));
tff0700f.set("P7_NUMERO", strarr->get(_numdoc));
@ -1298,7 +1308,7 @@ bool TTrFa_app::tff3100(TToken_string* strarr, TRectype r_ana)
if(r_ana.get_char("TIPORFSO") == 'S') // Stabile Organizzazione
{
TString via = rfso.via_residenza(), cap = rfso.CAP_residenza(), nazione = rfso.stato_residenzaISO();
TString via = rfso.via_residenza(), cap = rfso.CAP_residenza(), nazione = rfso.stato_residenza_ISO();
tff3100f.set("PH_STABORGIND", via);
tff3100f.set("PH_STABORGNRCIVICO", rfso.civico_residenza());
@ -1315,7 +1325,7 @@ bool TTrFa_app::tff3100(TToken_string* strarr, TRectype r_ana)
TString paiv = rfso.partita_IVA(), ragsoc = rfso.ragione_sociale(), nom = rfso.nome(), cog = rfso.cognome();
tff3100f.set("PH_FISCIVAPAESE", rfso.stato_residenzaISO());
tff3100f.set("PH_FISCIVAPAESE", rfso.stato_residenza_ISO());
tff3100f.set("PH_FISCIVACODICE", paiv);
if(r_ana.get_char("TIPOA") == 'G')

View File

@ -53,6 +53,7 @@ enum filter_fatt
#define FLAG_ERRORE "E"
#define FLAG_NINVIO "N"
#define FLAG_FORZATO "F"
#define FLAG_INVIATO "I"
#define SPESOMETROBASE "ModuliSirio"
/* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza)
@ -218,7 +219,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
@ -226,6 +227,8 @@ public:
void theFinalCheckDown();
// Mette il flag di invio = [flag] per la riga numero [nrow]
void flagRow(int nrow, TString flag);
// Salto se la riga ha un tipo invio non del filtro
bool checkInvio(const TString& invio);
};
// Funzione inline di stampa
inline void printError(TPrinter* stampa, TString movimento, TString documento, TString msgerr);

View File

@ -193,6 +193,14 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
}
}
break;
case A_TIPODOC:
// Controllo che il tipo di documento rientri in quelli del filtro
if(e == fe_modify && !get_bool(getTipoDoc(o.get())))
{
error_box("Attenzione! il tipo di documento scelto non fa parte dei filtri correnti!");
o.set("");
}
break;
case DLG_SAVEREC:
if(e == fe_button)
saveAll();
@ -422,7 +430,7 @@ bool TTrFa_mask::checkAll()
TSheet_field& sheet = sfield(F_RIGHE);
FOR_EACH_SHEET_ROW(sheet, r, strarr)
{
checkRec(&stampa, *strarr);
checkRec(&stampa, strarr);
}
riga.reset();
riga.put(TR("------------------ Fine controllo! ------------------"), 30);
@ -440,14 +448,14 @@ 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);
TString numMov = rec->get(_numero), numDoc = rec->get(_numdoc);
TString msgerr;
TString coderr;
// Controllo date ***********************************************************************************
TDate reg = rec.get(_datareg), doc = rec.get(_datadoc);
TDate reg = rec->get(_datareg), doc = rec->get(_datadoc);
if(reg < doc)
{
ok = false;
@ -457,10 +465,10 @@ bool TTrFa_mask::checkRec(TPrinter* stampa, TToken_string& rec)
}
// Controllo aliquota, imponibile e imposta *********************************************************
TCodiceIVA codiva(rec.get(_aliquota));
TString nat = rec.get(_natura), realNat(natura(rec.get(_aliquota)));
TCodiceIVA codiva(rec->get(_aliquota));
TString nat = rec->get(_natura), realNat(natura(rec->get(_aliquota)));
nat.ltrim(); // Se vuoto arriva con uno spazio
real imponibile = rec.get(_imponibile), imposta = rec.get(_importoIVA);
real imponibile = rec->get(_imponibile), imposta = rec->get(_importoIVA);
if(nat != realNat)
{
msgerr.cut(0) << "Natura del movimento errata, valore dichiarato: " << nat << " valore corretto: " << realNat;
@ -478,7 +486,7 @@ bool TTrFa_mask::checkRec(TPrinter* stampa, TToken_string& rec)
}
// Flaggo il record con i messaggi di errore
rec.add(coderr, _coderr); // Sempre potrebbero esserci errori non bloccanti
rec->add(coderr, _coderr); // Sempre potrebbero esserci errori non bloccanti
return ok;
}
@ -599,6 +607,8 @@ void TTrFa_mask::load_sheet()
TRectype movimento = *(TRectype*)rec;
// Controllo che sia un tipo documento da leggere
if(!get_bool(getTipoDoc(movimento.get("TIPODOC")))) continue;
// A volte mi pesca movimenti con invio sbagliato
if(!checkInvio(movimento.get("TFINVIO"))) continue;
// Creo una nuova riga nello sheet
TToken_string& row = sheet.row(-1);
@ -608,7 +618,7 @@ void TTrFa_mask::load_sheet()
*/
TRectype isCust = getTrasFatt(movimento.get("NUMREG"), iva);
row.add(isCust.get("TFINVIO") == "I", _spedita); // Spedita
row.add(movimento.get("TFINVIO") == "I" ? "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
@ -680,9 +690,30 @@ TString TTrFa_mask::revCharge(TString numreg) const
// Controllo se la causale ha il reverse charge, se il cliente non l'ha impostata giusta sono ARAZZI suoi
TString key = numreg;
TCausale caus(cache().get(LF_MOV, key, "CODCAUS"));
if(caus.reverse_charge())
bool tolla = true;
return caus.reverse_charge() ? "X" : "";
}
bool TTrFa_mask::checkInvio(const TString& invio)
{
bool ok;
switch(get_int(F_FATTSEL))
{
case 0:
ok = invio == "" || invio == FLAG_INVIO || invio == FLAG_FORZATO;
break;
case 1:
ok = invio == FLAG_INVIATO;
break;
case 2:
default:
ok = invio == FLAG_NINVIO;
break;
}
return ok;
}
TString TTrFa_mask::getRFSO(TString codrfso) const
{
TString key; key << codrfso[0] << "|" << codrfso.mid(1);

View File

@ -110,6 +110,7 @@ TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf
retRec.put("NUMDOC", c_rmoviva->get("23.NUMDOC").as_string());
retRec.put("DATAREG", c_rmoviva->get("23.DATAREG").as_date());
retRec.put("DATADOC", c_rmoviva->get("23.DATADOC").as_date());
retRec.put("TFINVIO", c_rmoviva->get("23.TFINVIO").as_string());
retRec.put("IMPONIBILE", c_rmoviva->get("25.IMPONIBILE").as_real());
retRec.put("IMPOSTA", c_rmoviva->get("25.IMPOSTA").as_real());
retRec.put("CODIVA", c_rmoviva->get("25.CODIVA").as_string());