diff --git a/ha/ha1300.cpp b/ha/ha1300.cpp index 5f05e6437..4ad1f94cf 100755 --- a/ha/ha1300.cpp +++ b/ha/ha1300.cpp @@ -8,6 +8,7 @@ #include "halib.h" #include "ha1300a.h" +#include "ha1301a.h" #define UPLOAD_FILE "upload.d" @@ -238,7 +239,7 @@ THardy_upload_recordset::THardy_upload_recordset(const TFilename& filename) /////////////////////////////////////////////////////////// -// TAutomask +// TAutomask : maschera principale /////////////////////////////////////////////////////////// class TUpload2Campo_mask : public TAutomask { @@ -261,6 +262,28 @@ TUpload2Campo_mask::TUpload2Campo_mask() : TAutomask ("ha1300a") set(F_PATH, path); } + +/////////////////////////////////////////////////////////// +// TAutomask : maschera secondaria per inserimento nuovo cliente +/////////////////////////////////////////////////////////// +class TUpload2Campo_newcli_mask : public TAutomask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + +public: + TUpload2Campo_newcli_mask(); +}; + +bool TUpload2Campo_newcli_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + return true; +} + +TUpload2Campo_newcli_mask::TUpload2Campo_newcli_mask() : TAutomask ("ha1301a") +{ +} + /////////////////////////////////////// // TSkeleton_application /////////////////////////////////////// @@ -362,29 +385,66 @@ void TUpload2Campo::elabora_VC(THardy_upload_recordset& recset, TLog_report& log //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 + //questa è un surrogato della get_next_cli considerando che vanno riempiti i clienti della serie 200000.. + //..prima di intaccare eventuali clienti della serie 300000 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()) + file_clifo.put(CLI_CODCF, 300000); + int err = file_clifo.read(_isgteq); + codcf = 1; + if (err == NOERR) + { + file_clifo.prev(); codcf += file_clifo.get_long(CLI_CODCF); + } - //finestra propositiva del nuovo codcf + //La finestra propositiva per ora non viene usata! + //finestra propositiva del nuovo codcf; viene proposto il codcf calcolato come ultimo + 1, ma l'utonto potrebbe.. + //..decidere di andare a riempire un qualche 'buco' precedentemente alla cazzo creato!! +/* TUpload2Campo_newcli_mask newcli_mask; + newcli_mask.set(F_CODCF, codcf); + FOR_EACH_MASK_FIELD(newcli_mask, f, fld) + { + const TFieldref* fr = fld->field(); + if (fr != NULL) + fld->set(recset.get(fr->name()).as_string()); + } + if (newcli_mask.run() == K_ENTER) + {*/ + + //aggiunge il cliente nuovo ricodificato all'array dei nuovi clienti in modo da ricordarsi chi era.. + //..quando loritroverà nei record di tipo TF,RF,SI; lo in ogni modo perchè serve anche in caso di simulazione! + const TString& str_new_codcf = recset.get("CodiceCliente").as_string(); + _nuovi_clienti.add(str_new_codcf, real(codcf)); file_clifo.zero(); file_clifo.put(CLI_TIPOCF, 'C'); file_clifo.put(CLI_CODCF, codcf); - file_clifo.write(); - //aggiunge il cliente nuovo ricodificato all'array dei nuovi clienti in modo da ricordarsi chi era.. - //..quando loritroverà nei record di tipo TF,RF,SI - const TString& str_new_codcf = recset.get("CodiceCliente").as_string(); - _nuovi_clienti.add(str_new_codcf, real(codcf)); + //ATTENZIONE!! In caso di simulazione ci si ferma qui perchè non si potrebbe inserire alcun dato, visto che.. + //_can_write è comunque falso! + if (_can_write) + file_clifo.write(); + else + { + TString msg; + msg << "Nuovo cliente con codice provvisorio: " << str_new_codcf << "da registrare in Campo con il codice: " << codcf; + log.log(0, msg); + return; + } + + /*} + else + { + _can_write = false; + TString msg; + msg << "Annullata importazione cliente " << codcf; + log.log(2, msg); + codcf = 0L; + }*/ } + //il cliente, se non nuovo, deve esistere! file_clifo.put(CLI_TIPOCF, 'C'); file_clifo.put(CLI_CODCF, codcf); @@ -409,6 +469,9 @@ void TUpload2Campo::elabora_VC(THardy_upload_recordset& recset, TLog_report& log file_clifo.put(CLI_LOCCF, localita); const TString& cap = recset.get("CAP").as_string(); file_clifo.put(CLI_CAPCF, cap); + //modo semi-intelligente per cercare il comune dato il cap e la località + const TString& codcom = cap2comune(cap, localita); + file_clifo.put(CLI_COMCF, codcom); //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(); @@ -419,11 +482,20 @@ void TUpload2Campo::elabora_VC(THardy_upload_recordset& recset, TLog_report& log file_clifo.put(CLI_COFI, cofi); //campi cfven + //prima cerca se il record di questo c+codcf esiste già sul cfven TLocalisamfile file_cfven(LF_CFVEN); file_cfven.put(CFV_TIPOCF, 'C'); file_cfven.put(CFV_CODCF, codcf); err = file_cfven.read(); - + //se non c'è lo crea! + if (err != NOERR) + { + file_cfven.zero(); + file_cfven.put(CFV_TIPOCF, 'C'); + file_cfven.put(CFV_CODCF, codcf); + err = file_cfven.write(); + } + //se la creazione non va a buon fine avverte if (err != NOERR) { _can_write = false; @@ -460,11 +532,6 @@ void TUpload2Campo::elabora_VC(THardy_upload_recordset& recset, TLog_report& log log.log(2, msg); } } - else //..sennò avverte e basta - { - msg.insert("Controllato cliente: ", 0); - log.log(0, msg); - } } @@ -645,10 +712,11 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log doc.put(DOC_TIPOCF, "C"); //se il cliente è nuovo, ovvero aggiunto in un record di tipo VC precedentemente letto,.. - //..deve stabilire quale è il suo codcf campesco già determinato + //..deve stabilire quale è il suo codcf campesco già determinato (è il caso dei codcf con *) long codcf = 0L; const TString& str_codcf = recset.get(DOC_CODCF).as_string(); - if (str_codcf.find('*' >= 0)) + const bool new_cliente = str_codcf.find('*') >= 0; + if (new_cliente) { const real* ptr = (const real*)_nuovi_clienti.objptr(str_codcf); codcf = ptr ? ptr->integer() : 0L; @@ -656,16 +724,20 @@ void TUpload2Campo::elabora_TF(THardy_upload_recordset& recset, TLog_report& log else codcf = atol(str_codcf); - TToken_string key_clifo; - key_clifo.add("C"); - key_clifo.add(codcf); - const long cliente = atol(cache().get(LF_CLIFO, key_clifo, CLI_CODCF)); - if (cliente != codcf) + //controllo effettuabile solo se il cliente è già presente (vecchio o nuovo aggiunto con la importa_VC se era _can_write) + if (!new_cliente || _can_write) { - _can_write = false; - TString msg; - msg << "Codice cliente " << codcf << " sconosciuto"; - log.log(2, msg); + TToken_string key_clifo; + key_clifo.add("C"); + key_clifo.add(codcf); + const long cliente = atol(cache().get(LF_CLIFO, key_clifo, CLI_CODCF)); + if (cliente != codcf) + { + _can_write = false; + TString msg; + msg << "Codice cliente " << codcf << " sconosciuto"; + log.log(2, msg); + } } doc.put(DOC_CODCF, codcf); diff --git a/ha/ha1301a.h b/ha/ha1301a.h new file mode 100755 index 000000000..c5aeb5c9d --- /dev/null +++ b/ha/ha1301a.h @@ -0,0 +1,11 @@ +//campi maschera immissione nuovo cliente +#define F_CODCF 201 +#define F_RAGSOC 202 +#define F_INDIRIZZO 203 +#define F_LOCALITA 204 +#define F_CAP 205 +#define F_PIVA 206 +#define F_COFI 207 +#define F_CODPAG 208 +#define F_CODLIS 209 +#define F_STR_CODCF 210 \ No newline at end of file diff --git a/ha/ha1301a.uml b/ha/ha1301a.uml new file mode 100755 index 000000000..ea2d1ef46 --- /dev/null +++ b/ha/ha1301a.uml @@ -0,0 +1,82 @@ +#include "ha1301a.h" + +PAGE "Importazione nuovo cliente da file upload" -1 -1 78 10 + +NUMBER F_CODCF 6 +BEGIN + PROMPT 1 1 "Codice Campo " + FLAGS "D" +END + +STRING F_STR_CODCF 6 +BEGIN + PROMPT 21 1 "Codice provvisorio " + FLAGS "D" + FIELD CodiceCliente +END + +STRING F_RAGSOC 34 +BEGIN + PROMPT 1 2 "Ragsoc. " + FLAGS "D" + FIELD RagioneSociale +END + +STRING F_INDIRIZZO 34 +BEGIN + PROMPT 1 3 "Indirizzo " + FLAGS "D" + FIELD Indirizzo +END + +STRING F_LOCALITA 20 +BEGIN + PROMPT 1 4 "Localita " + FLAGS "D" + FIELD Localita +END + +STRING F_CAP 5 +BEGIN + PROMPT 1 5 "C.A.P. " + FLAGS "D" + FIELD CAP +END + +STRING F_PIVA 16 +BEGIN + PROMPT 1 6 "P. IVA " + FLAGS "D" + FIELD PartitaIVA +END + +STRING F_COFI 16 +BEGIN + PROMPT 1 7 "C. Fisc. " + FLAGS "D" + FIELD CodiceFiscale +END + +STRING F_CODPAG 16 +BEGIN + PROMPT 1 8 "Cod. Pag " + FLAGS "D" + FIELD CodicePagamento +END + +STRING F_CODLIS 3 +BEGIN + PROMPT 1 9 "Listino " + FLAGS "D" + FIELD CodiceListino +END + +ENDPAGE + +TOOLBAR "topbar" 0 0 0 2 + +#include + +ENDPAGE + +ENDMASK \ No newline at end of file