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: case F_ADATA:
if ((e == fe_close || e == fe_modify) && !o.empty()) if ((e == fe_close || e == fe_modify) && !o.empty())
{ {
TDate d = o.get(); const TDate al = o.get();
if (d.ok()) const TDate dal = get(F_DADATA);
{ if (dal.ok() && dal.year() != al.year())
bool changed = false; return error_box(TR("Le date devono appartenere allo stesso anno!"));
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!"));
}
}
} }
break; break;
//in caso di elaborazione definitiva è obbligatorio.. //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 THardy_elab_docs::aggiorna_contratto(const TRiga_documento& rdoc, TContratto_premi& contratto, TLog_report& log)
{ {
bool elaborato = false; bool elaborato = false;
const bool definitivo = rdoc.get_char(RDOC_PROVV) == 'D';
const char tipo_contratto = contratto.tipo_contratto(); const char tipo_contratto = contratto.tipo_contratto();
//parametri della riga fattura //parametri della riga fattura
TString80 rdoc_codart = rdoc.get(RDOC_CODART); rdoc_codart.trim(); 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 //cerca una riga anticipo da evadere sul contratto per aggiornare la somma restituita sull'anticipo
if (rigacontratto->is_spese()) if (rigacontratto->is_spese())
{ {
//la somma restituita deve essere incrementata per la qta di merce (caffè) che c'è sulla riga della fattura in esame... if (definitivo) // Non scrivo aaggiornamenti provvisori
//..moltiplicata per il premio che c'è nella riga di tipo merce del contratto in esame {
const real reso = normalized_rdoc_qta * rigamerce_premio; //la somma restituita deve essere incrementata per la qta di merce (caffè) che c'è sulla riga della fattura in esame...
rigacontratto->add(RCA_2_RESO_CORRENTE, reso); //..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; elaborato = true;
break; break;
} }
@ -508,8 +479,11 @@ bool THardy_elab_docs::aggiorna_contratto(const TRiga_documento& rdoc, TContratt
if (rigamerce->is_merce()) if (rigamerce->is_merce())
{ {
const real bonus = normalized_rdoc_qta * rigamerce_premio; const real bonus = normalized_rdoc_qta * rigamerce_premio;
rigamerce->add(RC_1_BONUS, bonus); if (definitivo) // Non scrivo aaggiornamenti provvisori
rigamerce->add(RDOC_QTA, normalized_rdoc_qta); //riscrive sul campo di appoggio del contratto {
rigamerce->add(RC_1_BONUS, bonus);
rigamerce->add(RDOC_QTA, normalized_rdoc_qta); //riscrive sul campo di appoggio del contratto
}
elaborato = true; elaborato = true;
TString msg; TString msg;
@ -541,8 +515,7 @@ bool THardy_elab_docs::deve_generare_nac(const TContratto_premi& contratto, cons
return yes; return yes;
} }
//aggiorna, in base al documento in esame curr_doc, le somme restituite nelle righe di tipo verigh02 nei contratti validi.. //aggiorna, in base al documento in esame curr_doc, le somme restituite nelle righe di tipo verigh02 nei contratti validi
//..del cliente
word THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente, const TDate& data_fine, TLog_report& log) 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); 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 class THardy_esselunga_fat : public TSkeleton_application
{ {
TCodArtEsselunga_cache _cache_ca; TCodArtEsselunga_cache _cache_ca;
TCodArtEsselungaUM_cache _cache_um;
protected: protected:
long genera_recordset(const TMask& mask, TISAM_recordset& recset); 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.PRZUN2", rigadoc->prezzo(true, false));
fat.set("DET.IMPORTO", rigadoc->importo(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.new_rec("DES");
fat.set("DES.DESCR", rigadoc->get(RDOC_DESCR)); 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); 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 // Metodi di utility
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////

View File

@ -51,12 +51,19 @@ class TCodArtEsselunga_cache : public TCache
{ {
protected: protected:
virtual TObject* key2obj(const char* key); virtual TObject* key2obj(const char* key);
public: public:
const TString& decode(const TString& codart); 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 //metodi di utility
//---------------------------------------------------------- //----------------------------------------------------------