Patch level :10.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
hardy


git-svn-id: svn://10.65.10.50/branches/R_10_00@21554 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2011-02-01 11:40:26 +00:00
parent 249f822b50
commit 8ce29efe91
2 changed files with 184 additions and 64 deletions

View File

@ -302,37 +302,42 @@ void TFile2Txt::genera_sospesi_txt()
{
progind.addstatus(1);
sospesi.new_rec("");
//per riempire i campi è necessario un po' di casino sulla partita in esame
const TRectype& rec_part = archivio_part.cursor()->curr();
TPartita partita(rec_part);
//cerca il saldo, il totale del doc originale, il residuo
TImporto saldo, doc, pag, imp;
partita.calcola_saldo(saldo, doc, pag, imp);
TImporto residuo = doc;
residuo -= saldo;
const int nriga = rec_part.get_int(PART_NRIGA);
const TRiga_scadenze& scad = partita.rata(nriga, 1);
const TDate datascad = scad.get_date(SCAD_DATASCAD);
//solo se il saldo è > 0 crea la nuova riga da esportare nel txt
//...così volle Hardy!...
if (saldo.valore() > ZERO)
{
sospesi.new_rec("");
//e vai che riempiamo i campi
const long codcf = rec_part.get_long(PART_SOTTOCONTO); //riprendiamo il codcf come long
const TString& codage = hd_find_codag(codcf);
sospesi.set("CodiceTerminale", codage);
sospesi.set("CodiceCliente", codcf);
const TString& ndoc = rec_part.get(PART_NUMDOC);
sospesi.set("NumeroFattura", ndoc);
const TDate datadoc = rec_part.get_date(PART_DATADOC);
sospesi.set("DataFattura", hd_format_date6(datadoc));
sospesi.set("ImportoResiduo", residuo.valore());
sospesi.set("ImpOriginalDoc", doc.valore());
sospesi.set("DataScadenza", hd_format_date6(datascad));
TString16 cod_partita;
cod_partita << rec_part.get_int(PART_ANNO) << "-" << rec_part.get(PART_NUMPART);
sospesi.set("Partita", cod_partita);
sospesi.set("TipoDoc", "F");
const int nriga = rec_part.get_int(PART_NRIGA);
const TRiga_scadenze& scad = partita.rata(nriga, 1);
const TDate datascad = scad.get_date(SCAD_DATASCAD);
//e vai che riempiamo i campi
const long codcf = rec_part.get_long(PART_SOTTOCONTO); //riprendiamo il codcf come long
const TString& codage = hd_find_codag(codcf);
sospesi.set("CodiceTerminale", codage);
sospesi.set("CodiceCliente", codcf);
const TString& ndoc = rec_part.get(PART_NUMDOC);
sospesi.set("NumeroFattura", ndoc);
const TDate datadoc = rec_part.get_date(PART_DATADOC);
sospesi.set("DataFattura", hd_format_date6(datadoc));
real residuo = saldo.valore();
residuo *= CENTO;
sospesi.set("ImportoResiduo", residuo);
sospesi.set("ImpOriginalDoc", doc.valore());
sospesi.set("DataScadenza", hd_format_date6(datascad));
TString16 cod_partita;
cod_partita << rec_part.get_int(PART_ANNO) << "-" << rec_part.get(PART_NUMPART);
sospesi.set("Partita", cod_partita);
sospesi.set("TipoDocumento", "F");
}
}
TFilename output_path = genera_path("sospesi");

View File

