Patch level : 12.0 456

Files correlati     : tf
Commento            : 
- Potenziate le chiavi durante l'esportazione con l'aggiunta del codice cli/fo occasionale
- Portata chiave header da 7 caratteri (tipo + codcf) a 19 (tipo + cod o c/f o occas)
- Creata funzione globale per richiamare la maschera
- Sistemato controllo tipo documento durante il caricamento
- Migliorato controllo cli/fo per i record da filtrare

git-svn-id: svn://10.65.10.50/branches/R_10_00@24109 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
mtollari 2017-09-27 08:32:28 +00:00
parent d9703da385
commit 49c150e489
4 changed files with 49 additions and 18 deletions

View File

@ -291,6 +291,14 @@ bool bd2017()
return today <= lastDay;
}
TTrFa_mask& msk()
{
static TTrFa_mask* msk = NULL;
if (msk == NULL)
msk = new TTrFa_mask("tf0100a");
return *msk;
}
/////////////////////////////////////////////////////////////////////////////////////
// TTrFa_record
/////////////////////////////////////////////////////////////////////////////////////
@ -833,8 +841,8 @@ TString TTrFa_app::getHeader(TToken_string* strarr)
// Cerco/Aggiungo il Clifo all'std::map
static TString keyMap; keyMap.cut(0);
static TString tipocf, codcf;
tipocf.cut(0); codcf.cut(0);
static TString tipocf, codcf, occas;
tipocf.cut(0); codcf.cut(0); occas.cut(0);
// Controlli per bolladog
if(strcmp(strarr->get(_codnum),"BD") == 0)
@ -848,9 +856,10 @@ TString TTrFa_app::getHeader(TToken_string* strarr)
{
tipocf << strarr->get_char(_tipocf);
codcf << strarr->get(_codcf);
occas << strarr->get(_occas);
}
keyMap << tipocf << "|" << codcf;
keyMap << tipocf << "|" << codcf << "|" << occas;
clifoDoc app;
// Non è presente e lo inserisco per la chiave body
@ -861,7 +870,21 @@ TString TTrFa_app::getHeader(TToken_string* strarr)
app.countDoc = 0L;
mCliDoc.insert(std::pair<TString,clifoDoc>(keyMap, app));
}
TString header; header.format("%c%06ld", tipocf[0], atol(codcf));
static TString header;
static TString formatString; formatString.cut(0) << "%c%0";
if(occas.blank())
{
formatString << 18 - codcf.len() << "d";
header.format(formatString, tipocf[0], 0);
header << codcf; // Perchè cazzo non va il %s!?
}
else
{
formatString << 18 - occas.len() << "d";
header.format(formatString, 'O', 0);
header << occas;
}
// Ritorno l'header
return header;
}
@ -878,7 +901,7 @@ TString TTrFa_app::getBody(TToken_string* strarr, bool add)
/* Sembra che utilizzare identificatori chiari e sensati in questo mondo non è concesso, quindi adesso vi sbatto un bell'ID numerico
* Ok per OGNI cliente devo assegnarli un identificativo del numero della fattura
*/
static TString keyMap; keyMap.cut(0) << strarr->get_char(_tipocf) << "|" << strarr->get_int(_codcf);
static TString keyMap; keyMap.cut(0) << strarr->get_char(_tipocf) << "|" << strarr->get_int(_codcf) << "|" << strarr->get(_occas);
clifoDoc app = mCliDoc[keyMap];
if(add)
@ -1106,7 +1129,11 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
}
if(!foundBolla)
{
checkClifo << strarr->get_char(_tipocf) << strarr->get_long(_codcf);
static TString tempOcfpi; tempOcfpi.cut(0) << strarr->get(_occas);
if(tempOcfpi.blank())
checkClifo << strarr->get_char(_tipocf) << "|" << strarr->get_long(_codcf);
else
checkClifo << strarr->get_char(_tipocf) << "|" << strarr->get(_occas);
}
// Controllo il clifo, se non c'è lo aggiungo altrimenti salto sto giro
@ -1315,7 +1342,14 @@ bool TTrFa_app::tff0700(TSheet_field& sheet)
// Chiave: Tipo C/F, Cod C/F, Numero doc. anno doc
static TString checkFatt;
checkFatt.cut(0) << strarr->get_long(_codcf) << "," << strarr->get(_numdoc) << "," << TString(strarr->get(_datadoc)).right(4);
static TString codcf;
// Prendo il cliente occasionale se c'è
codcf.cut(0) << strarr->get(_occas);
if(codcf.blank())
codcf.cut(0) << strarr->get(_codcf);
checkFatt.cut(0) << codcf << "," << strarr->get(_numdoc) << "," << TString(strarr->get(_datadoc)).right(4);
if(fattSent.find(checkFatt) == fattSent.end())
{
@ -1502,14 +1536,12 @@ void TTrFa_app::main_loop()
{
// Sposto SSA
if(!copySSA()) return;
TTrFa_mask msk("tf0100a");
while (msk.run() == K_ENTER)
while (msk().run() == K_ENTER)
{
if(msk.checkNotEmpty())
if(msk().checkNotEmpty())
{
send(&msk);
send(&msk());
//ini_set_string(CONFIG_DITTA, "tf", "LastSend", ++TDate(msk.get(F_DATAFIN)));
}
}

View File

@ -228,6 +228,7 @@ public:
};
// Funzione inline di stampa
inline void printError(TPrinter* stampa, TString movimento, TString documento, TString msgerr);
TTrFa_mask& msk();
/////////////////////////////////////////////////////////////////////////////////////
// TTrFa_app

View File

@ -74,7 +74,7 @@ TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf
}
// Se non è un movimento o il controllo fallisce mi sposto
if(!newMov || !checkRecord(c_rmoviva))
if(!newMov || !checkRecord(c_rmoviva) || !msk().get_bool(getTipoDoc(c_rmoviva->get("23.TIPODOC").as_string())))
{
TString codiva;
do

View File

@ -83,11 +83,9 @@ TString getRFSO(TString codrfso)
*/
bool checkRecord(TISAM_recordset* rec)
{
TString keyClifo; keyClifo << rec->get("23.TIPO").as_string() << "|" << rec->get("23.CODCF").as_string();
TRectype rclifo = cache().get(LF_CLIFO, keyClifo);
TAnagrafica anaCli(rec->get("23.TIPO").as_string()[0], rec->get("23.CODCF").as_int(), rec->get("23.OCFPI").as_string());
// Salto le schede carburanti
if(rclifo.get("ALLEG") == "C")
if(anaCli.inserimento_in_allegato() == 'C')
return false;
// Clienti
@ -97,7 +95,7 @@ bool checkRecord(TISAM_recordset* rec)
TCausale caus(rec->get("23.CODCAUS").as_string());
if(caus.soloiva() && (caus.reverse_charge() || caus.regime_speciale() == 3))
return false;
} else if((rclifo.get("STATOPAIV").blank() || rclifo.get("STATOPAIV") == "IT") && rclifo.get("PAIV")[0] != '0' && rclifo.get("PAIV")[0] != '1' && (rclifo.get("COFI")[0] == '8' || rclifo.get("COFI")[0] == '9'))
} else if(anaCli.italiano() && anaCli.partita_IVA()[0] != '0' && anaCli.partita_IVA()[0] != '1' && anaCli.codice_fiscale()[0] > '8')
// Salto tutti i fornitori con cod cf che inizia per 8 o 9 e con p.iva non valida
{
return false;