From ce957aef049e2edf3e845d4edee1ab40c741eed9 Mon Sep 17 00:00:00 2001 From: guy Date: Tue, 5 Aug 1997 09:24:21 +0000 Subject: [PATCH] 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 --- sv/sv0.cpp | 20 +++++++ sv/sv0.h | 9 ++++ sv/sv0.url | 23 ++++++++ sv/sv0400.cpp | 17 ++++++ sv/sv0400a.h | 16 ++++++ sv/sv0400a.uml | 130 ++++++++++++++++++++++++++++++++++++++++++++ sv/svlib01.cpp | 144 +++++++++++++++++++++++++++++++++++++++++++++++++ sv/svlib01.h | 45 ++++++++++++++++ 8 files changed, 404 insertions(+) create mode 100755 sv/sv0.cpp create mode 100755 sv/sv0.h create mode 100755 sv/sv0.url create mode 100755 sv/sv0400.cpp create mode 100755 sv/sv0400a.h create mode 100755 sv/sv0400a.uml create mode 100755 sv/svlib01.cpp create mode 100755 sv/svlib01.h diff --git a/sv/sv0.cpp b/sv/sv0.cpp new file mode 100755 index 000000000..45bef6d0b --- /dev/null +++ b/sv/sv0.cpp @@ -0,0 +1,20 @@ +#include +#include + +#include "sv0.h" + +int main(int argc, char** argv) +{ + int n = argc > 1 ? atoi(argv[1]+1) : 0; + switch(n) + { + case 3: + st0400(argc, argv); + break; + default: + error_box("Invalid argument %s", argv[1]); + break; + } + exit(0); + return 0; +} diff --git a/sv/sv0.h b/sv/sv0.h new file mode 100755 index 000000000..5873f150c --- /dev/null +++ b/sv/sv0.h @@ -0,0 +1,9 @@ +#ifndef __ST0_H +#define __ST0_H + +int st0100(int argc, char* argv[]); +int st0200(int argc, char* argv[]); +int st0300(int argc, char* argv[]); +int st0400(int argc, char* argv[]); + +#endif diff --git a/sv/sv0.url b/sv/sv0.url new file mode 100755 index 000000000..d186d79a7 --- /dev/null +++ b/sv/sv0.url @@ -0,0 +1,23 @@ +#include + +MENU TASK_MENUBAR + SUBMENU MENU_FILE "~File" + SUBMENU M_FONT "~Opzioni" DISABLED + +MENU M_FONT + ITEM M_FONT_SELECT "~Font" + ITEM MENU_ITEM(2) "~Colori" + ITEM MENU_ITEM(3) "~Editor" + +MENUBAR MENU_BAR(1) +MENU MENU_BAR(1) + SUBMENU MENU_FILE "~File" + +MENUBAR MENU_BAR(2) +MENU MENU_BAR(2) + SUBMENU MENU_FILE "~File" + +MENUBAR MENU_BAR(3) +MENU MENU_BAR(3) + SUBMENU MENU_FILE "~File" + diff --git a/sv/sv0400.cpp b/sv/sv0400.cpp new file mode 100755 index 000000000..f8d205c0a --- /dev/null +++ b/sv/sv0400.cpp @@ -0,0 +1,17 @@ +#include + +#include "sv0400a.h" + +class TParametri_st : public TConfig_application +{ +public: + TParametri_st() : TConfig_application(CONFIG_DITTA) { } + virtual ~TParametri_st() { } +}; + +int st0400(int argc, char* argv[]) +{ + TParametri_st app; + app.run(argc, argv, "Parametri statistiche"); + return 0; +} \ No newline at end of file diff --git a/sv/sv0400a.h b/sv/sv0400a.h new file mode 100755 index 000000000..fbe0124b5 --- /dev/null +++ b/sv/sv0400a.h @@ -0,0 +1,16 @@ +#ifndef __ST0400A_H +#define __ST0400A_H + +#define F_NO_CODICE 101 +#define F_NO_MAGAZZINO 102 +#define F_NO_RAGGRUPPA 103 +#define F_MERCE 111 +#define F_PRESTAZIONI 112 +#define F_OMAGGI 113 +#define F_RAGGRUPPA_OMAGGI 114 +#define F_AGENTE 121 +#define F_CLIENTE 122 +#define F_GIACENZA 123 +#define F_MAGAZZINO 124 + +#endif diff --git a/sv/sv0400a.uml b/sv/sv0400a.uml new file mode 100755 index 000000000..d9ca52906 --- /dev/null +++ b/sv/sv0400a.uml @@ -0,0 +1,130 @@ +#include "sv0400a.h" + +TOOLBAR "" 0 20 0 2 + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 10 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +PAGE "Parametri Ditta Statistiche" -1 -1 76 17 + +GROUPBOX DLG_NULL 76 5 +BEGIN + PROMPT 1 1 "@bGestione articoli con codice inesistente" +END + +BOOLEAN F_NO_CODICE +BEGIN + PROMPT 2 2 "Includi articoli senza codice" + FIELD ArtNoCode +END + +BOOLEAN F_NO_MAGAZZINO +BEGIN + PROMPT 2 3 "Includi articoli non presenti in anagrafica" + FIELD ArtNoAnag +END + +BOOLEAN F_NO_RAGGRUPPA +BEGIN + PROMPT 2 4 "Raggruppa articoli senza codice e non presenti in anagrafica" + FIELD ArtNoAnagGrp +END + +GROUPBOX DLG_NULL 76 5 +BEGIN + PROMPT 1 6 "@bGestione tipi riga" +END + +BOOLEAN F_MERCE +BEGIN + PROMPT 2 7 "Includi righe Merce" + FIELD StatMerce +END + +BOOLEAN F_PRESTAZIONI +BEGIN + PROMPT 2 8 "Includi righe Prestazioni" + FIELD StatPrestazioni +END + +BOOLEAN F_OMAGGI +BEGIN + PROMPT 2 9 "Includi righe Omaggi" + FIELD StatOmaggi + MESSAGE FALSE CLEAR,F_RAGGRUPPA_OMAGGI + MESSAGE TRUE ENABLE,F_RAGGRUPPA_OMAGGI +END + +BOOLEAN F_RAGGRUPPA_OMAGGI +BEGIN + PROMPT 40 9 "Raggruppa Omaggi con Merce" + FIELD OmaggioIsMerce +END + +GROUPBOX DLG_NULL 76 7 +BEGIN + PROMPT 1 11 "@bRaggruppamento statistiche" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 12 "Tipo documento" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 13 "Anno solare" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 14 "Data documento" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 15 "Articolo" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 16 "Unita' di misura" +END + +BOOLEAN F_AGENTE +BEGIN + PROMPT 40 12 "Agente" + FIELD AgentGrp +END + +BOOLEAN F_CLIENTE +BEGIN + PROMPT 40 13 "Cliente" + FIELD ClientGrp +END + +BOOLEAN F_GIACENZA +BEGIN + PROMPT 40 14 "Giacenza" + FIELD GiacGrp +END + +BOOLEAN F_MAGAZZINO +BEGIN + PROMPT 40 15 "Magazzino" + FIELD MagazGrp +END + + +ENDPAGE + +ENDMASK \ No newline at end of file diff --git a/sv/svlib01.cpp b/sv/svlib01.cpp new file mode 100755 index 000000000..109f3b284 --- /dev/null +++ b/sv/svlib01.cpp @@ -0,0 +1,144 @@ +#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"); +} diff --git a/sv/svlib01.h b/sv/svlib01.h new file mode 100755 index 000000000..fb05b984c --- /dev/null +++ b/sv/svlib01.h @@ -0,0 +1,45 @@ +#ifndef __SVLIB01_H +#define __SVLIB01_H + +#ifndef __ASSOC_H +#include "assoc.h" +#endif + +#ifndef __VELIB_H +#include "..\ve\velib.h" +#endif + + +class TStats_agg : public TObject +{ + enum TFrequenza_statistiche { fs_giornaliera, fs_settimanale, fs_quindicinale, + fs_mensile, fs_bimestrale, fs_trimestrale }; + + class TStats_data : public TObject + { + public: + real _quantita, _valore; + }; + + TAssoc_array _data; + + TFrequenza_statistiche _frequenza; + bool _merce, _prestazioni, _omaggi, _omaggio_is_merce; + bool _agente, _cliente, _articolo, _giacenza, _magazzino; + +protected: + // Converte una data nella classe temporale definita dalla frequenza delle statisitiche + int date2class(const TDate& datadoc) const; + TStats_agg::TStats_data& find(const TRiga_documento& rdoc); + bool can_add(const TRiga_documento& rdoc) const; + +public: + bool sub(const TRiga_documento& rdoc); + bool add(const TRiga_documento& rdoc); + bool update(); + + TStats_agg(); + virtual ~TStats_agg() { } +}; + +#endif