Patch level : 12.00 1348

Files correlati     : ve0.exe ve0100o.msk ve1.exe

Commento:

Trasformazione clienti occasionali in normali
This commit is contained in:
Alessandro Bonazzi 2024-09-04 00:00:06 +02:00
parent eef0f50876
commit 5d75fbb8ab
5 changed files with 228 additions and 54 deletions

View File

@ -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

View File

@ -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 "

View File

@ -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();

View File

@ -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 );

View File

@ -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( );
}