@ -18,35 +18,44 @@ int ordina_upload(const TObject** o1, const TObject** o2)
const TString& s1 = *(TString*)*o1;
const TString& s2 = *(TString*)*o2;
if (s1[1] == 'F' && s2[1] == 'F')
if (s1[0] == 'V' || s2[0] == 'V')
{
TToken_string k[2];
for (int i = 0; i < 2; i++)
{
const TString& rec = i == 0 ? s1 : s2;
TToken_string& key = k[i];
if (rec[0] == 'T')
{
key.add(rec.mid(14,2)); //anno
key.add(rec.mid(16,1)); //tipodoc
key.add(rec.mid(5,5)); //numdoc
}
else
{
key.add(rec.mid(14,2)); //anno
key.add(rec.mid(28,1)); //tipodoc
key.add(rec.mid(5,5)); //numdoc
key.add(rec.mid(29,5)); //codart
}
}
return k[0].compare(k[1]);
if (s1[0] != 'V' || s2[0] != 'V')
return s1[0] == 'V' ? -1 : +1;
}
else
{
if (s1[1] == 'F')
return +1;
if (s2[1] == 'F')
return -1;
//ordinatore dei record Testata e Riga fattura
if (s1[1] == 'F' && s2[1] == 'F')
{
TToken_string k[2];
for (int i = 0; i < 2; i++)
{
const TString& rec = i == 0 ? s1 : s2;
TToken_string& key = k[i];
if (rec[0] == 'T')
{
key.add(rec.mid(14,2)); //anno
key.add(rec.mid(16,1)); //tipodoc
key.add(rec.mid(5,5)); //numdoc
}
else
{
key.add(rec.mid(14,2)); //anno
key.add(rec.mid(28,1)); //tipodoc
key.add(rec.mid(5,5)); //numdoc
key.add(rec.mid(29,5)); //codart
}
}
return k[0].compare(k[1]);
}
else
{
if (s1[1] == 'F')
return +1;
if (s2[1] == 'F')
return -1;
}
}
return s1.compare(s2);
@ -203,17 +212,17 @@ THardy_upload_recordset::THardy_upload_recordset(const TFilename& filename)
//--------------
add_trc_field("VC", "TipoRecord", T_X, 1, 2); //x
add_trc_field("VC", "CodiceTerminale", T_N, 3, 3); //x
add_trc_field("VC", CLI_CODCF, T_X, 6, 6); //x
add_trc_field("VC", CLI_RAGSOC, T_X, 12, 34); //x
add_trc_field("VC", CLI_INDCF, T_X, 46, 34); //x
add_trc_field("VC", "CodiceCliente", T_X, 6, 6); //x
add_trc_field("VC", "RagioneSociale", T_X, 12, 34); //x
add_trc_field("VC", "Indirizzo", T_X, 46, 34); //x
add_trc_field("VC", "Localita", T_X, 80, 20); //x attenzione che potrebbe essere il com_dencom
add_trc_field("VC", CLI_CAPCF, T_X, 100, 5); //x
add_trc_field("VC", "CAP", T_X, 100, 5); //x
add_trc_field("VC", "Provincia", T_X, 105, 2); //x da questo e da dencom ricaviamo il codcom
add_trc_field("VC", CLI_PAIV, T_X, 107, 16); //x
add_trc_field("VC", CLI_CODPAG, T_X, 123, 1); //x
add_trc_field("VC", "CodiceListino", T_X, 124, 3);
add_trc_field("VC", "TipoDocumento", T_X, 127, 1);
add_trc_field("VC", CLI_COFI, T_X, 128, 16); //x
add_trc_field("VC", "PartitaIVA", T_X, 107, 16); //x
add_trc_field("VC", "CodicePagamento", T_X, 123, 2); //x
add_trc_field("VC", "CodiceListino", T_X, 125, 3);
add_trc_field("VC", "TipoDocumento", T_X, 128, 1);
add_trc_field("VC", "CodiceFiscale", T_X, 129, 16); //x
//Tipo record RC
@ -259,6 +268,7 @@ class TUpload2Campo : public TSkeleton_application
{
TFilename _intput_dir;
bool _can_write;
TAssoc_array _nuovi_clienti;
protected:
//metodi di basso livello
@ -344,12 +354,116 @@ void TUpload2Campo::elabora_SU(THardy_upload_recordset& recset, TLog_report& log
void TUpload2Campo::elabora_VC(THardy_upload_recordset& recset, TLog_report& log)
{
const TString& cod_term = recset.get("CodiceTerminale").as_string();
const TString& codcf = recset.get(CLI_CODCF).as_string();
const TString& ragsoc = recset.get(CLI_RAGSOC).as_string();
//dati dal recordset di upload
TString4 codice_terminale = recset.get("CodiceTerminale").as_string();
const TString& codice_agente = check_agente(codice_terminale, log);
long codcf = recset.get("CodiceCliente").as_int();
TLocalisamfile file_clifo(LF_CLIFO);
//se il codice contiene un '*' -> il cliente è nuovo e va aggiunto alla lista di Campo
//se invece il cliente ha un codice normale -> è un aggiornamento dei suoi dati -> controlla che esista davvero
if (codcf <= 0)
{
//questa è un surrogato della get_next_cli
file_clifo.zero();
file_clifo.put(CLI_TIPOCF, 'C');
file_clifo.read(_isgteq);
if (file_clifo.good())
file_clifo.prev() ;
file_clifo.setstatus(NOERR);
if (file_clifo.good())
codcf += file_clifo.get_long(CLI_CODCF);
//finestra propositiva del nuovo codcf
file_clifo.zero();
file_clifo.put(CLI_TIPOCF, 'C');
file_clifo.put(CLI_CODCF, codcf);
file_clifo.write();
}
//il cliente, se non nuovo, deve esistere!
file_clifo.put(CLI_TIPOCF, 'C');
file_clifo.put(CLI_CODCF, codcf);
int err = file_clifo.read();
//se non esiste non scrive ma continua
if (err != NOERR)
{
_can_write = false;
TString msg;
msg << "Impossibile aggiornare il cliente " << codcf << ". File clifo.";
log.log(2, msg);
}
//campi clifo
const TString& ragsoc = recset.get("RagioneSociale").as_string();
file_clifo.put(CLI_RAGSOC, ragsoc);
const TString& indcf = recset.get("Indirizzo").as_string();
file_clifo.put(CLI_INDCF, indcf);
const TString& localita = recset.get("Localita").as_string();
file_clifo.put(CLI_LOCCF, localita);
const TString& cap = recset.get("CAP").as_string();
file_clifo.put(CLI_CAPCF, cap);
//la provincia non serve perchè si passa dal codice del comune
//const TString& provincia = recset.get("Provincia").as_string();
const TString& piva = recset.get("PartitaIVA").as_string();
file_clifo.put(CLI_PAIV, piva);
const TString& codpag = recset.get("CodicePagamento").as_string();
file_clifo.put(CLI_CODPAG, codpag);
const TString& cofi = recset.get("CodiceFiscale").as_string();
file_clifo.put(CLI_COFI, cofi);
//campi cfven
TLocalisamfile file_cfven(LF_CFVEN);
file_cfven.put(CFV_TIPOCF, 'C');
file_cfven.put(CFV_CODCF, codcf);
err = file_cfven.read();
if (err != NOERR)
{
_can_write = false;
TString msg;
msg << "Impossibile aggiornare il cliente " << ragsoc << ". File cfven.";
log.log(2, msg);
}
file_cfven.put(CFV_CODAG, codice_agente);
const TString& codlist = recset.get("CodiceListino").as_string();
file_cfven.put(CFV_CODLIST, codlist);
//se alla fin fine può scrivere -> aggiorna sia clifo che cfven
if (_can_write)
file_clifo.rewrite();
//incredibilmente arriva in fondo
TString msg;
msg << "Scartato nuovo cliente. Terminale: " << cod_term << " CodCli: " << codcf << " Ragsoc: " << ragsoc;
log.log(0, msg);
msg << "Cliente: " << codcf << " Terminale: " << codice_terminale;
//se può scrivere...
if (_can_write)
{
//alla fine della fiera salva il cliente e il cfven
err = file_clifo.rewrite() && file_cfven.rewrite();
if (err == NOERR)
{
msg.insert("Registrato cliente: ", 0);
log.log(0, msg);
}
else
{
msg.insert("Impossibile registrare cliente: ", 0);
log.log(2, msg);
}
}
else //..sennò avverte e basta
{
msg.insert("Controllato cliente: ", 0);
log.log(0, msg);
}
}
@ -785,6 +899,7 @@ void TUpload2Campo::elabora_RC(THardy_upload_recordset& recset, TLog_report& log
}
void TUpload2Campo::elabora(const TMask& mask)
{
TToken_string tipi_record("SU|TF|RF|SI|BR|VC|RC");
@ -844,8 +959,8 @@ void TUpload2Campo::elabora(const TMask& mask)
case 4: //tipo record: BR (righe movimenti magazzino)
elabora_BR(recset, log);
break;
case 5: //tipo record: VC (Variazioni Cliente)
//elabora_VC(recset, log); //non serve! gli agenti non possono immettere clienti da terminale!
case 5: //tipo record: VC (nuovi clienti e Variazioni Cliente)
elabora_VC(recset, log);
break;
case 6: //tipo record: RC (Richiesta Carico)
elabora_RC(recset, log);