Correzione gestione contratti di nolo

git-svn-id: svn://10.65.10.50/branches/R_10_00@22904 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2013-12-13 09:30:06 +00:00
parent 735f648bbb
commit 530c414206
4 changed files with 54 additions and 47 deletions

View File

@ -68,43 +68,10 @@ bool THardy_elab_docs_mask::on_field_event(TOperable_field& o, TField_event e, l
case F_ADATA:
if ((e == fe_close || e == fe_modify) && !o.empty())
{
TDate d = o.get();
if (d.ok())
{
bool changed = false;
const int tc = get_int(F_TIPOCONTR);
if (tc != 8) // Non è nolo
{
const int m = d.month();
const int r = m % 3;
if (r != 0)
{
d.set_month(m + 3 - r);
changed = true;
}
}
else
{
TDate da_data = d;
da_data.set_day(1);
set(F_DADATA, da_data);
}
if (!d.is_end_month())
{
d.set_end_month();
changed = true;
}
if (changed)
o.set(d.string());
if (e == fe_close)
{
const TDate dal = get(F_DADATA);
if (dal.ok() && dal.year() != d.year())
return error_box(TR("Le date devono appartenere allo stesso anno!"));
}
}
const TDate al = o.get();
const TDate dal = get(F_DADATA);
if (dal.ok() && dal.year() != al.year())
return error_box(TR("Le date devono appartenere allo stesso anno!"));
}
break;
//in caso di elaborazione definitiva è obbligatorio..
@ -464,6 +431,7 @@ int THardy_elab_docs::month_diff(const TDate& inizio, const TDate& fine) const
bool THardy_elab_docs::aggiorna_contratto(const TRiga_documento& rdoc, TContratto_premi& contratto, TLog_report& log)
{
bool elaborato = false;
const bool definitivo = rdoc.get_char(RDOC_PROVV) == 'D';
const char tipo_contratto = contratto.tipo_contratto();
//parametri della riga fattura
TString80 rdoc_codart = rdoc.get(RDOC_CODART); rdoc_codart.trim();
@ -493,10 +461,13 @@ bool THardy_elab_docs::aggiorna_contratto(const TRiga_documento& rdoc, TContratt
//cerca una riga anticipo da evadere sul contratto per aggiornare la somma restituita sull'anticipo
if (rigacontratto->is_spese())
{
//la somma restituita deve essere incrementata per la qta di merce (caffè) che c'è sulla riga della fattura in esame...
//..moltiplicata per il premio che c'è nella riga di tipo merce del contratto in esame
const real reso = normalized_rdoc_qta * rigamerce_premio;
rigacontratto->add(RCA_2_RESO_CORRENTE, reso);
if (definitivo) // Non scrivo aaggiornamenti provvisori
{
//la somma restituita deve essere incrementata per la qta di merce (caffè) che c'è sulla riga della fattura in esame...
//..moltiplicata per il premio che c'è nella riga di tipo merce del contratto in esame
const real reso = normalized_rdoc_qta * rigamerce_premio;
rigacontratto->add(RCA_2_RESO_CORRENTE, reso);
}
elaborato = true;
break;
}
@ -508,8 +479,11 @@ bool THardy_elab_docs::aggiorna_contratto(const TRiga_documento& rdoc, TContratt
if (rigamerce->is_merce())
{
const real bonus = normalized_rdoc_qta * rigamerce_premio;
rigamerce->add(RC_1_BONUS, bonus);
rigamerce->add(RDOC_QTA, normalized_rdoc_qta); //riscrive sul campo di appoggio del contratto
if (definitivo) // Non scrivo aaggiornamenti provvisori
{
rigamerce->add(RC_1_BONUS, bonus);
rigamerce->add(RDOC_QTA, normalized_rdoc_qta); //riscrive sul campo di appoggio del contratto
}
elaborato = true;
TString msg;
@ -541,8 +515,7 @@ bool THardy_elab_docs::deve_generare_nac(const TContratto_premi& contratto, cons
return yes;
}
//aggiorna, in base al documento in esame curr_doc, le somme restituite nelle righe di tipo verigh02 nei contratti validi..
//..del cliente
//aggiorna, in base al documento in esame curr_doc, le somme restituite nelle righe di tipo verigh02 nei contratti validi
word THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente, const TDate& data_fine, TLog_report& log)
{
const TDate datadoc = curr_doc.get(DOC_DATADOC);

View File

@ -406,6 +406,7 @@ TFatture_recordset::TFatture_recordset(bool nuovo)
class THardy_esselunga_fat : public TSkeleton_application
{
TCodArtEsselunga_cache _cache_ca;
TCodArtEsselungaUM_cache _cache_um;
protected:
long genera_recordset(const TMask& mask, TISAM_recordset& recset);
@ -575,6 +576,14 @@ void THardy_esselunga_fat::add_recs_dettaglio(TFatture_recordset& fat, TDocument
fat.set("DET.PRZUN2", rigadoc->prezzo(true, false));
fat.set("DET.IMPORTO", rigadoc->importo(true, false));
const TString& tu = _cache_um.decode(codart);
const TString& cu = rigadoc->get(RDOC_UMQTA);
if (tu.full() && tu != cu)
{
fat.set("DET.UDMQCONS", "TU");
fat.set("DET.UDMQFATT", "TU");
}
fat.new_rec("DES");
fat.set("DES.DESCR", rigadoc->get(RDOC_DESCR));

View File

@ -99,6 +99,24 @@ const TString& TCodArtEsselunga_cache::decode(const TString& codart)
return *(const TString*)objptr(codart);
}
TObject* TCodArtEsselungaUM_cache::key2obj(const char* key)
{
TToken_string code(key);
TString80 codart; code.get(0, codart);
const TString& codcf = ini_get_string(CONFIG_DITTA, "ha", "Esselunga_CodEsselunga");
TISAM_recordset codcorr("USE CODCORR\nSELECT CODCF=#CODCF\nFROM CODART=#COD\nTO CODART=#COD");
codcorr.set_var("#COD", TVariant(codart));
codcorr.set_var("#CODCF", TVariant(codcf));
if (codcorr.move_first())
return new TString4(codcorr.get(CODCORR_UM).as_string());
return new TString4;
}
const TString& TCodArtEsselungaUM_cache::decode(const TString& codart)
{
return *(const TString*)objptr(codart);
}
/////////////////////////////////////////////////////////////
// Metodi di utility
/////////////////////////////////////////////////////////////

View File

@ -51,12 +51,19 @@ class TCodArtEsselunga_cache : public TCache
{
protected:
virtual TObject* key2obj(const char* key);
public:
const TString& decode(const TString& codart);
TCodArtEsselunga_cache() {}
};
class TCodArtEsselungaUM_cache : public TCache
{
protected:
virtual TObject* key2obj(const char* key);
public:
const TString& decode(const TString& codart);
};
//----------------------------------------------------------
//metodi di utility
//----------------------------------------------------------