ce957aef04
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
145 lines
3.2 KiB
C++
Executable File
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");
|
|
}
|