campo-sirio/sv/svlib01.cpp
guy ce957aef04 This commit was generated by cvs2svn to compensate for changes in r5035,
which included commits to RCS files with non-trunk default branches.

git-svn-id: svn://10.65.10.50/trunk@5036 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-08-05 09:24:21 +00:00

145 lines
3.2 KiB
C++
Executable File

#include "svlib01.h"
#include "doc.h"
#include "rdoc.h"
///////////////////////////////////////////////////////////
// TStats_data
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// TStats_agg
///////////////////////////////////////////////////////////
int TStats_agg::date2class(const TDate& datadoc) const
{
int classe;
if (_frequenza > fs_settimanale)
{
classe = datadoc.month();
if (_frequenza == fs_bimestrale)
classe = (classe-1) / 2 + 1;
else if (_frequenza == fs_trimestrale)
classe = (classe-1) / 3 + 1;
else if (_frequenza == fs_quindicinale)
{
classe = (classe-1) * 2 + 1;
if (datadoc.day() > 15) classe++;
}
}
else
{
const TDate primo(1, 1, datadoc.year());
classe = int(datadoc - primo);
if (_frequenza == fs_settimanale)
classe /= 7;
classe++;
}
return classe;
}
TStats_agg::TStats_data& TStats_agg::find(const TRiga_documento& rdoc)
{
const TDocumento& doc = rdoc.doc();
const TDate datadoc = doc.get(DOC_DATADOC);
TToken_string key(24);
key = doc.get(DOC_TIPODOC);
key.add(datadoc.year());
key.add(date2class(datadoc));
key.add(rdoc.get(RDOC_UMQTA));
char tipo = rdoc.tipo().tipo();
if (tipo == 'O' && _omaggio_is_merce)
tipo = 'M';
key.add(tipo);
TString80 codart = rdoc.get(RDOC_CODARTMAG);
if (codart.empty()) codart = rdoc.get(RDOC_CODART);
key.add(codart);
if (_agente)
key.add(doc.get(DOC_CODAG));
if (_cliente)
key.add(doc.get(DOC_CODCF));
if (_giacenza)
key.add(doc.get(DOC_CODCF));
if (_magazzino)
key.add(doc.get(RDOC_CODMAG));
TStats_data* ptr = (TStats_data*)_data.objptr(key);
if (ptr == NULL)
{
ptr = new TStats_data;
_data.add(key, ptr);
}
return *ptr;
}
bool TStats_agg::can_add(const TRiga_documento& rdoc) const
{
bool ok;
const char tipo = rdoc.tipo().tipo();
switch(tipo)
{
case 'M': ok = _merce; break;
case 'O': ok = _omaggi; break;
case 'P': ok = _prestazioni; break;
default : ok = FALSE; break;
}
return ok;
}
bool TStats_agg::sub(const TRiga_documento& rdoc)
{
bool ok = can_add(rdoc);
if (ok)
{
TStats_data& data = find(rdoc);
data._quantita -= rdoc.quantita();
data._valore -= rdoc.imponibile();
}
return ok;
}
bool TStats_agg::add(const TRiga_documento& rdoc)
{
bool ok = can_add(rdoc);
if (ok)
{
TStats_data& data = find(rdoc);
data._quantita += rdoc.quantita();
data._valore += rdoc.imponibile();
}
return ok;
}
bool TStats_agg::update()
{
return TRUE;
}
TStats_agg::TStats_agg()
{
TConfig ini(CONFIG_DITTA, "sv");
switch(ini.get_char("DataFreq"))
{
case 'B': _frequenza = fs_bimestrale; break;
case 'M': _frequenza = fs_mensile; break;
case 'Q': _frequenza = fs_quindicinale; break;
case 'S': _frequenza = fs_settimanale; break;
case 'T': _frequenza = fs_trimestrale; break;
default : _frequenza = fs_giornaliera; break;
}
_merce = ini.get_bool("StatMerce");
_prestazioni = ini.get_bool("StatPrestazioni");
_omaggi = ini.get_bool("StatOmaggi");
_omaggio_is_merce = ini.get_bool("OmaggioIsMerce");
}