Patch level :10.0
Files correlati : Ricompilazione Demo : [ ] Commento : prima implementazione upload BR git-svn-id: svn://10.65.10.50/branches/R_10_00@21519 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
129eb8cf76
commit
c7b85a1033
@ -252,6 +252,7 @@ void TFile2Txt::genera_clienti_txt(const long da_codcli)
|
|||||||
key_cfven.add(codcf);
|
key_cfven.add(codcf);
|
||||||
const TRectype& rec_cfven = cache().get(LF_CFVEN, key_cfven);
|
const TRectype& rec_cfven = cache().get(LF_CFVEN, key_cfven);
|
||||||
const TString& listino_cliente = rec_cfven.get(CFV_CODLIST);
|
const TString& listino_cliente = rec_cfven.get(CFV_CODLIST);
|
||||||
|
clienti.set("CodiceListino", listino_cliente);
|
||||||
|
|
||||||
const TString& str_sconto = archivio_clienti.get(CFV_SCONTO).as_string();
|
const TString& str_sconto = archivio_clienti.get(CFV_SCONTO).as_string();
|
||||||
clienti.set("ScontoFineFattura", hd_find_sconto(str_sconto));
|
clienti.set("ScontoFineFattura", hd_find_sconto(str_sconto));
|
||||||
|
199
ha/ha1300.cpp
199
ha/ha1300.cpp
@ -3,8 +3,10 @@
|
|||||||
#include <progind.h>
|
#include <progind.h>
|
||||||
#include <reputils.h>
|
#include <reputils.h>
|
||||||
|
|
||||||
#include "halib.h"
|
#include "../mg/movmag.h"
|
||||||
|
#include "../mg/rmovmag.h"
|
||||||
|
|
||||||
|
#include "halib.h"
|
||||||
#include "ha1300a.h"
|
#include "ha1300a.h"
|
||||||
|
|
||||||
#define UPLOAD_FILE "upload.d"
|
#define UPLOAD_FILE "upload.d"
|
||||||
@ -251,6 +253,11 @@ class TUpload2Campo : public TSkeleton_application
|
|||||||
bool _can_write;
|
bool _can_write;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
//metodi di basso livello
|
||||||
|
const TString& check_agente(TString& codice_terminale, TLog_report& log);
|
||||||
|
const TString& check_articolo(TString& codart, TLog_report& log);
|
||||||
|
|
||||||
|
//metodi di alto livello
|
||||||
void elabora_SU(THardy_upload_recordset& recset, TLog_report& log);
|
void elabora_SU(THardy_upload_recordset& recset, TLog_report& log);
|
||||||
void elabora_BR(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_VC(THardy_upload_recordset& recset, TLog_report& log);
|
||||||
@ -264,6 +271,42 @@ public:
|
|||||||
virtual bool create();
|
virtual bool create();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//metodo che controlla se il terminale corrisponde ad un agente registrato e restituisce l'agente
|
||||||
|
const TString& TUpload2Campo::check_agente(TString& codice_terminale, TLog_report& log)
|
||||||
|
{
|
||||||
|
codice_terminale.right_just(3, '0');
|
||||||
|
TString8 codice_agente = codice_terminale;
|
||||||
|
codice_agente.right_just(5, '0');
|
||||||
|
|
||||||
|
const TRectype& rec_age = cache().get(LF_AGENTI, codice_agente);
|
||||||
|
const TString& codage_campo = rec_age.get(AGE_CODAGE);
|
||||||
|
|
||||||
|
if (codage_campo != codice_agente)
|
||||||
|
{
|
||||||
|
_can_write = false;
|
||||||
|
TString msg;
|
||||||
|
msg << "Codice agente " << codice_agente << " da terminale: sconosciuto";
|
||||||
|
log.log(2, msg);
|
||||||
|
}
|
||||||
|
return codage_campo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//metodo che controlla che l'articolo esista su Campo
|
||||||
|
const TString& TUpload2Campo::check_articolo(TString& codart, TLog_report& log)
|
||||||
|
{
|
||||||
|
codart.trim();
|
||||||
|
const TRectype& rec_anamag = cache().get(LF_ANAMAG, codart);
|
||||||
|
const TString& articolo_campo = rec_anamag.get(ANAMAG_CODART);
|
||||||
|
if (articolo_campo != codart)
|
||||||
|
{
|
||||||
|
_can_write = false;
|
||||||
|
TString msg;
|
||||||
|
msg << "Codice articolo " << codart << " sconosciuto su Campo";
|
||||||
|
log.log(2, msg);
|
||||||
|
}
|
||||||
|
return rec_anamag.get(ANAMAG_DESCR);
|
||||||
|
}
|
||||||
|
|
||||||
void TUpload2Campo::elabora_SU(THardy_upload_recordset& recset, TLog_report& log)
|
void TUpload2Campo::elabora_SU(THardy_upload_recordset& recset, TLog_report& log)
|
||||||
{
|
{
|
||||||
@ -275,16 +318,6 @@ void TUpload2Campo::elabora_SU(THardy_upload_recordset& recset, TLog_report& log
|
|||||||
log.log(0, msg);
|
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)
|
void TUpload2Campo::elabora_VC(THardy_upload_recordset& recset, TLog_report& log)
|
||||||
{
|
{
|
||||||
const TString& cod_term = recset.get("CodiceTerminale").as_string();
|
const TString& cod_term = recset.get("CodiceTerminale").as_string();
|
||||||
@ -300,34 +333,113 @@ void TUpload2Campo::elabora_SI(THardy_upload_recordset& recset, TLog_report& log
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TUpload2Campo::elabora_BR(THardy_upload_recordset& recset, TLog_report& log)
|
||||||
|
{
|
||||||
|
//dati dal recordset di upload
|
||||||
|
TString4 codice_terminale = recset.get("CodiceTerminale").as_string();
|
||||||
|
const TString& codice_agente = check_agente(codice_terminale, log);
|
||||||
|
const TString8 cod_magazzino = cache().get(LF_AGENTI, codice_agente, AGE_CODMAG);
|
||||||
|
|
||||||
|
const long curr_movmag = recset.get("NumeroDoc").as_int();
|
||||||
|
const TString& str_data_mov = recset.get("DataMov").as_string();
|
||||||
|
const TDate data_mov = upload_format_date6(str_data_mov);
|
||||||
|
const int anno = data_mov.year();
|
||||||
|
TString descr;
|
||||||
|
descr << "Agente: " << codice_terminale;
|
||||||
|
|
||||||
|
//1) crea la testata
|
||||||
|
//movimento di magazzino da riempire
|
||||||
|
TMov_mag movmag;
|
||||||
|
|
||||||
|
//const long numreg = atol(movmag.get_next_key());
|
||||||
|
//movmag.put(MOVMAG_NUMREG, numreg);
|
||||||
|
movmag.put(MOVMAG_ANNOES, anno);
|
||||||
|
movmag.put(MOVMAG_DATAREG, data_mov);
|
||||||
|
movmag.put(MOVMAG_DATACOMP, data_mov);
|
||||||
|
movmag.put(MOVMAG_EXNUMDOC, curr_movmag);
|
||||||
|
movmag.put(MOVMAG_EXDATADOC, data_mov);
|
||||||
|
movmag.put(MOVMAG_DESCR, descr);
|
||||||
|
//movmag.put(MOVMAG_CODCAUS, codcaus);
|
||||||
|
|
||||||
|
bool go_on = true;
|
||||||
|
// righe movimento di magazzino
|
||||||
|
//scansione delle righe documento su record BR
|
||||||
|
while (go_on)
|
||||||
|
{
|
||||||
|
//2) crea le righe (legge tutti i record di tipo BR successivi finchè hanno lo stesso numero documento!)
|
||||||
|
|
||||||
|
//agginunge una nuova riga (solo merce, per quanto ne sappiamo)
|
||||||
|
TRectype& rmovmag = movmag.new_row();
|
||||||
|
rmovmag.put(RMOVMAG_CODMAG, cod_magazzino);
|
||||||
|
TString8 codart = recset.get("CodiceArticolo").as_string();
|
||||||
|
check_articolo(codart, log);
|
||||||
|
rmovmag.put(RMOVMAG_CODART, codart);
|
||||||
|
TToken_string key_umart;
|
||||||
|
key_umart.add(codart);
|
||||||
|
key_umart.add(1);
|
||||||
|
const TString& um = cache().get(LF_UMART, key_umart, UMART_UM);
|
||||||
|
rmovmag.put(RMOVMAG_UM, um);
|
||||||
|
const TString& lotto = recset.get("CodiceLotto").as_string();
|
||||||
|
rmovmag.put(RMOVMAG_LIVGIAC, lotto);
|
||||||
|
|
||||||
|
real qta = recset.get("Qta[int]").as_real();
|
||||||
|
qta += recset.get("Qta[dec]").as_real() / CENTO;
|
||||||
|
rmovmag.put(RMOVMAG_QUANT, qta);
|
||||||
|
|
||||||
|
//quando non trova un BR con lo stesso numero di movimento significa che le righe sono finite!
|
||||||
|
go_on = recset.move_next();
|
||||||
|
|
||||||
|
if (go_on && (recset.get("TipoRecord").as_string() != "BR" || curr_movmag != recset.get("NumeroDoc").as_int()))
|
||||||
|
{
|
||||||
|
recset.move_prev(); //allora torna indietro di un record per riposizionarsi sull'ultimo non letto
|
||||||
|
go_on = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//incredibilmente arriva in fondo
|
||||||
|
TString msg;
|
||||||
|
msg << "Doc.: " << curr_movmag << " Terminale: " << codice_terminale;
|
||||||
|
//se può scrivere...
|
||||||
|
if (_can_write)
|
||||||
|
{
|
||||||
|
//alla fine della fiera salva il maggico movimento di magazzino
|
||||||
|
TLocalisamfile file_movmag(LF_MOVMAG);
|
||||||
|
int err = movmag.write(file_movmag);
|
||||||
|
|
||||||
|
if (err == NOERR)
|
||||||
|
{
|
||||||
|
msg.insert("Registrato mov. magazzino: ", 0);
|
||||||
|
log.log(0, msg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msg.insert("Impossibile registrare mov. magazzino: ", 0);
|
||||||
|
log.log(2, msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else //..sennò avverte e basta
|
||||||
|
{
|
||||||
|
msg.insert("Controllato mov. magazzino: ", 0);
|
||||||
|
log.log(0, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.log(0, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log)
|
void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log)
|
||||||
{
|
{
|
||||||
//1) codice terminale (lungo 3) e codice agente (lungo 5)
|
//1) codice terminale (lungo 3) e codice agente (lungo 5)
|
||||||
TString4 codice_terminale = recset.get("CodiceTerminale").as_string();
|
TString4 codice_terminale = recset.get("CodiceTerminale").as_string();
|
||||||
codice_terminale.right_just(3, '0');
|
const TString& codice_agente = check_agente(codice_terminale, log);
|
||||||
TString8 codice_agente = codice_terminale;
|
const TString8 codmag = cache().get(LF_AGENTI, codice_agente, AGE_CODMAG);
|
||||||
codice_agente.right_just(5, '0');
|
|
||||||
|
|
||||||
const TRectype& rec_age = cache().get(LF_AGENTI, codice_agente);
|
|
||||||
const TString& codage = rec_age.get(AGE_CODAGE);
|
|
||||||
const TString8 codmag = rec_age.get(AGE_CODMAG); //magazzino collegato all'agente (serve nelle righe)
|
|
||||||
|
|
||||||
if (codage != codice_agente)
|
|
||||||
{
|
|
||||||
_can_write = false;
|
|
||||||
TString msg;
|
|
||||||
msg << "Codice agente " << codice_agente << " da terminale: sconosciuto";
|
|
||||||
log.log(2, msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//2) Testata documento
|
//2) Testata documento
|
||||||
//genera una simpatico documento di cui raccatta la chiave
|
//genera una simpatico documento di cui raccatta la chiave
|
||||||
const TString& str_datadoc = recset.get(DOC_DATADOC).as_string();
|
const TString& str_datadoc = recset.get(DOC_DATADOC).as_string();
|
||||||
int anno = 2000 + atoi(str_datadoc.right(2));
|
const TDate datadoc = upload_format_date6(str_datadoc);
|
||||||
const int mese = atoi(str_datadoc.mid(2,2));
|
|
||||||
const int giorno = atoi(str_datadoc.left(2));
|
|
||||||
|
|
||||||
|
|
||||||
char rec_tipodoc = recset.get(DOC_TIPODOC).as_string()[0];
|
char rec_tipodoc = recset.get(DOC_TIPODOC).as_string()[0];
|
||||||
//2a) tipo documento
|
//2a) tipo documento
|
||||||
@ -350,6 +462,7 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log
|
|||||||
}
|
}
|
||||||
//2b) numerazione documento
|
//2b) numerazione documento
|
||||||
//il codnum dipende dal tipo documento del terminale (F,B,O...) e dal codice del terminale
|
//il codnum dipende dal tipo documento del terminale (F,B,O...) e dal codice del terminale
|
||||||
|
//se tipo 'V' va cambiato in tipo 'B' in quanto le bolle valorizzate sono normali bolle in Campo
|
||||||
TString4 codnum;
|
TString4 codnum;
|
||||||
if (rec_tipodoc == 'V')
|
if (rec_tipodoc == 'V')
|
||||||
rec_tipodoc = 'B';
|
rec_tipodoc = 'B';
|
||||||
@ -366,7 +479,7 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log
|
|||||||
|
|
||||||
const long ndoc = recset.get(DOC_NDOC).as_int();
|
const long ndoc = recset.get(DOC_NDOC).as_int();
|
||||||
|
|
||||||
TDocumento doc('D', anno, codnum, ndoc);
|
TDocumento doc('D', datadoc.year(), codnum, ndoc);
|
||||||
|
|
||||||
//2c) tipo documento e data documento
|
//2c) tipo documento e data documento
|
||||||
doc.put(DOC_TIPODOC, tipodoc);
|
doc.put(DOC_TIPODOC, tipodoc);
|
||||||
@ -374,7 +487,6 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log
|
|||||||
const TString& caus_movmag = td.caus_mov();
|
const TString& caus_movmag = td.caus_mov();
|
||||||
doc.put(DOC_CAUSMAG, caus_movmag);
|
doc.put(DOC_CAUSMAG, caus_movmag);
|
||||||
|
|
||||||
TDate datadoc(giorno, mese, anno);
|
|
||||||
doc.put(DOC_DATADOC, datadoc);
|
doc.put(DOC_DATADOC, datadoc);
|
||||||
|
|
||||||
//2d) cliente e campi collegati via cli2doc()
|
//2d) cliente e campi collegati via cli2doc()
|
||||||
@ -425,21 +537,12 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log
|
|||||||
//serie delle put sulla riga documento; ricordiamo che la chiave della riga viene riempita dalla new_row
|
//serie delle put sulla riga documento; ricordiamo che la chiave della riga viene riempita dalla new_row
|
||||||
//3a) articolo
|
//3a) articolo
|
||||||
TString8 codart = recset.get(RDOC_CODART).as_string();
|
TString8 codart = recset.get(RDOC_CODART).as_string();
|
||||||
codart.trim();
|
const TString& descr = check_articolo(codart, log);
|
||||||
const TRectype& rec_anamag = cache().get(LF_ANAMAG, codart);
|
|
||||||
const TString& articolo = rec_anamag.get(ANAMAG_CODART);
|
|
||||||
if (articolo != codart)
|
|
||||||
{
|
|
||||||
_can_write = false;
|
|
||||||
TString msg;
|
|
||||||
msg << "Codice articolo " << codart << " sconosciuto";
|
|
||||||
log.log(2, msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
rigadoc.put(RDOC_CODART, codart);
|
rigadoc.put(RDOC_CODART, codart);
|
||||||
rigadoc.put(RDOC_CODARTMAG, codart);
|
rigadoc.put(RDOC_CODARTMAG, codart);
|
||||||
rigadoc.put(RDOC_CHECKED, "X");
|
rigadoc.put(RDOC_CHECKED, "X");
|
||||||
rigadoc.put(RDOC_DESCR, rec_anamag.get(ANAMAG_DESCR));
|
rigadoc.put(RDOC_DESCR, descr);
|
||||||
|
|
||||||
//3b) umart
|
//3b) umart
|
||||||
const TString& umqta = recset.get(RDOC_UMQTA).as_string();
|
const TString& umqta = recset.get(RDOC_UMQTA).as_string();
|
||||||
@ -510,7 +613,7 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log
|
|||||||
|
|
||||||
//incredibilmente arriva in fondo
|
//incredibilmente arriva in fondo
|
||||||
TString msg;
|
TString msg;
|
||||||
msg << anno << "-" << codnum << "-" << ndoc << " Terminale: " << codice_terminale << " Cliente: " << codcf;
|
msg << datadoc.year() << "-" << codnum << "-" << ndoc << " Terminale: " << codice_terminale << " Cliente: " << codcf;
|
||||||
//se può scrivere...
|
//se può scrivere...
|
||||||
if (_can_write)
|
if (_can_write)
|
||||||
{
|
{
|
||||||
@ -550,7 +653,7 @@ void TUpload2Campo::elabora(const TMask& mask)
|
|||||||
recset.sort(ordina_upload);
|
recset.sort(ordina_upload);
|
||||||
|
|
||||||
#ifdef DBG
|
#ifdef DBG
|
||||||
recset.save_as("c:/temp/hardy/cazzone.txt");
|
recset.save_as("D:/dati/hardy/cazzone.txt");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//creazione progind e log
|
//creazione progind e log
|
||||||
@ -592,8 +695,8 @@ void TUpload2Campo::elabora(const TMask& mask)
|
|||||||
case 3: //tipo record: SI (incasso documenti)
|
case 3: //tipo record: SI (incasso documenti)
|
||||||
elabora_SI(recset, log);
|
elabora_SI(recset, log);
|
||||||
break;
|
break;
|
||||||
case 4: //tipo record: BR (movimenti magazzino)
|
case 4: //tipo record: BR (righe movimenti magazzino)
|
||||||
//elabora_BR(recset, log); //non li importiamo perchè vengono eseguiti alla scrittura dei documenti importati su archivi
|
elabora_BR(recset, log);
|
||||||
break;
|
break;
|
||||||
case 5: //tipo record: VC (Variazioni Cliente)
|
case 5: //tipo record: VC (Variazioni Cliente)
|
||||||
//elabora_VC(recset, log); //non serve! gli agenti non possono immettere clienti da terminale!
|
//elabora_VC(recset, log); //non serve! gli agenti non possono immettere clienti da terminale!
|
||||||
|
@ -401,6 +401,15 @@ const TString& hd_format_date6(const TDate& data)
|
|||||||
return str_data;
|
return str_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const TDate upload_format_date6(const TString& str_data)
|
||||||
|
{
|
||||||
|
int anno = 2000 + atoi(str_data.right(2));
|
||||||
|
const int mese = atoi(str_data.mid(2,2));
|
||||||
|
const int giorno = atoi(str_data.left(2));
|
||||||
|
TDate data(giorno, mese, anno);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
// determina codice cliente campo a partire da codice hardy in base alle regole dettatemi da Robbi
|
// determina codice cliente campo a partire da codice hardy in base alle regole dettatemi da Robbi
|
||||||
|
|
||||||
long hd_key2cli(const TString& key)
|
long hd_key2cli(const TString& key)
|
||||||
|
@ -218,6 +218,7 @@ real hd_find_sconto(const TString& str_sconto);
|
|||||||
const TString& hd_find_codag(long codcf); // Da cliente campo ad agente Hardy ("007")
|
const TString& hd_find_codag(long codcf); // Da cliente campo ad agente Hardy ("007")
|
||||||
const TString& hd_format_date8(const TDate& data);
|
const TString& hd_format_date8(const TDate& data);
|
||||||
const TString& hd_format_date6(const TDate& data);
|
const TString& hd_format_date6(const TDate& data);
|
||||||
|
const TDate upload_format_date6(const TString& str_data);
|
||||||
long hd_key2cli(const TString& key);
|
long hd_key2cli(const TString& key);
|
||||||
long hd_key2forn(const TString& key);
|
long hd_key2forn(const TString& key);
|
||||||
void hd_key2conto(const TString& key, int& gr, int& co, long& so);
|
void hd_key2conto(const TString& key, int& gr, int& co, long& so);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user