Patch level :10.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :riporto hardy dalla 11 (esportazione sospesivar)


git-svn-id: svn://10.65.10.50/branches/R_10_00@21010 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2010-10-14 13:15:43 +00:00
parent 0f1e5bec87
commit bed09775ba
5 changed files with 324 additions and 15 deletions

View File

@ -5,6 +5,9 @@
#include <utility.h>
#include <comuni.h>
#include <pagsca.h>
#include <partite.h>
#include <scadenze.h>
#include "../mg/umart.h"
#include "halib.h"
@ -52,11 +55,15 @@ protected:
//metodi di medio livello
void crea_nome_txt(const TString& prefisso, TFilename& output_path);
void get_part_key(TConfig& ini, TToken_string& key) const;
bool find_part_key(TConfig& ini, const TString_array& ini_paragraphs,
const int logicnum, const TToken_string& key) const;
//metodi di alto livello
void genera_cliente_txt(TConfig& ini);
void genera_riga_listino_txt(TConfig& ini);
void genera_prodotto_txt(TConfig& ini);
void genera_sospeso_txt(TConfig& ini, TString_array& ini_paragraphs);
virtual void main_loop();
@ -336,11 +343,133 @@ void TIni2Txt::genera_prodotto_txt(TConfig& ini)
}
void TIni2Txt::get_part_key(TConfig& ini, TToken_string& key) const
{
//tracciato: tipocf-sottoconto(=codcf)-anno-numpart-nriga
key.cut(0);
key.add(ini.get(PART_TIPOCF));
key.add(ini.get(PART_SOTTOCONTO));
key.add(ini.get_int(PART_ANNO));
key.add(ini.get(PART_NUMPART));
key.add(ini.get_int(PART_NRIGA));
}
bool TIni2Txt::find_part_key(TConfig& ini, const TString_array& ini_paragraphs,
const int logicnum, const TToken_string& key) const
{
TString4 start;
start << logicnum << ',';
//cerca i pagamenti della partita
FOR_EACH_ARRAY_ROW(ini_paragraphs, t, row)
{
if (row->starts_with(start))
{
TToken_string key_row;
ini.set_paragraph(*row);
get_part_key(ini, key_row);
if (key_row == key)
return true;
} //if (part_row->starts_with("30...
} //FOR_EACH_ARRAY_ROW(ini_paragraphs, t...
return false;
}
void TIni2Txt::genera_sospeso_txt(TConfig& ini, TString_array& ini_paragraphs)
{
TEsporta_sospesiVAR_recordset sospeso;
sospeso.new_rec("");
const TString4 segno = ricava_segno(ini);
//delirio di campi da part (28) pagsca (29) scad(30)
//--------------------------------------------------
//ricava il numreg dal mov
const long numreg = ini.get_long(MOV_NUMREG, "23");
TAssoc_array clienti;
//costruisce la lista dei clienti presenti nel .ini
FOR_EACH_ARRAY_ROW(ini_paragraphs, r, riga)
{
if (riga->starts_with("28,"))
{
const long part_numreg = ini.get_long(PART_NREG, *riga); //va specificata il paragrafo alla prima get
const char tipocf = ini.get_char(PART_TIPOCF);
if (numreg == part_numreg && tipocf == 'C')
clienti.add(ini.get(PART_SOTTOCONTO));
}
}
FOR_EACH_ARRAY_ROW(ini_paragraphs, s, part_row)
{
if (part_row->starts_with("28,"))
{
const int tipomov = ini.get_int(PART_TIPOMOV, *part_row);
const char tipocf = ini.get_char(PART_TIPOCF);
const TString8 codcf = ini.get(PART_SOTTOCONTO);
const bool part_chiusa = ini.get_bool(PART_CHIUSA);
//cerca le partite, derivanti da fatture, dei soli clienti che ha nella lista clienti
if (!part_chiusa && tipomov == 1 && tipocf == 'C' && clienti.is_key(codcf))
{
TToken_string key;
get_part_key(ini, key);
const long numfatt = ini.get_long(PART_NUMDOC);
const TDate datadoc = ini.get(PART_DATADOC);
const TString8 numpart = key.get(3);
//cerca i pagamenti della rata
if (find_part_key(ini, ini_paragraphs, LF_SCADENZE, key))
{
real imp_rata = ini.get(SCAD_IMPORTO);
const TDate data_rata = ini.get(SCAD_DATASCAD);
real imp_pag;
if (find_part_key(ini, ini_paragraphs, LF_PAGSCA, key))
{
const char acc_sal = ini.get(PAGSCA_ACCSAL)[0];
imp_pag = acc_sal == 'S' ? imp_rata : real(ini.get(PAGSCA_IMPORTO));
}
//se il pagamento non chiude la rata -> il saldo resta in sospeso e il record va aggiunto
if (imp_pag < imp_rata)
{
real residuo = imp_rata - imp_pag;
//riempie il record da esportare
sospeso.set("CodiceTerminale", 0L);
sospeso.set("Segno", segno);
sospeso.set("CodiceCliente", codcf);
sospeso.set("NumeroFattura", numfatt);
sospeso.set("DataFattura", format_data_6(datadoc));
residuo *= CENTO;
residuo.round();
sospeso.set("ImportoResiduo", residuo);
imp_rata.round();
sospeso.set("ImpOriginalDoc", imp_rata);
sospeso.set("DataScadenza", format_data_6(data_rata));
sospeso.set("TipoDocumento", "F");
}
} //if (find_part_key(ini, ini_paragraphs, LF_SCADENZE...
} //if (tipomov == 1 && tipocf...
} //if (part_row->starts_with("28,...
} //FOR_EACH_ARRAY_ROW(ini_paragraphs, s...
//prepara il nome corretto del file .txt da generare
//--------------------------------------------------
const TString prefisso = "sospesivar";
TFilename output_path;
crea_nome_txt(prefisso, output_path);
sospeso.save_as(output_path, fmt_text);
}
void TIni2Txt::main_loop()
{
//stabilisce una volta per tutte ad inizio programma quale cavolo è la directory dove sbattere i .txt generati
TConfig hardy(CONFIG_DITTA, "ha");
_output_dir = hardy.get("OuputPath");
_output_dir = hardy.get("OutputPath");
//dalla riga di comando raccatta il path completo del file .ini da tradurre
TFilename path = argv(2);
@ -358,6 +487,8 @@ void TIni2Txt::main_loop()
genera_cliente_txt(input_ini_file);
//sospesi
if (ini_paragraphs.find("28,1,1") >= 0)
genera_sospeso_txt(input_ini_file, ini_paragraphs);
//listino
if (ini_paragraphs.find("52") >= 0)

View File

@ -3,7 +3,8 @@
#include <progind.h>
#include <comuni.h>
#include <scadenze.h>
#include "../cg/cgsaldac.h"
#include "../ve/condv.h"
#include "halib.h"
@ -211,6 +212,57 @@ void TFile2Txt::genera_clienti_txt()
void TFile2Txt::genera_sospesi_txt()
{
TEsporta_sospesi_recordset sospesi;
TString query;
query << "USE PART";
query << "\nSELECT (CHIUSA!=\"X\")&&(TIPOMOV=1)";
query << "\nFROM TIPOC=C";
query << "\nTO TIPOC=C";
TISAM_recordset archivio_part(query);
const long archivio_part_items = archivio_part.items();
TProgind progind(archivio_part_items, "Sospesi...", false, true);
for (bool ok = archivio_part.move_first(); ok; ok = archivio_part.move_next())
{
progind.addstatus(1);
sospesi.new_rec("");
sospesi.set("CodiceTerminale", 0L);
//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);
//e vai che riempiamo i campi
const TString& codcf = rec_part.get(PART_SOTTOCONTO);
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", format_data_6(datadoc));
sospesi.set("ImportoResiduo", residuo.valore());
sospesi.set("ImpOriginalDoc", doc.valore());
sospesi.set("DataScadenza", format_data_6(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");
}
TFilename output_path = genera_path("sospesi");
sospesi.save_as(output_path, fmt_text);
}
//listini: i commenti del metodo sono nella genera_listino_txt() della ha1100
@ -291,9 +343,9 @@ void TFile2Txt::genera_contratti_txt()
righe_contratti.set(RCONDV_SCONTO, find_sconto(str_sconto));
TDate dataini = archivio_rcondv.get("CONDV.VALIN").as_date();
righe_contratti.set(CONDV_VALIN, dataini.string(full, '\0'));
righe_contratti.set(CONDV_VALIN, format_data_8(dataini));
TDate datafine = archivio_rcondv.get("CONDV.VALFIN").as_date();
righe_contratti.set(CONDV_VALFIN, datafine.string(full, '\0'));
righe_contratti.set(CONDV_VALFIN, format_data_8(datafine));
}
TFilename output_path = genera_path("particolari");

View File

@ -42,6 +42,8 @@ class TUpload2Campo : public TSkeleton_application
protected:
void elabora_SU(THardy_upload_recordset& recset, TLog_report& log);
void elabora_BR(THardy_upload_recordset& recset, TLog_report& log);
void elabora_VC(THardy_upload_recordset& recset, TLog_report& log);
void elabora(const TMask& mask);
@ -53,6 +55,32 @@ public:
void TUpload2Campo::elabora_SU(THardy_upload_recordset& recset, TLog_report& log)
{
const TString& cod_term = recset.get("CodiceTerminale").as_string();
const TString& cod_age = recset.get(AGE_CODAGE).as_string();
const TString& descr_age = recset.get(AGE_RAGSOC).as_string();
TString msg;
msg << "Scartati dati agente " << cod_term << " " << descr_age;
log.log(0, msg);
}
void TUpload2Campo::elabora_BR(THardy_upload_recordset& recset, TLog_report& log)
{
const TString& cod_term = recset.get("CodiceTerminale").as_string();
const long ndoc = recset.get("NumeroDoc").as_int();
TString msg;
msg << "Scartato movimento magazzino. Terminale: " << cod_term << " N.Doc: " << ndoc;
log.log(0, msg);
}
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();
TString msg;
msg << "Scartato nuovo cliente. Terminale: " << cod_term << " CodCli: " << codcf << " Ragsoc: " << ragsoc;
log.log(0, msg);
}
@ -89,14 +117,19 @@ void TUpload2Campo::elabora(const TMask& mask)
elabora_SU(recset, log);
break;
case 1: //tipo record: TF (Testata Fattura)
//elabora_TF(recset, log);
break;
case 2: //tipo record: RF (Riga Fattura)
//elabora_RF(recset, log);
break;
case 3: //tipo record: SI (incasso documenti)
//elabora_SI(recset, log);
break;
case 4: //tipo record: BR (movimenti magazzino)
elabora_BR(recset, log);
break;
case 5: //tipo record: VC (Variazioni Cliente)
//elabora_VC(recset, log);
break;
default: //se il tipo record non esiste nella lista dei tipi record si incazza e lo scrive!
{
@ -105,7 +138,7 @@ void TUpload2Campo::elabora(const TMask& mask)
log.log_error(msg);
}
break;
}
} //switch(pos)..

