Patch level : 12.00 1370

Files correlati     : ve0.exe
Bug                 :

Commento:
L'obbigatorieta dei campi di analitica viene contrllata in fase di registrazione
This commit is contained in:
Alessandro Bonazzi 2025-02-04 21:11:58 +01:00
parent 4880af2699
commit 818d4ec7ae

View File

@ -2919,12 +2919,13 @@ bool cdc_mag_handler(TMask_field& f, KEY key)
ca_mag_handler(f); ca_mag_handler(f);
return true; return true;
} }
bool codfase_handler(TMask_field& f, KEY key) bool codfase_handler(TMask_field& f, KEY key)
{ {
TDocumento_mask& mask = (TDocumento_mask&)f.mask(); TDocumento_mask& mask = (TDocumento_mask&)f.mask();
if (f.to_check(key, true) && f.dlg() == mask.fsc_end()) if (key == K_TAB && f.focusdirty() && f.empty() && f.dlg() == mask.fsc_end()) // Opera solo sull'ultimo livello del codice fase
return true;
if ((f.running_check(key) || key == K_ENTER) && f.dlg() == mask.fsc_end()) // Opera solo sull'ultimo livello del codice fase
{ {
mask.mask2doc(); mask.mask2doc();
@ -2935,14 +2936,16 @@ bool codfase_handler(TMask_field& f, KEY key)
if (req && f.empty()) if (req && f.empty())
return f.error_box(TR("La fase è obbligatoria per questo tipo documento")); return f.error_box(TR("La fase è obbligatoria per questo tipo documento"));
} }
return true; // Opera solo sull'ultimo livello del codice commessa return true;
} }
bool codcdc_handler(TMask_field& f, KEY key) bool codcdc_handler(TMask_field& f, KEY key)
{ {
TDocumento_mask& mask = (TDocumento_mask&)f.mask(); TDocumento_mask& mask = (TDocumento_mask&)f.mask();
if (f.to_check(key, true) && f.dlg() == mask.cdc_end()) if (key == K_TAB && f.focusdirty() && f.empty() && f.dlg() == mask.cdc_end()) // Opera solo sull'ultimo livello del codice centro di costo
return true;
if ((f.running_check(key) || key == K_ENTER) && f.dlg() == mask.cdc_end()) // Opera solo sull'ultimo livello del codice centro di costo
{ {
mask.mask2doc(); mask.mask2doc();
@ -2952,162 +2955,162 @@ bool codcdc_handler(TMask_field& f, KEY key)
if (f.empty() && req) if (f.empty() && req)
return f.error_box(TR("Il centro di costo è obbligatorio per questo tipo documento")); return f.error_box(TR("Il centro di costo è obbligatorio per questo tipo documento"));
} }
return true; // Opera solo sull'ultimo livello del codice commessa return true;
} }
bool codcms_handler(TMask_field& f, KEY key) bool codcms_handler(TMask_field& f, KEY key)
{ {
if (!f.to_check(key, true)) TDocumento_mask& mask = (TDocumento_mask&)f.mask();
return true;
TDocumento_mask& mask = (TDocumento_mask&)f.mask(); if (key == K_TAB && f.focusdirty() && f.empty() && f.dlg() == mask.cms_end()) // Opera solo sull'ultimo livello del codice commessa
if (f.dlg() < mask.cms_end()) return true;
return true; // Opera solo sull'ultimo livello del codice commessa if ((f.running_check(key) || key == K_ENTER) && f.dlg() == mask.cms_end()) // Opera solo sull'ultimo livello del codice commessa
mask.mask2doc();
TDocumento& doc = mask.doc();
TSheet_field& sf = mask.sfield(F_SHEET);
const bool req = doc.valid() && doc.tipo().head_ca_required();
if (f.empty())
{
if (req)
return f.error_box(TR("La commessa è obbligatoria per questo tipo documento"));
else
return true;
}
const TRectype& curr_cms = ((TEdit_field&)f).browse()->cursor()->curr();
const TString80 codcms = curr_cms.get(COMMESSE_CODCMS);
mask.set(F_CMSH, codcms);
if ((key == K_TAB && f.focusdirty()) || key == K_ENTER)
{ {
// Controlla se c'e' la gestione dei centri di costo al secondo livello mask.mask2doc();
if (mask.codcms() != codcms)
TDocumento& doc = mask.doc();
TSheet_field& sf = mask.sfield(F_SHEET);
const bool req = doc.valid() && doc.tipo().head_ca_required();
if (f.empty())
{ {
if ((key == K_TAB && f.focusdirty())) if (req)
{ return f.error_box(TR("La commessa è obbligatoria per questo tipo documento"));
const TTipo_cms_check t = mask.doc().tipo().tipo_cms_check(); else
bool chiusa = (t != _nessuno) && curr_cms.get_bool(COMMESSE_CHIUSA); return true;
if (chiusa && curr_cms.get_bool(COMMESSE_PROROGA))
chiusa = mask.get_date(F_DATADOC) > curr_cms.get_date(COMMESSE_DATAPROR);
if (chiusa)
return (t == _bloccante) ? f.error_box(FR("La commessa %s è chiusa "), (const char*)codcms) : f.yesno_box(FR("La commessa chiusa %s, vuoi utilizzarla"), (const char*)codcms);
}
doc.put(DOC_CODCMS, codcms);
FOR_EACH_PHYSICAL_RDOC(doc, r, riga)
{
const TMask& m = sf.sheet_row_mask(r -1);
if (m.id2pos(FR_TIPODET) >= 0 && m.field(FR_TIPODET).active()) //solo se attivo il campo di indetraibilita'...
{
riga->cms2tipodet();
riga->autoload(sf);
sf.force_update(r - 1);
}
}
} }
if (mask.cdc_start() > 0 && mask.cdc_start() > mask.cms_start()) // && mask.codcms() != codcms) const TRectype& curr_cms = ((TEdit_field&)f).browse()->cursor()->curr();
{ const TString80 codcms = curr_cms.get(COMMESSE_CODCMS);
mask.codcms() = codcms; mask.set(F_CMSH, codcms);
const TString codcosto = curr_cms.get(COMMESSE_CODCOSTO);
if (codcosto.full()) // Propone centro di costo solo se specificato
{
for (short i = mask.cdc_start(); i <= mask.cdc_end(); i++)
{
TEdit_field & e = mask.efield(i);
const TFieldref * f = e.field();
if (f != NULL)
{
const int from = f->from();
const int to = f->to();
mask.set(i, codcosto.sub(from, to), 0x2);
}
}
}
if ((key == K_TAB && f.focusdirty()) && !doc.bloccato())
{
char name[8] = "CODSP0";
TString_array spese;
const TRectype& ven_rec = doc.clifor().vendite(); if ((key == K_TAB && f.focusdirty()) || key == K_ENTER)
for (int i = 1; i <= 4; i++) {
{ // Controlla se c'e' la gestione dei centri di costo al secondo livello
name[5] = '0' + i; if (mask.codcms() != codcms)
const TString& s = ven_rec.get(name);
if (s.full())
spese.add(s);
}
mask.mask2doc();
doc.zero(DOC_SPESEUPD);
doc.update_spese_aut(spese, false, &mask.sfield(F_SHEET));
mask.update_cartacei();
}
}
if ((main_app().has_module(CTAUT, CHK_DONGLE) || main_app().has_module(PAAUT, CHK_DONGLE)) && (key == K_TAB && f.focusdirty()))
{
TToken_string key;
static TRecord_cache __cfcm(LF_CFCMS, 4);
if (mask.get(F_TIPOCF) != "C")
{ {
key.add(codcms); if ((key == K_TAB && f.focusdirty()))
key.add("C");
key.add(1);
const TRectype& cfcms = cache().get(LF_CFCMS, key);
mask.set(F_CUP, cfcms.get(CFCMS_CUP), 3);
mask.set(F_CIG, cfcms.get(CFCMS_CIG), 3);
}
else
{
key.add(codcms);
key.add(mask.get(F_TIPOCF));
key.add(mask.get(F_CODCF));
const TRectype & cfcms1 = __cfcm.get(key);
if (cfcms1.empty())
{ {
key = codcms; const TTipo_cms_check t = mask.doc().tipo().tipo_cms_check();
bool chiusa = (t != _nessuno) && curr_cms.get_bool(COMMESSE_CHIUSA);
if (chiusa && curr_cms.get_bool(COMMESSE_PROROGA))
chiusa = mask.get_date(F_DATADOC) > curr_cms.get_date(COMMESSE_DATAPROR);
if (chiusa)
return (t == _bloccante) ? f.error_box(FR("La commessa %s è chiusa "), (const char*)codcms) : f.yesno_box(FR("La commessa chiusa %s, vuoi utilizzarla"), (const char*)codcms);
}
doc.put(DOC_CODCMS, codcms);
FOR_EACH_PHYSICAL_RDOC(doc, r, riga)
{
const TMask& m = sf.sheet_row_mask(r -1);
if (m.id2pos(FR_TIPODET) >= 0 && m.field(FR_TIPODET).active()) //solo se attivo il campo di indetraibilita'...
{
riga->cms2tipodet();
riga->autoload(sf);
sf.force_update(r - 1);
}
}
}
if (mask.cdc_start() > 0 && mask.cdc_start() > mask.cms_start()) // && mask.codcms() != codcms)
{
mask.codcms() = codcms;
const TString codcosto = curr_cms.get(COMMESSE_CODCOSTO);
if (codcosto.full()) // Propone centro di costo solo se specificato
{
for (short i = mask.cdc_start(); i <= mask.cdc_end(); i++)
{
TEdit_field & e = mask.efield(i);
const TFieldref * f = e.field();
if (f != NULL)
{
const int from = f->from();
const int to = f->to();
mask.set(i, codcosto.sub(from, to), 0x2);
}
}
}
if ((key == K_TAB && f.focusdirty()) && !doc.bloccato())
{
char name[8] = "CODSP0";
TString_array spese;
const TRectype& ven_rec = doc.clifor().vendite();
for (int i = 1; i <= 4; i++)
{
name[5] = '0' + i;
const TString& s = ven_rec.get(name);
if (s.full())
spese.add(s);
}
mask.mask2doc();
doc.zero(DOC_SPESEUPD);
doc.update_spese_aut(spese, false, &mask.sfield(F_SHEET));
mask.update_cartacei();
}
}
if ((main_app().has_module(CTAUT, CHK_DONGLE) || main_app().has_module(PAAUT, CHK_DONGLE)) && (key == K_TAB && f.focusdirty()))
{
TToken_string key;
static TRecord_cache __cfcm(LF_CFCMS, 4);
if (mask.get(F_TIPOCF) != "C")
{
key.add(codcms);
key.add("C"); key.add("C");
key.add(1); key.add(1);
const TRectype & cfcms2 = cache().get(LF_CFCMS, key); const TRectype& cfcms = cache().get(LF_CFCMS, key);
mask.set(F_CUP, cfcms.get(CFCMS_CUP), 3);
mask.set(F_CUP, cfcms2.get(CFCMS_CUP), 3); mask.set(F_CIG, cfcms.get(CFCMS_CIG), 3);
mask.set(F_CIG, cfcms2.get(CFCMS_CIG), 3);
} }
else else
{ {
mask.set(F_CUP, cfcms1.get(CFCMS_CUP), 3); key.add(codcms);
mask.set(F_CIG, cfcms1.get(CFCMS_CIG), 3); key.add(mask.get(F_TIPOCF));
} key.add(mask.get(F_CODCF));
} const TRectype & cfcms1 = __cfcm.get(key);
key.cut(0);
key.add(codcms);
key.add(mask.get(F_TIPOCF));
key.add(mask.get(F_CODCF));
const TRectype & cfcms1 = __cfcm.get(key);
const int nrigaban = cfcms1.get_int(CFCMS_NRIGABAN);
if (nrigaban > 0) if (cfcms1.empty())
{ {
key = codcms;
key.add("C");
key.add(1);
const TRectype & cfcms2 = cache().get(LF_CFCMS, key);
mask.set(F_CUP, cfcms2.get(CFCMS_CUP), 3);
mask.set(F_CIG, cfcms2.get(CFCMS_CIG), 3);
}
else
{
mask.set(F_CUP, cfcms1.get(CFCMS_CUP), 3);
mask.set(F_CIG, cfcms1.get(CFCMS_CIG), 3);
}
}
key.cut(0); key.cut(0);
key.add(codcms);
key.add(mask.get(F_TIPOCF)); key.add(mask.get(F_TIPOCF));
key.add(mask.get(F_CODCF)); key.add(mask.get(F_CODCF));
key.add("V");
key.add(nrigaban); const TRectype & cfcms1 = __cfcm.get(key);
const int nrigaban = cfcms1.get_int(CFCMS_NRIGABAN);
const TRectype & cfban = cache().get(LF_CFBAN, key);
mask.set(mask.field(F_CODABIA).active() ? F_CODABIA : F_CODABIA1, cfban.get(CFBAN_ABI), 3); if (nrigaban > 0)
mask.set(mask.field(F_CODCABA).active() ? F_CODCABA : F_CODCABA1, cfban.get(CFBAN_CAB), 3); {
mask.set(F_IBAN, cfban.get(CFBAN_IBAN)); key.cut(0);
} key.add(mask.get(F_TIPOCF));
} //if (main_app().has_module(CTAUT) && (... key.add(mask.get(F_CODCF));
key.add("V");
key.add(nrigaban);
const TRectype & cfban = cache().get(LF_CFBAN, key);
mask.set(mask.field(F_CODABIA).active() ? F_CODABIA : F_CODABIA1, cfban.get(CFBAN_ABI), 3);
mask.set(mask.field(F_CODCABA).active() ? F_CODCABA : F_CODCABA1, cfban.get(CFBAN_CAB), 3);
mask.set(F_IBAN, cfban.get(CFBAN_IBAN));
}
} //if (main_app().has_module(CTAUT) && (...
}
//aggiornamento automatico del campo codice contabilita' separata nel caso di commessa che ce lo abbia //aggiornamento automatico del campo codice contabilita' separata nel caso di commessa che ce lo abbia
if (mask.id2pos(F_CONTSEP) >= 0 && main_app().has_module(NPAUT, CHK_DONGLE) && mask.get(F_CONTSEP).full() && f.running_check(key)) if (mask.id2pos(F_CONTSEP) >= 0 && main_app().has_module(NPAUT, CHK_DONGLE) && mask.get(F_CONTSEP).full() && f.running_check(key))
@ -3122,7 +3125,6 @@ bool codcms_handler(TMask_field& f, KEY key)
if (key == K_TAB && !mask.is_running()) if (key == K_TAB && !mask.is_running())
mask.codcms() = mask.doc().get(DOC_CODCMS); mask.codcms() = mask.doc().get(DOC_CODCMS);
} }
return true; return true;
} }
@ -3401,11 +3403,7 @@ bool datafcomp_handler(TMask_field& f, KEY key)
// Gestione note articolo // Gestione note articolo
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
#if 0 && (_MSC_VER > 1300) // Dalla versione 10.x
#define NAR_TABLE "&VENAR" #define NAR_TABLE "&VENAR"
#else // Versione 3.x
#define NAR_TABLE "NAR"
#endif
class TNar_mask : public TAutomask class TNar_mask : public TAutomask
{ {