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);
|
||||
const TRectype& rec_cfven = cache().get(LF_CFVEN, key_cfven);
|
||||
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();
|
||||
clienti.set("ScontoFineFattura", hd_find_sconto(str_sconto));
|
||||
|
199
ha/ha1300.cpp
199
ha/ha1300.cpp
@ -3,8 +3,10 @@
|
||||
#include <progind.h>
|
||||
#include <reputils.h>
|
||||
|
||||
#include "halib.h"
|
||||
#include "../mg/movmag.h"
|
||||
#include "../mg/rmovmag.h"
|
||||
|
||||
#include "halib.h"
|
||||
#include "ha1300a.h"
|
||||
|
||||
#define UPLOAD_FILE "upload.d"
|
||||
@ -251,6 +253,11 @@ class TUpload2Campo : public TSkeleton_application
|
||||
bool _can_write;
|
||||
|
||||
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_BR(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();
|
||||
};
|
||||
|
||||
//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)
|
||||
{
|
||||
@ -275,16 +318,6 @@ void TUpload2Campo::elabora_SU(THardy_upload_recordset& recset, TLog_report& log
|
||||
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();
|
||||
@ -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)
|
||||
{
|
||||
//1) codice terminale (lungo 3) e codice agente (lungo 5)
|
||||
TString4 codice_terminale = recset.get("CodiceTerminale").as_string();
|
||||
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 = 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);
|
||||
}
|
||||
|
||||
const TString& codice_agente = check_agente(codice_terminale, log);
|
||||
const TString8 codmag = cache().get(LF_AGENTI, codice_agente, AGE_CODMAG);
|
||||
|
||||
//2) Testata documento
|
||||
//genera una simpatico documento di cui raccatta la chiave
|
||||
const TString& str_datadoc = recset.get(DOC_DATADOC).as_string();
|
||||
int anno = 2000 + atoi(str_datadoc.right(2));
|
||||
const int mese = atoi(str_datadoc.mid(2,2));
|
||||
const int giorno = atoi(str_datadoc.left(2));
|
||||
|
||||
const TDate datadoc = upload_format_date6(str_datadoc);
|
||||
|
||||
char rec_tipodoc = recset.get(DOC_TIPODOC).as_string()[0];
|
||||
//2a) tipo documento
|
||||
@ -350,6 +462,7 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log
|
||||
}
|
||||
//2b) numerazione documento
|
||||
//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;
|
||||
if (rec_tipodoc == 'V')
|
||||
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();
|
||||
|
||||
TDocumento doc('D', anno, codnum, ndoc);
|
||||
TDocumento doc('D', datadoc.year(), codnum, ndoc);
|
||||
|
||||
//2c) tipo documento e data documento
|
||||
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();
|
||||
doc.put(DOC_CAUSMAG, caus_movmag);
|
||||
|
||||
TDate datadoc(giorno, mese, anno);
|
||||
doc.put(DOC_DATADOC, datadoc);
|
||||
|
||||
//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
|
||||
//3a) articolo
|
||||
TString8 codart = recset.get(RDOC_CODART).as_string();
|
||||
codart.trim();
|
||||
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);
|
||||
}
|
||||
const TString& descr = check_articolo(codart, log);
|
||||
|
||||
rigadoc.put(RDOC_CODART, codart);
|
||||
rigadoc.put(RDOC_CODARTMAG, codart);
|
||||
rigadoc.put(RDOC_CHECKED, "X");
|
||||
rigadoc.put(RDOC_DESCR, rec_anamag.get(ANAMAG_DESCR));
|
||||
rigadoc.put(RDOC_DESCR, descr);
|
||||
|
||||
//3b) umart
|
||||
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
|
||||
TString msg;
|
||||
msg << anno << "-" << codnum << "-" << ndoc << " Terminale: " << codice_terminale << " Cliente: " << codcf;
|
||||
msg << datadoc.year() << "-" << codnum << "-" << ndoc << " Terminale: " << codice_terminale << " Cliente: " << codcf;
|
||||
//se può scrivere...
|
||||
if (_can_write)
|
||||
{
|
||||
@ -550,7 +653,7 @@ void TUpload2Campo::elabora(const TMask& mask)
|
||||
recset.sort(ordina_upload);
|
||||
|
||||
#ifdef DBG
|
||||
recset.save_as("c:/temp/hardy/cazzone.txt");
|
||||
recset.save_as("D:/dati/hardy/cazzone.txt");
|
||||
#endif
|
||||
|
||||
//creazione progind e log
|
||||
@ -592,8 +695,8 @@ void TUpload2Campo::elabora(const TMask& mask)
|
||||
case 3: //tipo record: SI (incasso documenti)
|
||||
elabora_SI(recset, log);
|
||||
break;
|
||||
case 4: //tipo record: BR (movimenti magazzino)
|
||||
//elabora_BR(recset, log); //non li importiamo perchè vengono eseguiti alla scrittura dei documenti importati su archivi
|
||||
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!
|
||||
|
@ -401,6 +401,15 @@ const TString& hd_format_date6(const TDate& 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
|
||||
|
||||
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_format_date8(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_key2forn(const TString& key);
|
||||
void hd_key2conto(const TString& key, int& gr, int& co, long& so);
|
||||
|
Loading…
x
Reference in New Issue
Block a user