From 5d75fbb8ab1a10fca691056c0d78e9c09aa2c076 Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Wed, 4 Sep 2024 00:00:06 +0200 Subject: [PATCH] Patch level : 12.00 1348 Files correlati : ve0.exe ve0100o.msk ve1.exe Commento: Trasformazione clienti occasionali in normali --- src/ve/ve0100o.h | 3 + src/ve/ve0100o.uml | 40 +++++++- src/ve/ve1300.cpp | 8 +- src/ve/velib.h | 2 - src/ve/velib06.cpp | 229 ++++++++++++++++++++++++++++++++++++--------- 5 files changed, 228 insertions(+), 54 deletions(-) diff --git a/src/ve/ve0100o.h b/src/ve/ve0100o.h index 1b7c347b3..2f6f6d706 100755 --- a/src/ve/ve0100o.h +++ b/src/ve/ve0100o.h @@ -30,5 +30,8 @@ #define O_TEL2 125 #define O_PTEL3 126 #define O_TEL3 127 +#define O_TIPOCF 128 +#define O_CODCF 129 +#define O_AGGCF 130 #endif diff --git a/src/ve/ve0100o.uml b/src/ve/ve0100o.uml index 2ae86ce8b..4f130070a 100755 --- a/src/ve/ve0100o.uml +++ b/src/ve/ve0100o.uml @@ -4,12 +4,12 @@ TOOLBAR "topbar" 0 0 0 2 BUTTON DLG_OK 10 2 BEGIN - PROMPT -12 -1 "" + PROMPT -13 -1 "" END BUTTON DLG_CANCEL 10 2 BEGIN - PROMPT -22 -1 "" + PROMPT -33 -1 "" END ENDPAGE @@ -179,7 +179,7 @@ BEGIN INPUT CODTAB O_STATONAS COPY DISPLAY O_STATO OUTPUT O_STATONAS CODTAB - //CHECKTYPE NORMAL + CHECKTYPE NORMAL END STRING O_COMUNENAS 4 @@ -286,6 +286,40 @@ BEGIN HELP "Numero telefonico terzo recapito" END +BUTTON DLG_ELABORA 12 2 +BEGIN + PROMPT 2 22 "Crea Cliente" +END + +LIST O_TIPOCF 1 12 +BEGIN + PROMPT 17 22 "Tipo " + ITEM " |Nessuno" + ITEM "C|Cliente" + ITEM "F|Fornitore" + FLAGS "D" +END + +NUMBER O_CODCF 6 +BEGIN + PROMPT 41 22 "Codice " + USE LF_CLIFO + INPUT TIPOCF O_TIPOCF SELECT + INPUT CODCF O_CODCF + DISPLAY "Codice" CODCF + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Partita IVA@12" PAIV + DISPLAY "Partita IVA@16" COFI + OUTPUT O_TIPOCF TIPOCF + OUTPUT O_CODCF CODCF + CHECKTYPE NORMAL +END + +BOOLEAN O_AGGCF +BEGIN + PROMPT 17 23 "Aggiorna dati cliente" +END + STRING DLG_NULL 50 32 BEGIN PROMPT 1 -1 "Ultimo aggiornamento " diff --git a/src/ve/ve1300.cpp b/src/ve/ve1300.cpp index 4f04cdf74..d63c45687 100755 --- a/src/ve/ve1300.cpp +++ b/src/ve/ve1300.cpp @@ -1441,17 +1441,15 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool final_ if (docs > 0) { const bool mail_requested = (mode == out_mail || mode == out_signed_mail); - TProgress_monitor pi(docs, TR("Elaborazione documenti...")); + TProgind pi(docs, TR("Elaborazione documenti...")); + for (short loop = mail_requested ? 0 : 1; loop < 2; loop++) { const bool mail_loop = (loop == 0); const bool print_loop = !mail_loop; - for (int i = 0; i < docs; i++) + for (int i = 0; pi.addstatus() && i < docs; i++) { - if (!pi.add_status()) - break; - doc.move_to(i); const TString4 tipodoc = doc.get(DOC_TIPODOC).as_string(); diff --git a/src/ve/velib.h b/src/ve/velib.h index 153d56c62..7692f2442 100755 --- a/src/ve/velib.h +++ b/src/ve/velib.h @@ -1201,8 +1201,6 @@ public: static bool universal_handler( TMask_field& f, KEY key); static bool occas_handler( TMask_field& f, KEY key ); - static bool occas_code_handler( TMask_field& f, KEY key ); - static bool occas_cfpi_handler( TMask_field& f, KEY key ); static bool clifo_handler( TMask_field& f, KEY key ); static bool print_handler( TMask_field& f, KEY key ); static bool elabora_handler( TMask_field& f, KEY key ); diff --git a/src/ve/velib06.cpp b/src/ve/velib06.cpp index c33bb9579..f4f0a9bf1 100755 --- a/src/ve/velib06.cpp +++ b/src/ve/velib06.cpp @@ -2280,36 +2280,87 @@ TMask* TDocumento_mask::ss_getmask(int numriga, TMask& fullmask) return &fullmask; } -bool TDocumento_mask::occas_code_handler(TMask_field& f, KEY key) +class TOccas_mask : public TAutomask { - TMask& m = f.mask(); - if (key == K_TAB && (f.dirty() || !m.is_running())) - { - const TString& code = f.get(); - if (code.full()) - { - TRelation occas(LF_OCCAS); - occas.curr().put(OCC_CFPI, code); - if (occas.read(_isequal) == NOERR) - { - m.autoload(occas); - m.send_key(K_TAB, O_COMUNE); // Forza decodifica comuni - m.send_key(K_TAB, O_COMUNENAS); - } - } - } - return true; -} + TDocumento_mask & _docmask; -bool TDocumento_mask::occas_cfpi_handler(TMask_field& f, KEY key) + protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; + + public: + TOccas_mask(TDocumento_mask & m) : TAutomask("ve0100o"), _docmask(m) { } +}; + +bool TOccas_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { - if (key == K_ENTER) - { - const TMask& om = f.mask(); - if (om.field(O_COFI).empty() && om.field(O_PAIV).empty()) - return f.error_box(TR("E' necessario specificare il codice fiscale o la partita IVA")); - } - return true; + switch (o.dlg()) + { + case O_CODICE: + { + if (e == fe_modify) + { + const TString& code = o.get(); + + if (code.full()) + { + TRelation occas(LF_OCCAS); + occas.curr().put(OCC_CFPI, code); + if (occas.read(_isequal) == NOERR) + { + autoload(occas); + field(O_BYMAIL).on_hit();; + send_key(K_TAB, O_COMUNE); // Forza decodifica comuni + send_key(K_TAB, O_COMUNENAS); + } + } + } + return true; + } + break; + case O_COFI: + case O_PAIV: + if (e == fe_close) + { + if (field(O_COFI).empty() && field(O_PAIV).empty()) + return error_box(TR("E' necessario specificare il codice fiscale o la partita IVA")); + } + break; + case DLG_ELABORA: + if (e == fe_button) + { + TToken_string key(get(O_TIPOCF)); + + key.add(get(O_COFI)); + + const TRectype & cfcofi = cache().get(LF_CLIFO, key, 4); + + set(O_AGGCF, true); + if (get(O_COFI).full() && cfcofi.full()) + { + clear(O_AGGCF); + set(O_CODCF, cfcofi.get(CLI_CODCF)); + } + else + { + if (get(O_PAIV).full()) + { + key = get(O_TIPOCF); + key.add(get(O_STATOPAIV)); + key.add(get(O_PAIV)); + + const TRectype & cfpaiv = cache().get(LF_CLIFO, key, 5); + + if (cfpaiv.full()) + { + clear(O_AGGCF); + set(O_CODCF, cfcofi.get(CLI_CODCF)); + } + } + } + } + break; + } + return true; } bool TDocumento_mask::occas_handler( TMask_field& f, KEY key ) @@ -2319,41 +2370,131 @@ bool TDocumento_mask::occas_handler( TMask_field& f, KEY key ) { TDocumento& doc = m.doc(); TOccasionale& occ = doc.occas(); - - TMask occas_mask("ve0100o"); - occas_mask.set_handler(O_CODICE, occas_code_handler ); - occas_mask.set_handler(O_COFI, occas_cfpi_handler ); - occas_mask.set_handler(O_PAIV, occas_cfpi_handler ); + TOccas_mask occas_mask(m); for (int i = occas_mask.fields() - 1; i >= 0; i--) { TMask_field& f = occas_mask.fld(i); const TFieldref* c = f.field(); + if (c) f.set(c->read(occ)); } const TString& cf = occas_mask.get(O_COFI); + if (cf.full() && atoi(cf.mid(9, 2)) > 40) occas_mask.set(O_SESSO, "F"); + occas_mask.set(O_TIPOCF, m.doc().get(DOC_TIPOCF)); if (occas_mask.run() != K_ESC) { - const TString ocfpi(occas_mask.get(O_CODICE)); - doc.put(DOC_OCFPI, ocfpi); - m.set(F_OCFPI, ocfpi); - - for (int i = occas_mask.fields() - 1; i >= 0; i--) + long codcf = occas_mask.get_long(O_CODCF); + + if (codcf != 0L || occas_mask.get_bool(O_AGGCF)) { - const TMask_field& f = occas_mask.fld(i); - const TFieldref* c = f.field(); - if (c) + TRectype clifor(LF_CLIFO); + + if (codcf == 0L) { - const char* val = f.get(); - c->write(val, occ); - } + clifor.put(CLI_TIPOCF, doc.get(DOC_TIPOCF)); + TCursor clifo(new TRelation(LF_CLIFO), "", 1, &clifor, &clifor); + const int items = clifo.items(); + + if (items > 0L) + codcf = clifo.last().get_long(CLI_CODCF); + codcf++; + clifor.zero(); + clifor.put(CLI_TIPOCF, doc.get(DOC_TIPOCF)); + clifor.put(CLI_CODCF, codcf); + + const int err = clifor.write(); + + if (err != NOERR) + return error_box(FR("Errore in creazione %s %ld n. %d"), doc.get(DOC_TIPOCF) == "C" ? "Cliente" : "Fornitore", codcf, err); + } + else + { + TToken_string key(doc.get(DOC_TIPOCF)); + + key.add(codcf); + + clifor = (TRectype &)cache().get(LF_CLIFO, key); + + if (clifor.empty()) + { + clifor.zero(); + clifor.put(CLI_TIPOCF, doc.get(DOC_TIPOCF)); + clifor.put(CLI_CODCF, codcf); + } + } + clifor.put(CLI_RAGSOC, occas_mask.get(O_RAGSOC)); + clifor.put(CLI_STATOCF, occas_mask.get(O_STATO)); + clifor.put(CLI_COMCF, occas_mask.get(O_COMUNE)); + clifor.put(CLI_CAPCF, occas_mask.get(O_CAP)); + clifor.put(CLI_INDCF, occas_mask.get(O_INDIRIZZO)); + clifor.put(CLI_CIVCF, occas_mask.get(O_NUMERO)); + clifor.put(CLI_COFI, occas_mask.get(O_COFI)); + clifor.put(CLI_STATOPAIV, occas_mask.get(O_STATOPAIV)); + clifor.put(CLI_PAIV, occas_mask.get(O_PAIV)); + clifor.put(CLI_SESSO, occas_mask.get(O_SESSO)); + clifor.put(CLI_DATANASC, occas_mask.get(O_DATANAS)); + clifor.put(CLI_STATONASC, occas_mask.get(O_STATONAS)); + clifor.put(CLI_COMNASC, occas_mask.get(O_COMUNENAS)); + clifor.put(CLI_LOCCF, occas_mask.get(O_LOCALITA)); + clifor.put(CLI_REFERENTE, occas_mask.get(O_REFERENTE)); + clifor.put(CLI_BYMAIL, occas_mask.get(O_BYMAIL)); + clifor.put(CLI_MAIL, occas_mask.get(O_MAIL)); + clifor.put(CLI_DOCMAIL, occas_mask.get(O_DOCMAIL)); + clifor.put(CLI_PEC, occas_mask.get(O_PEC)); + clifor.put(CLI_PTEL, occas_mask.get(O_PTEL)); + clifor.put(CLI_TEL, occas_mask.get(O_TEL)); + clifor.put(CLI_PTEL2, occas_mask.get(O_PTEL2)); + clifor.put(CLI_TEL2, occas_mask.get(O_TEL2)); + clifor.put(CLI_PTEL3, occas_mask.get(O_PTEL3)); + clifor.put(CLI_TEL3, occas_mask.get(O_TEL3)); + + const int err = clifor.rewrite(); + + if (err == NOERR) + { + const TString pag = m.get(F_CODPAG); + + m.set(F_CODCF, (long)codcf, 0x3); + m.set(F_CODPAG, pag, 0x3); + } + else + return error_box(FR("Errore in creazione aggiornamento %s %ld n. %d"), doc.get(DOC_TIPOCF) == "C" ? "Cliente" : "Fornitore", codcf, err); + + TLocalisamfile occ(LF_OCCAS); + + occ.put(OCC_CFPI, occas_mask.get(O_CODICE)); + occ.remove(); + } + else + { + const TString ocfpi(occas_mask.get(O_CODICE)); + + doc.put(DOC_OCFPI, ocfpi); + m.set(F_OCFPI, ocfpi); + + for (int i = occas_mask.fields() - 1; i >= 0; i--) + { + const TMask_field& f = occas_mask.fld(i); + const TFieldref* c = f.field(); + + if (c) + { + const char* val = f.get(); + c->write(val, occ); + } + } + +/* int err = occ.rewrite(); + + if (err != NOERR) + error_box(FR("Errore %d"), err);*/ } - m.occ2mask(); } f.set_focus( ); }