Patch level :10.0 910
Files correlati : Ricompilazione Demo : [ ] Commento : HardY - tamente! git-svn-id: svn://10.65.10.50/branches/R_10_00@21530 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
cb25cd552c
commit
0289403dce
@ -3,7 +3,7 @@
|
||||
|
||||
#include "ha0.h"
|
||||
|
||||
#define usage "Error - usage : %s -{1|2|3|4}"
|
||||
#define usage "Error - usage : %s -{0|1|2|3|4}"
|
||||
|
||||
int main(int argc,char** argv)
|
||||
|
||||
@ -13,6 +13,9 @@ int main(int argc,char** argv)
|
||||
|
||||
switch (r)
|
||||
{
|
||||
case 0:
|
||||
rt = ha0100(argc, argv) ; break; //gestore tabelle modulo HA
|
||||
break;
|
||||
case 1:
|
||||
rt = ha0200(argc, argv) ; break; //configurazione modulo
|
||||
break;
|
||||
|
1
ha/ha0.h
1
ha/ha0.h
@ -1,3 +1,4 @@
|
||||
int ha0100(int argc, char* argv[]);
|
||||
int ha0200(int argc, char* argv[]);
|
||||
int ha0300(int argc, char* argv[]);
|
||||
int ha0400(int argc, char* argv[]);
|
||||
|
74
ha/ha0100.cpp
Executable file
74
ha/ha0100.cpp
Executable file
@ -0,0 +1,74 @@
|
||||
// gestione tabelle di modulo hardy
|
||||
|
||||
#include <automask.h>
|
||||
#include <modtbapp.h>
|
||||
#include <tabutil.h>
|
||||
|
||||
#include "hatbcau.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Maschera generica di gestione tabelle hardy
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class THA_table_mask : public TAutomask
|
||||
{
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field &o, TField_event e, long jolly);
|
||||
|
||||
public:
|
||||
THA_table_mask(const char* name) : TAutomask(name) {}
|
||||
};
|
||||
|
||||
bool THA_table_mask::on_field_event(TOperable_field &o, TField_event e, long jolly)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Applicazione generica di gestione tabelle hardy
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
// applicazione per la gestione delle tabelle di lavanderia
|
||||
class THA_table_app : public TTable_module_application
|
||||
{
|
||||
protected: // TRelation_application
|
||||
virtual TMask* user_create_mask();
|
||||
virtual int write(const TMask& m);
|
||||
virtual int rewrite(const TMask& m);
|
||||
|
||||
public:
|
||||
};
|
||||
|
||||
// Ridefinire questo metodo per le eventuali maschere speciali
|
||||
// che abbiano controlli speciali da effettuare nella on_field_event
|
||||
TMask* THA_table_app::user_create_mask()
|
||||
{
|
||||
const TString4 name = get_relation()->file(0).name();
|
||||
if (name == "???")
|
||||
return new THA_table_mask("???");
|
||||
// Le maschere normali sono gia' gestite dalla TTable_module_application
|
||||
return TTable_module_application::user_create_mask();
|
||||
}
|
||||
|
||||
|
||||
// Ridefinizione del metodo write
|
||||
int THA_table_app::write(const TMask& m)
|
||||
{
|
||||
const TString4 name = get_relation()->file(0).name();
|
||||
return TTable_module_application::write(m);
|
||||
}
|
||||
|
||||
// Ridefinizione del metodo rewrite
|
||||
int THA_table_app::rewrite(const TMask& m)
|
||||
{
|
||||
const TString4 name = get_relation()->file(0).name();
|
||||
return TTable_module_application::rewrite(m);
|
||||
}
|
||||
|
||||
|
||||
int ha0100(int argc, char* argv[])
|
||||
{
|
||||
THA_table_app a;
|
||||
a.run(argc, argv, TR("Tabella Caffe' Hardy"));
|
||||
return 0;
|
||||
}
|
161
ha/ha1300.cpp
161
ha/ha1300.cpp
@ -216,6 +216,14 @@ THardy_upload_recordset::THardy_upload_recordset(const TFilename& filename)
|
||||
add_trc_field("VC", CLI_COFI, T_X, 128, 16); //x
|
||||
|
||||
|
||||
//Tipo record RC
|
||||
//--------------
|
||||
add_trc_field("RC", "TipoRecord", T_X, 1, 2); //x
|
||||
add_trc_field("RC", "CodiceTerminale", T_N, 3, 3); //x
|
||||
add_trc_field("RC", "CodiceArticolo", T_X, 6, 5); //x
|
||||
add_trc_field("RC", "Quantita", T_Nv2N, 11, 7); //x
|
||||
add_trc_field("RC", "DataCarico", T_X, 18, 6); //x
|
||||
|
||||
TText_recordset::load_file(filename);
|
||||
}
|
||||
|
||||
@ -256,6 +264,8 @@ protected:
|
||||
//metodi di basso livello
|
||||
const TString& check_agente(TString& codice_terminale, TLog_report& log);
|
||||
const TString& check_articolo(TString& codart, TLog_report& log);
|
||||
void check_magazzino(const TString& codmag_age, TLog_report& log);
|
||||
void check_causale(TString& codcaus, TLog_report& log);
|
||||
|
||||
//metodi di alto livello
|
||||
void elabora_SU(THardy_upload_recordset& recset, TLog_report& log);
|
||||
@ -263,6 +273,7 @@ protected:
|
||||
void elabora_VC(THardy_upload_recordset& recset, TLog_report& log);
|
||||
void elabora_TF(THardy_upload_recordset& recset, TLog_report& log);
|
||||
void elabora_SI(THardy_upload_recordset& recset, TLog_report& log);
|
||||
void elabora_RC(THardy_upload_recordset& recset, TLog_report& log);
|
||||
|
||||
void elabora(const TMask& mask);
|
||||
|
||||
@ -308,6 +319,19 @@ const TString& TUpload2Campo::check_articolo(TString& codart, TLog_report& log)
|
||||
return rec_anamag.get(ANAMAG_DESCR);
|
||||
}
|
||||
|
||||
|
||||
void TUpload2Campo::check_magazzino(const TString& codmag_age, TLog_report& log)
|
||||
{
|
||||
const TString& codmag_campo = cache().get("MAG", codmag_age, "CODTAB");
|
||||
if (codmag_campo != codmag_age)
|
||||
{
|
||||
_can_write = false;
|
||||
TString msg;
|
||||
msg << "Codice magazzino " << codmag_age << " sconosciuto su Campo";
|
||||
log.log(2, msg);
|
||||
}
|
||||
}
|
||||
|
||||
void TUpload2Campo::elabora_SU(THardy_upload_recordset& recset, TLog_report& log)
|
||||
{
|
||||
const TString& cod_term = recset.get("CodiceTerminale").as_string();
|
||||
@ -340,6 +364,7 @@ void TUpload2Campo::elabora_BR(THardy_upload_recordset& recset, TLog_report& log
|
||||
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);
|
||||
check_magazzino(cod_magazzino, log);
|
||||
|
||||
const long curr_movmag = recset.get("NumeroDoc").as_int();
|
||||
const TString& str_data_mov = recset.get("DataMov").as_string();
|
||||
@ -360,7 +385,18 @@ void TUpload2Campo::elabora_BR(THardy_upload_recordset& recset, TLog_report& log
|
||||
movmag.put(MOVMAG_EXNUMDOC, curr_movmag);
|
||||
movmag.put(MOVMAG_EXDATADOC, data_mov);
|
||||
movmag.put(MOVMAG_DESCR, descr);
|
||||
//movmag.put(MOVMAG_CODCAUS, codcaus);
|
||||
|
||||
//la causale va trascodificata con l'apposita tabella &CAU
|
||||
const TString& caus_term = recset.get("CausaleMov").as_string();
|
||||
const TString& codcaus = cache().get("&CAU", caus_term, "S7");
|
||||
if (codcaus.empty())
|
||||
{
|
||||
_can_write = false;
|
||||
TString msg;
|
||||
msg << "Causale movimento " << caus_term << " non codificata";
|
||||
log.log(2, msg);
|
||||
}
|
||||
movmag.put(MOVMAG_CODCAUS, codcaus);
|
||||
|
||||
bool go_on = true;
|
||||
// righe movimento di magazzino
|
||||
@ -395,7 +431,7 @@ void TUpload2Campo::elabora_BR(THardy_upload_recordset& recset, TLog_report& log
|
||||
recset.move_prev(); //allora torna indietro di un record per riposizionarsi sull'ultimo non letto
|
||||
go_on = false;
|
||||
}
|
||||
}
|
||||
} //while(go_on)...
|
||||
|
||||
|
||||
//incredibilmente arriva in fondo
|
||||
@ -435,6 +471,7 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log
|
||||
TString4 codice_terminale = recset.get("CodiceTerminale").as_string();
|
||||
const TString& codice_agente = check_agente(codice_terminale, log);
|
||||
const TString8 codmag = cache().get(LF_AGENTI, codice_agente, AGE_CODMAG);
|
||||
check_magazzino(codmag, log);
|
||||
|
||||
//2) Testata documento
|
||||
//genera una simpatico documento di cui raccatta la chiave
|
||||
@ -544,7 +581,7 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log
|
||||
rigadoc.put(RDOC_CHECKED, "X");
|
||||
rigadoc.put(RDOC_DESCR, descr);
|
||||
|
||||
//3b) umart
|
||||
//3b) umart e qta
|
||||
const TString& umqta = recset.get(RDOC_UMQTA).as_string();
|
||||
TLocalisamfile file_umart(LF_UMART);
|
||||
file_umart.setkey(2);
|
||||
@ -560,7 +597,6 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log
|
||||
}
|
||||
rigadoc.put(RDOC_UMQTA, umqta);
|
||||
|
||||
|
||||
real qta = recset.get("Qta[int]").as_real();
|
||||
qta += recset.get("Qta[dec]").as_real() / CENTO;
|
||||
rigadoc.put(RDOC_QTA, qta);
|
||||
@ -581,7 +617,7 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log
|
||||
|
||||
rigadoc.put(RDOC_SCONTO, str_sconto);
|
||||
|
||||
|
||||
//prezzi
|
||||
real prezzo_lordo = recset.get(RDOC_PREZZO).as_real();
|
||||
prezzo_lordo /= 1000;
|
||||
rigadoc.put(RDOC_PREZZO, prezzo_lordo);
|
||||
@ -639,9 +675,119 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log
|
||||
log.log(0, "");
|
||||
}
|
||||
|
||||
|
||||
void TUpload2Campo::elabora_RC(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();
|
||||
const TString& codice_agente = check_agente(codice_terminale, log);
|
||||
const TRectype& rec_agente = cache().get(LF_AGENTI, codice_agente);
|
||||
const TString8 codmag = rec_agente.get(AGE_CODMAG);
|
||||
const long codcf = rec_agente.get_long(AGE_CODFORN); //cliente (legato all'agente)
|
||||
|
||||
//2) Testata documento
|
||||
const TString& str_datadoc = recset.get("DataCarico").as_string();
|
||||
const TDate datadoc = upload_format_date6(str_datadoc);
|
||||
const int anno = datadoc.year();
|
||||
|
||||
//2a) numerazione e tipo documento
|
||||
TConfig hardy(CONFIG_DITTA, "ha");
|
||||
const TString4 codnum = hardy.get("CarDocNum");
|
||||
const TString4 tipodoc = hardy.get("CarDoctip");
|
||||
const TString4 stato = hardy.get("CarDocSta");
|
||||
|
||||
//2b) documento vero e proprio (stessi campi del caso tipo record = TF)
|
||||
TDocumento doc;
|
||||
|
||||
doc.put(DOC_CODNUM, codnum);
|
||||
doc.put(DOC_ANNO, anno);
|
||||
doc.put(DOC_PROVV, "D");
|
||||
doc.put(DOC_TIPODOC, tipodoc);
|
||||
doc.put(DOC_STATO, stato);
|
||||
doc.put(DOC_DATADOC, datadoc);
|
||||
doc.put(DOC_TIPOCF, "C");
|
||||
doc.put(DOC_CODCF, codcf);
|
||||
|
||||
TTipo_documento td(tipodoc);
|
||||
const TString& caus_movmag = td.caus_mov();
|
||||
doc.put(DOC_CAUSMAG, caus_movmag);
|
||||
|
||||
TCli_for clifor('C', codcf);
|
||||
clifor.cli2doc(doc);
|
||||
|
||||
doc.destroy_rows();
|
||||
|
||||
// righe documento di carico
|
||||
bool go_on = true;
|
||||
//scansione delle righe documento su record RC
|
||||
while (go_on)
|
||||
{
|
||||
//3) crea le righe (legge tutti i record di tipo RC successivi)
|
||||
TRiga_documento& rigadoc = doc.new_row("01");
|
||||
|
||||
//serie delle put sulla riga documento; ricordiamo che la chiave della riga viene riempita dalla new_row
|
||||
//3a) articolo
|
||||
TString8 codart = recset.get("CodiceArticolo").as_string();
|
||||
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, descr);
|
||||
|
||||
TToken_string key_umart;
|
||||
key_umart.add(codart);
|
||||
key_umart.add(1);
|
||||
const TString& um = cache().get(LF_UMART, key_umart, UMART_UM);
|
||||
rigadoc.put(RDOC_UMQTA, um);
|
||||
|
||||
const real qta = recset.get("Quantita").as_real() / CENTO;
|
||||
rigadoc.put(RDOC_QTA, qta);
|
||||
|
||||
rigadoc.put(RDOC_CODMAG, codmag);
|
||||
|
||||
//quando non trova un RC significa che le righe sono finite!
|
||||
go_on = recset.move_next();
|
||||
|
||||
if (go_on && (recset.get("TipoRecord").as_string() != "RC"))
|
||||
{
|
||||
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 << anno << "-" << codnum << " Terminale: " << codice_terminale << " Cliente: " << codcf;
|
||||
//se può scrivere...
|
||||
if (_can_write)
|
||||
{
|
||||
int err = doc.write();
|
||||
|
||||
if (err == NOERR)
|
||||
{
|
||||
msg.insert("Registrato documento di carico: ", 0);
|
||||
log.log(0, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
msg.insert("Impossibile registrare documento di carico: ", 0);
|
||||
log.log(2, msg);
|
||||
}
|
||||
}
|
||||
else //..sennò avverte e basta
|
||||
{
|
||||
msg.insert("Controllato documento di carico: ", 0);
|
||||
log.log(0, msg);
|
||||
}
|
||||
|
||||
log.log(0, "");
|
||||
}
|
||||
|
||||
|
||||
void TUpload2Campo::elabora(const TMask& mask)
|
||||
{
|
||||
TToken_string tipi_record("SU|TF|RF|SI|BR|VC");
|
||||
TToken_string tipi_record("SU|TF|RF|SI|BR|VC|RC");
|
||||
|
||||
//creazione del filename del file da importare
|
||||
TFilename src_file = mask.get(F_PATH);
|
||||
@ -701,6 +847,9 @@ void TUpload2Campo::elabora(const TMask& mask)
|
||||
case 5: //tipo record: VC (Variazioni Cliente)
|
||||
//elabora_VC(recset, log); //non serve! gli agenti non possono immettere clienti da terminale!
|
||||
break;
|
||||
case 6: //tipo record: RC (Richiesta Carico)
|
||||
elabora_RC(recset, log);
|
||||
break;
|
||||
default: //se il tipo record non esiste nella lista dei tipi record si incazza e lo scrive!
|
||||
{
|
||||
TString msg;
|
||||
|
@ -34,6 +34,7 @@ Module = 46
|
||||
Flags = "F"
|
||||
Item_01 = "Esportazione archivi formato txt", "ha1 -1", "F"
|
||||
Item_02 = "Importazione dati da file", "ha1 -2", "F"
|
||||
Item_03 = "Tabella codifica causali", "ha0 -0 &CAU", ""
|
||||
|
||||
[HAMENU_005]
|
||||
Caption = "Servizi"
|
||||
|
5
ha/hatbcau.h
Executable file
5
ha/hatbcau.h
Executable file
@ -0,0 +1,5 @@
|
||||
//campi tabella &CAU del modulo HA
|
||||
#define F_CODICE_TERMINALE 201
|
||||
#define F_DESCR_TERMINALE 202
|
||||
#define F_CODICE_CAMPO 203
|
||||
#define F_DESCR_CAMPO 204
|
74
ha/hatbcau.uml
Executable file
74
ha/hatbcau.uml
Executable file
@ -0,0 +1,74 @@
|
||||
#include "hatbcau.h"
|
||||
|
||||
PAGE "Causali Terminalini - Campo" -1 -1 78 10
|
||||
|
||||
GROUPBOX DLG_NULL 76 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bTerminalini"
|
||||
END
|
||||
|
||||
NUMBER F_CODICE_TERMINALE 2
|
||||
BEGIN
|
||||
PROMPT 2 2 "Codice "
|
||||
FLAGS "U"
|
||||
USE &CAU
|
||||
INPUT CODTAB F_CODICE_TERMINALE
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODICE_TERMINALE CODTAB
|
||||
OUTPUT F_DESCR_TERMINALE S0
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD CODTAB
|
||||
KEY 1
|
||||
END
|
||||
|
||||
STRING F_DESCR_TERMINALE 50
|
||||
BEGIN
|
||||
PROMPT 2 3 "Descrizione "
|
||||
USE &CAU KEY 2
|
||||
INPUT S0 F_DESCR_TERMINALE
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT F_CODICE_TERMINALE
|
||||
FIELD S0
|
||||
KEY 2
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 76 4
|
||||
BEGIN
|
||||
PROMPT 1 5 "@bCampo"
|
||||
END
|
||||
|
||||
STRING F_CODICE_CAMPO 4
|
||||
BEGIN
|
||||
PROMPT 2 6 "Codice "
|
||||
FLAGS "U"
|
||||
USE %CAU
|
||||
INPUT CODTAB F_CODICE_CAMPO
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODICE_CAMPO CODTAB
|
||||
OUTPUT F_DESCR_CAMPO S0
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD S7
|
||||
END
|
||||
|
||||
STRING F_DESCR_CAMPO 50
|
||||
BEGIN
|
||||
PROMPT 2 7 "Descrizione "
|
||||
USE %CAU KEY 2
|
||||
INPUT S0 F_DESCR_CAMPO
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT F_CODICE_CAMPO
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
TOOLBAR "" 0 0 0 2
|
||||
#include "relapbar.h"
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
Loading…
x
Reference in New Issue
Block a user