View File

@ -94,6 +94,9 @@ THardy_recordset::THardy_recordset(const int rec_lenght) : TAS400_recordset("AS4
}
/////////////////////////////////////////////////////////////
// Recordset specifici per i dati da trasferire INPUT
/////////////////////////////////////////////////////////////
//questo invece è il metodo magico che vale per il caricamento da file esterno
THardy_upload_recordset::THardy_upload_recordset(const TFilename& filename)
: THardy_recordset(256)
@ -155,7 +158,7 @@ THardy_upload_recordset::THardy_upload_recordset(const TFilename& filename)
//--------------
add_trc_field("RF", "TipoRecord", T_X, 1, 2); //x
add_trc_field("RF", "CodiceTerminale", T_N, 3, 3); //x
add_trc_field("RF", RDOC_NDOC, T_N, 6, 5); //x
add_trc_field("RF", RDOC_NDOC, T_N, 6, 5); //x
add_trc_field("RF", DOC_DATADOC, T_X, 11, 6); //x testata
add_trc_field("RF", DOC_CODCF, T_X, 17, 6); //x testata
add_trc_field("RF", DOC_CODCFFATT, T_X, 23, 6); //x testata
@ -180,6 +183,52 @@ THardy_upload_recordset::THardy_upload_recordset(const TFilename& filename)
add_trc_field("RF", "CodcliGiro3", T_X, 98, 6);
add_trc_field("RF", "CodiceLotto", T_X, 104,10); //noi lo leghiamo all'articolo
//Tipo record SI
//--------------
add_trc_field("SI", "TipoRecord", T_X, 1, 2); //x
add_trc_field("SI", "CodiceTerminale", T_N, 3, 3); //x
add_trc_field("SI", "CodiceCliente", T_X, 6, 6);
add_trc_field("SI", "NumeroFattura", T_X, 12, 12);
add_trc_field("SI", "DataFattura", T_X, 24, 6);
add_trc_field("SI", "NonUsato", T_N, 30, 9);
add_trc_field("SI", "ImportoIncassato", T_Nv2N, 39, 9);
add_trc_field("SI", "DataIncasso", T_X, 48, 6);
add_trc_field("SI", "Partita", T_X, 54, 15);
add_trc_field("SI", "TipoDocumento", T_X, 69, 1);
add_trc_field("SI", "DataEmissione", T_X, 70, 6);
add_trc_field("SI", "PagamentoCarta", T_X, 76, 1);
//Tipo record BR
//--------------
add_trc_field("BR", "TipoRecord", T_X, 1, 2); //x
add_trc_field("BR", "CodiceTerminale", T_N, 3, 3); //x
add_trc_field("BR", "NumeroRiga", T_N, 6, 3);
add_trc_field("BR", "NumeroDoc", T_N, 9, 5);
add_trc_field("BR", "DataMov", T_X, 14, 6);
add_trc_field("BR", "CodiceArticolo", T_X, 20, 5);
add_trc_field("BR", "Qta[int]", T_N, 25, 5);
add_trc_field("BR", "Qta[dec]", T_N, 30, 2);
add_trc_field("BR", "Mittente", T_N, 32, 3);
add_trc_field("BR", "Destinatario", T_N, 35, 3);
add_trc_field("BR", "CausaleMov", T_N, 38, 2);
add_trc_field("BR", "CodiceLotto", T_X, 40, 10);
//Tipo record VC
//--------------
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", "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", "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
load_file(filename);
}
@ -249,6 +298,30 @@ TEsporta_clientiVAR_recordset::TEsporta_clientiVAR_recordset()
insert_field("Segno", T_X, 4, 1); //x
}
//Sospesi
//-------
TEsporta_sospesi_recordset::TEsporta_sospesi_recordset(int rec_length)
: THardy_recordset(rec_length)
{
add_field("CodiceTerminale", T_N, 1, 3); //x
add_field("CodiceCliente", T_X, 4, 6); //x
add_field("NumeroFattura", T_X, 10, 12); //x
add_field("DataFattura", T_X, 22, 6); //x
add_field("ImportoResiduo", T_Nv2N, 28, 9); //x
add_field("ImpOriginalDoc", T_N, 37, 9); //x
add_field("DataScadenza", T_X, 46, 6); //x
add_field("Partita", T_X, 52, 15); //x
add_field("TipoDocumento", T_X, 67, 1); //x
}
//..e variazioni sospesi
TEsporta_sospesiVAR_recordset::TEsporta_sospesiVAR_recordset()
: TEsporta_sospesi_recordset(68)
{
insert_field("Segno", T_X, 4, 1); //x
}
//Righe Listini
//-------------
TEsporta_listini_recordset::TEsporta_listini_recordset(int rec_length)
@ -408,12 +481,6 @@ TEsporta_pagamenti_recordset::TEsporta_pagamenti_recordset(int rec_length)
/////////////////////////////////////////////////////////////
// Recordset specifici per i dati da trasferire INPUT
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
// Metodi di utility
/////////////////////////////////////////////////////////////
@ -441,13 +508,23 @@ const TString& find_codag(const long codcf)
return codag.right(3); //il loro codagente è lungo 3!!!
}
//il dio dei programmatori ci perdoni!
const TString& format_data_8(const TDate& data)
{
const int day = data.day();
const int month = data.month();
const int year = data.year();
TString& str_data = get_tmp_string();
str_data << day << month << year;
str_data.format("%02d%02d%04d", day, month, year);
return str_data;
}
const TString& format_data_6(const TDate& data)
{
const int day = data.day();
const int month = data.month();
const int year = data.year();
TString& str_data = get_tmp_string();
str_data.format("%02d%02d%02d", day, month, year%100);
return str_data;
}

View File

@ -99,6 +99,21 @@ public:
TEsporta_clientiVAR_recordset();
};
//Sospesi ()
//-----------------------
class TEsporta_sospesi_recordset : public THardy_recordset
{
public:
TEsporta_sospesi_recordset(int rec_length = 67);
};
//..e variazioni sospesi!
class TEsporta_sospesiVAR_recordset : public TEsporta_sospesi_recordset
{
public:
TEsporta_sospesiVAR_recordset();
};
//Listini (condv + rcondv)
//------------------------
class TEsporta_listini_recordset : public THardy_recordset
@ -153,8 +168,8 @@ public:
};
//Rmovmag (Carico)
//----------------
//Carico (rdoc di carico)
//-----------------------
class TEsporta_carico_recordset : public THardy_recordset
{
public:
@ -215,3 +230,4 @@ public:
real find_sconto(const TString& str_sconto);
const TString& find_codag(const long codcf);
const TString& format_data_8(const TDate& data);
const TString& format_data_6(const TDate& data);