campo-sirio/ci/ci0300.cpp
brugno c767ffd46b Patch level :
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/trunk@12974 c028cbd2-c16b-5b4b-a496-9718f37d4682
2005-04-21 12:47:17 +00:00

223 lines
4.9 KiB
C++
Executable File

#include <applicat.h>
#include <automask.h>
#include <isam.h>
#include <mask.h>
#include <prefix.h>
#include <progind.h>
#include <relation.h>
#include <sheet.h>
#include <tabutil.h>
#include <doc.h>
#include "ci0.h"
#include "cilib.h"
#include "ci0300.h"
///////////////////////////////////////////////////////////
// TSelezioneGiorno_mask
///////////////////////////////////////////////////////////
class TSelezioneGiorno_mask : public TAlmanac_mask
{
protected:
// ereditato da TMask
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly) { return TRUE; }
public:
// apertura del foglio interno di gestione dei documenti
void open_inner_sheet(TDate date, TString doctype);
public:
// Costruttore
TSelezioneGiorno_mask() : TAlmanac_mask() { }
// Distruttore
~TSelezioneGiorno_mask() { }
};
void TSelezioneGiorno_mask::open_inner_sheet(TDate date, TString doctype)
{
TString filter;
TRelation* relation;
TCursor* cursor;
TCursor_sheet* sheet;
int exitval;
filter << "(ANSI(DATADOC)==\"" << date.string(ANSI) << "\")";
filter << "&&";
filter << "(TIPODOC==\"" << doctype << "\")";
relation = new TRelation(LF_DOC);
relation->add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF");
cursor = new TCursor(relation, filter);
sheet = new TCursor_sheet(cursor,
"ANNO|CODNUM|TIPODOC|NUMDOCRIF|STATO|DATADOCRIF|NDOC|20->RAGSOC",
TR("Selezione documenti"),
HR("Anno|Num.|Tipo|Docum.Rif.|Stato|Data@10|Documento|Ragione Sociale@50"),
0, 1);
// tbc: gestione dei buttons per bene
exitval = sheet->run();
switch(exitval)
{
case K_ENTER:
break;
case K_DEL:
break;
//case K_NEW: tbc: gestione di questi eventi. come chiamare applicazione e come al posto di k_del e bmp nelle maschere
// break;
default:
break;
}
}
///////////////////////////////////////////////////////////
// TImmissioneDocumenti
///////////////////////////////////////////////////////////
class TImmissioneDocumenti: public TSkeleton_application
{
private:
TSelezioneGiorno_mask* _mask;
TString_array _tabs; // titoli dei tabs
TString_array _filters; // filtri tipodoc per ogni tab
TBit_array _flags; // flag di presenza dei documenti
TDate* _newyearsday; // capodanno dell'anno corrente, per uso interno
int _year; // anno corrente
private:
void init_tabs();
void init_flags();
protected:
virtual bool create(void);
virtual void main_loop();
virtual bool destroy(void) ;
public:
bool has_documents(TDate& day); // passata come funzione alla maschera
void change_year(int newyear); // passata come funzione alla maschera
public:
TImmissioneDocumenti() : _flags(366) {}
virtual ~TImmissioneDocumenti() {}
};
// Overrides
bool TImmissioneDocumenti::create()
{
_mask = new TSelezioneGiorno_mask();
_year = TDate(TODAY).year();
_newyearsday = new TDate(1,1,_year);
init_tabs();
init_flags();
return TSkeleton_application::create();
}
bool TImmissioneDocumenti::destroy()
{
delete _mask;
return TSkeleton_application::destroy();
}
void TImmissioneDocumenti::main_loop()
{
while (_mask->run() == K_ENTER)
{
_mask->open_inner_sheet(_mask->selected_day(),_filters.row(_mask->curr_page()));
}
}
// Chiamate dalla maschera
void TImmissioneDocumenti::change_year(int newyear)
{
_year = newyear;
_newyearsday = new TDate(1,1,_year);
init_flags();
}
bool TImmissioneDocumenti::has_documents(TDate& day)
{
return ((_flags)[day-*_newyearsday]);
}
// Inizializzazioni
void TImmissioneDocumenti::init_tabs()
{
TMask_field* currpage;
TConfig* configfile;
TString pagename;
TString currfilter;
int items;
_tabs.destroy();
_filters.destroy();
configfile = new TConfig("ci0300.ini");
configfile->list_paragraphs(_tabs);
items = _tabs.items();
for (int i=0;i<items;i++)
{
pagename.format("Pagina %2d",i);
currfilter = configfile->get("Filtro",_tabs.row(i));
currpage = _mask->find_by_fieldname(pagename);
currpage->set_prompt(_tabs.row(i));
_filters.add(currfilter);
_mask->activate_almanac(i, TDate(TODAY));
}
}
void TImmissioneDocumenti::init_flags()
{
TDate currdate;
TDate currstart;
TString filter;
TRelation* relation;
TSorted_cursor* cursor;
int items;
filter << "ANNO==\"" << _year << "\"";
relation = new TRelation(LF_DOC);
cursor = new TSorted_cursor(relation, "ANNO", filter);
items =cursor->items();
for (*cursor=0;cursor->pos()<items;++(*cursor))
{
currdate = relation->lfile().get_date(DOC_DATADOC);
_flags.set(currdate-*_newyearsday, 1);
}
}
///////////////////////////////////////////////////////////
// Mains
///////////////////////////////////////////////////////////
int ci0300(int argc, char* argv[])
{
TImmissioneDocumenti a ;
a.run(argc, argv, TR("Immissione Documenti"));
return 0;
}
int ci0400(int argc, char* argv[])
{
TImmissioneDocumenti a ;
a.run(argc, argv, TR("Immissione Documenti"));
return 0;
}