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);
return true;
}
bool codfase_handler(TMask_field& f, KEY key)
{
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();
@ -2935,14 +2936,16 @@ bool codfase_handler(TMask_field& f, KEY key)
if (req && f.empty())
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)
{
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();
@ -2952,162 +2955,162 @@ bool codcdc_handler(TMask_field& f, KEY key)
if (f.empty() && req)
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)
{
if (!f.to_check(key, true))
return true;
TDocumento_mask& mask = (TDocumento_mask&)f.mask();
TDocumento_mask& mask = (TDocumento_mask&)f.mask();
if (f.dlg() < mask.cms_end())
return true; // 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)
if (key == K_TAB && f.focusdirty() && f.empty() && f.dlg() == mask.cms_end()) // Opera solo sull'ultimo livello del codice commessa
return true;
if ((f.running_check(key) || key == K_ENTER) && f.dlg() == mask.cms_end()) // Opera solo sull'ultimo livello del codice commessa
{
// Controlla se c'e' la gestione dei centri di costo al secondo livello
if (mask.codcms() != codcms)
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 ((key == K_TAB && f.focusdirty()))
{
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 (req)
return f.error_box(TR("La commessa è obbligatoria per questo tipo documento"));
else
return true;
}
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& curr_cms = ((TEdit_field&)f).browse()->cursor()->curr();
const TString80 codcms = curr_cms.get(COMMESSE_CODCMS);
mask.set(F_CMSH, codcms);
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")
if ((key == K_TAB && f.focusdirty()) || key == K_ENTER)
{
// Controlla se c'e' la gestione dei centri di costo al secondo livello
if (mask.codcms() != codcms)
{
key.add(codcms);
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())
if ((key == K_TAB && f.focusdirty()))
{
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(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);
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
{
mask.set(F_CUP, cfcms1.get(CFCMS_CUP), 3);
mask.set(F_CIG, cfcms1.get(CFCMS_CIG), 3);
}
}
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);
key.add(codcms);
key.add(mask.get(F_TIPOCF));
key.add(mask.get(F_CODCF));
const TRectype & cfcms1 = __cfcm.get(key);
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.add(codcms);
key.add(mask.get(F_TIPOCF));
key.add(mask.get(F_CODCF));
key.add("V");
key.add(nrigaban);
const TRectype & cfban = cache().get(LF_CFBAN, key);
const TRectype & cfcms1 = __cfcm.get(key);
const int nrigaban = cfcms1.get_int(CFCMS_NRIGABAN);
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) && (...
if (nrigaban > 0)
{
key.cut(0);
key.add(mask.get(F_TIPOCF));
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
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())
mask.codcms() = mask.doc().get(DOC_CODCMS);
}
return true;
}
@ -3401,11 +3403,7 @@ bool datafcomp_handler(TMask_field& f, KEY key)
// Gestione note articolo
///////////////////////////////////////////////////////////
#if 0 && (_MSC_VER > 1300) // Dalla versione 10.x
#define NAR_TABLE "&VENAR"
#else // Versione 3.x
#define NAR_TABLE "NAR"
#endif
class TNar_mask : public TAutomask
{