Patch level : 10.0 888

Files correlati     :  ci0.exe ci2.exe
Ricompilazione Demo : [ ]
Commento            :

Generazione documenti dalla Rilevazione ore


git-svn-id: svn://10.65.10.50/branches/R_10_00@21475 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2011-01-19 11:48:29 +00:00
parent 38874c34c4
commit 11c1841b9d
10 changed files with 539 additions and 17 deletions

View File

@ -167,6 +167,10 @@ void TConfigurazioneIndustriale_app::file_to_sheet()
}
mask().set(F_DETTDISP, configfile.get("DETTDISP"));
mask().set(F_DETTCONS, configfile.get("DETTCONS"));
mask().set(F_CODNUMPR, configfile.get("CODNUMPR"));
mask().set(F_TIPODOCPR, configfile.get("TIPODOCPR"));
mask().set(F_CODNUMCN, configfile.get("CODNUMCN"));
mask().set(F_TIPODOCCN, configfile.get("TIPODOCCN"));
mask().sheet().force_update();
}
@ -203,6 +207,10 @@ void TConfigurazioneIndustriale_app::sheet_to_file()
}
configfile.set("DETTDISP", mask().get(F_DETTDISP));
configfile.set("DETTCONS", mask().get(F_DETTCONS));
configfile.set("CODNUMPR", mask().get(F_CODNUMPR));
configfile.set("TIPODOCPR", mask().get(F_TIPODOCPR));
configfile.set("CODNUMCN", mask().get(F_CODNUMCN));
configfile.set("TIPODOCCN", mask().get(F_TIPODOCCN));
if (totlen>_maxlen)
message_box("E' probabile che la lunghezza delle descrizioni inserite ne impedisca la totale visualizzazione sullo schermo");

View File

@ -6,6 +6,15 @@
#define F_MOVEDN 153
#define F_DETTDISP 154
#define F_DETTCONS 156
#define F_CODNUMPR 157
#define F_DESNUMPR 158
#define F_TIPODOCPR 159
#define F_DESTIPODOCPR 160
#define F_CODNUMCN 161
#define F_DESNUMCN 162
#define F_TIPODOCCN 163
#define F_DESTIPODOCCN 164
#define FR_FILTRO 101
#define FR_DES 102

View File

@ -64,6 +64,113 @@ BEGIN
FIELD DETTCONS
END
STRING F_CODNUMPR 4
BEGIN
PROMPT 2 6 "Num.preventivi "
FIELD CODNUMPR
HELP "Codice numerazione"
USE %NUM
INPUT CODTAB F_CODNUMPR
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODNUMPR CODTAB
OUTPUT F_DESNUMPR S0
CHECKTYPE NORMAL
FLAG "UPA"
WARNING "Numerazione assente"
KEY 1 2
END
STRING F_DESNUMPR 50
BEGIN
PROMPT 26 6 ""
HELP "Descrizione numerazione"
USE %NUM KEY 2
INPUT S0 F_DESNUMPR
DISPLAY "Descrizione@60" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_CODNUMPR
END
STRING F_TIPODOCPR 4
BEGIN
PROMPT 2 8 "Tipo preventivi"
FIELD TIPODOCPR
HELP "Codice tipo documento"
USE %TIP
INPUT CODTAB F_TIPODOCPR
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_TIPODOCPR CODTAB
OUTPUT F_DESTIPODOCPR S0
CHECKTYPE NORMAL
FLAG "UP"
END
STRING F_DESTIPODOCPR 50
BEGIN
PROMPT 26 8 ""
HELP "Descrizione tipo documento"
USE %TIP KEY 2
INPUT S0 F_DESTIPODOCPR
DISPLAY "Descrizione@60" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_TIPODOCPR
END
STRING F_CODNUMCN 4
BEGIN
PROMPT 2 10 "Num.preventivi "
FIELD CODNUMCN
HELP "Codice numerazione"
USE %NUM
INPUT CODTAB F_CODNUMCN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODNUMCN CODTAB
OUTPUT F_DESNUMCN S0
CHECKTYPE NORMAL
FLAG "UPA"
WARNING "Numerazione assente"
KEY 1 2
END
STRING F_DESNUMCN 50
BEGIN
PROMPT 26 10 ""
HELP "Descrizione numerazione"
USE %NUM KEY 2
INPUT S0 F_DESNUMCN
DISPLAY "Descrizione@60" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_CODNUMCN
END
STRING F_TIPODOCCN 4
BEGIN
PROMPT 2 12 "Tipo consuntivi"
FIELD TIPODOCPR
HELP "Codice tipo documento"
USE %TIP
INPUT CODTAB F_TIPODOCCN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_TIPODOCCN CODTAB
OUTPUT F_DESTIPODOCCN S0
CHECKTYPE NORMAL
FLAG "UP"
END
STRING F_DESTIPODOCCN 50
BEGIN
PROMPT 26 12 ""
HELP "Descrizione tipo documento"
USE %TIP KEY 2
INPUT S0 F_DESTIPODOCCN
DISPLAY "Descrizione@60" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_TIPODOCCN
END
ENDPAGE
ENDMASK

View File

@ -28,6 +28,8 @@ class TRilevamento_prev_msk : public TAutomask
short _scdc_sid, _scdc_lid;
short _scms_sid, _scms_lid;
short _sfase_sid, _sfase_lid;
TString _numpr;
TString _tipopr;
protected:
const real proponi_costo(const TMask& msk);
@ -553,6 +555,7 @@ void TRilevamento_prev_msk::azzera_tutto(TSheet_field& sheet)
//vaoler pari a zero, e poi ricarica lo sheet
void TRilevamento_prev_msk::registra()
{
TDoc_cache ca;
TRilevamento_ore rilroa;
TSheet_field& sheet = sfield(F_SHEET);
int err = NOERR;
@ -574,17 +577,32 @@ void TRilevamento_prev_msk::registra()
const real costo(tmp);
get_row_anal_fields(riga, codcosto, codcms, codfase);
rilroa.read('P', id);
if(qtaore == 0)
err = rilroa.remove();
const bool found = rilroa.read('P', id) == NOERR;
if (qtaore == 0)
{
if (found)
{
err = rilroa.remove();
if (_numpr.full() && _tipopr.full())
{
TDocumento & doc = ca.doc(rilroa);
const int docrow = doc.id2rownum(rilroa.get_long(RILORE_IDRIGA));
if (docrow > 0)
doc.destroy_row(docrow, true);
}
}
}
else
{
const int anno = dadata.year();
const int mese = dadata.month();
const int giorno = dadata.day();
rilroa.put(RILORE_TIPO, "P");
rilroa.put(RILORE_ID, id);
rilroa.put(RILORE_ANNO, dadata.year());
rilroa.put(RILORE_MESE, dadata.month());
rilroa.put(RILORE_GIORNO, dadata.day());
rilroa.put(RILORE_ANNO, anno);
rilroa.put(RILORE_MESE, mese);
rilroa.put(RILORE_GIORNO, giorno);
rilroa.put(RILORE_TIPORA, tipora);
rilroa.put(RILORE_CODICE, codice);
rilroa.put(RILORE_TPORA, tpora);
@ -595,13 +613,82 @@ void TRilevamento_prev_msk::registra()
rilroa.put(RILORE_ADATA, adata);
rilroa.put(RILORE_QTAORE, qtaore);
rilroa.put(RILORE_COSTO, costo);
err = rilroa.rewrite_write();
if (_numpr.full() && _tipopr.full())
{
TDoc_key oldkey(rilroa);
const long ndoc = date2ndoc(dadata) * 10000L + (adata.year() - dadata.year()) * 1000L+ date2ndoc(adata);
if (oldkey.provv() != 'D')
{
oldkey.set_provv();
oldkey.set_anno(anno);
oldkey.set_codnum(_numpr);
oldkey.set_ndoc(ndoc);
}
TDocumento & olddoc = ca.doc(oldkey);
int docrow = olddoc.id2rownum(rilroa.get_long(RILORE_IDRIGA));
TDoc_key key(olddoc);
if (found && (key.anno() != anno || ndoc != olddoc.get_long(DOC_NDOC)))
{
if (docrow > 0)
olddoc.destroy_row(docrow, true);
docrow = -1;
key.set_ndoc(ndoc);
}
TDocumento & doc = ca.doc(key);
doc.set_tipo(_tipopr);
doc.put(DOC_DATADOC, dadata);
doc.put(DOC_DATACOMP, dadata);
doc.put(DOC_DATAFCOMP, adata);
TSpesa_prest risatt(codice, tipora);
if (docrow < 0)
{
doc.new_row(risatt.tipo_riga());
docrow = doc.physical_rows();
doc.set_row_ids();
}
TRiga_documento & rdoc = doc[docrow];
rdoc.put(RDOC_TIPORIGA, risatt.tipo_riga());
rdoc.put(RDOC_CODART, codice);
rdoc.put(RDOC_CHECKED, "X");
rdoc.put(RILORE_TPORA, tpora); // campo virtuale
rdoc.put(RDOC_CODCOSTO, codcosto);
rdoc.put(RDOC_CODCMS, codcms);
rdoc.put(RDOC_FASCMS, codfase);
rdoc.put(RDOC_QTA, qtaore);
rdoc.put(RDOC_UMQTA, risatt.um());
rdoc.put(RDOC_PREZZO, costo);
rdoc.put(RDOC_PREZZOL, rdoc.iva(risatt.cod_iva()).lordo(costo, ALL_DECIMALS));
rdoc.put(RDOC_CODIVA, risatt.cod_iva());
rilroa.put(RILORE_PROVV, key.provv());
rilroa.put(RILORE_ANNO, key.anno());
rilroa.put(RILORE_CODNUM, key.codnum());
rilroa.put(RILORE_NDOC, key.ndoc());
rilroa.put(RILORE_IDRIGA, rdoc.get_long(RDOC_IDRIGA));
}
else
{
rilroa.zero(RILORE_PROVV);
rilroa.zero(RILORE_ANNO);
rilroa.zero(RILORE_CODNUM);
rilroa.zero(RILORE_NDOC);
rilroa.zero(RILORE_IDRIGA);
}
err = rilroa.rewrite_write();
}
if (err != NOERR)
break;
}
if (err == NOERR)
{
ca.destroy();
sheet.destroy();
riempi_sheet();
}
@ -832,6 +919,8 @@ TRilevamento_prev_msk::TRilevamento_prev_msk()
s.delete_column(id);
}
_qtaore = 0;
_numpr = ini_get_string(CONFIG_DITTA, "ci", "CODNUMPR");
_tipopr = ini_get_string(CONFIG_DITTA, "ci", "TIPODOCPR");
}
////////////////////////////////////////////
@ -847,6 +936,7 @@ public:
void TRilevamento_prev_app::main_loop()
{
open_files(LF_DOC, LF_RIGHEDOC, LF_RILORE, 0);
TRilevamento_prev_msk msk;
while (msk.run() != K_QUIT)
msk.esegui();

View File

@ -208,11 +208,15 @@ END
DATE S_DADATA
BEGIN
PROMPT 2 7 "Dal "
CHECKTYPE REQUIRED
END
DATE S_ADATA
BEGIN
PROMPT 22 7 "Al "
CHECKTYPE REQUIRED
VALIDATE DATE_CMP_FUNC >= #S_DADATA
WARINING "La data finiale deve essere maggiore della data iniziale"
END
STRING S_TPORA 2

View File

@ -2,6 +2,7 @@
#include <automask.h>
#include <colors.h>
#include <defmask.h>
#include <modaut.h>
#include <recset.h>
#include <sheet.h>
#include <utility.h>
@ -13,6 +14,8 @@
#include "ci2200a.h"
#include "rilore.h"
#include "../ca/calib01.h"
#include "../ca/commesse.h"
#include "../ca/cfcms.h"
#include "../ve/velib.h"
////////////////////////////////////////////
@ -37,6 +40,8 @@ class TRilevamento_cons_msk : public TAutomask
int _n_ex;
int _es_array[32];
TEsercizi_contabili _es;
TString _numcn;
TString _tipocn;
protected:
const real proponi_costo(TToken_string& riga);
@ -459,6 +464,8 @@ void TRilevamento_cons_msk::riempi_risoatt(char tipo)
put_row_anal_fields(riga, rilore.get(RILORE_CODCOSTO), rilore.get(RILORE_CODCMS), rilore.get(RILORE_CODFASE));
riga.add(rilore.get(RILORE_QTAORE), sheet.cid2index(S_QTAORE));
riga.add(rilore.get(RILORE_COSTO), sheet.cid2index(S_COSTO));
riga.add(rilore.get(RILORE_CUP), sheet.cid2index(S_CUP));
riga.add(rilore.get(RILORE_CIG), sheet.cid2index(S_CIG));
riga.add(rilore.get(RILORE_ID), sheet.cid2index(S_ID));
sheet.check_row(sheet.items() - 1);
@ -551,8 +558,10 @@ void TRilevamento_cons_msk::azzera_tutto()
//REGISTRA: metodo che salva nella tabella di modulo le
//righe dello sheet che hanno valore > 0, ed elimina quelle che hanno
//vaoler pari a zero, e poi ricarica lo sheet
void TRilevamento_cons_msk::registra()
{
TDoc_cache ca;
TSheet_field& calendario = sfield(F_CALENDARIO);
TSheet_field& sheet = sfield(F_SHEET);
TRilevamento_ore rilroa;
@ -572,11 +581,26 @@ void TRilevamento_cons_msk::registra()
const int qtaore = riga.get_int(sheet.cid2index(S_QTAORE));
const long id = riga.get_long(sheet.cid2index(S_ID));
const real costo(riga.get(sheet.cid2index(S_COSTO)));
const TString16 cup(riga.get(sheet.cid2index(S_CUP)));
const TString16 cig(riga.get(sheet.cid2index(S_CIG)));
get_row_anal_fields(riga, codcosto, codcms, codfase);
rilroa.read('C', id);
const bool found = rilroa.read('C', id) == NOERR;
if(qtaore == 0)
err = rilroa.remove();
{
if (found)
{
err = rilroa.remove();
if (_numcn.full() && _tipocn.full())
{
TDocumento & doc = ca.doc(rilroa);
const int docrow = doc.id2rownum(rilroa.get_long(RILORE_IDRIGA));
if (docrow > 0)
doc.destroy_row(docrow, true);
}
}
}
else
{
rilroa.put(RILORE_TIPO, "C");
@ -592,6 +616,77 @@ void TRilevamento_cons_msk::registra()
rilroa.put(RILORE_CODFASE, codfase);
rilroa.put(RILORE_QTAORE, qtaore);
rilroa.put(RILORE_COSTO, costo);
rilroa.put(RILORE_CUP, cup);
rilroa.put(RILORE_CIG, cig);
if (_numcn.full() && _tipocn.full())
{
TDoc_key oldkey(rilroa);
const long ndoc = date2ndoc(TDate(_giorno, mese, anno));
if (oldkey.provv() != 'D')
{
oldkey.set_provv();
oldkey.set_anno(anno);
oldkey.set_codnum(_numcn);
oldkey.set_ndoc(ndoc);
}
TDocumento & olddoc = ca.doc(oldkey);
int docrow = olddoc.id2rownum(rilroa.get_long(RILORE_IDRIGA));
TDoc_key key(olddoc);
if (found && (key.anno() != anno || ndoc != olddoc.get_long(DOC_NDOC)))
{
if (docrow > 0)
olddoc.destroy_row(docrow, true);
docrow = -1;
key.set_ndoc(ndoc);
}
TDocumento & doc = ca.doc(key);
doc.set_tipo(_tipocn);
doc.put(DOC_DATADOC, TDate(_giorno, mese, anno));
TSpesa_prest risatt(codice, tipora);
if (docrow < 0)
{
doc.new_row(risatt.tipo_riga());
docrow = doc.physical_rows();
doc.set_row_ids();
}
TRiga_documento & rdoc = doc[docrow];
rdoc.put(RDOC_TIPORIGA, risatt.tipo_riga());
rdoc.put(RDOC_CODART, codice);
rdoc.put(RDOC_DESCR, risatt.descrizione());
rdoc.put(RDOC_CHECKED, "X");
rdoc.put(RILORE_TPORA, tpora); // campo virtuale
rdoc.put(RDOC_CODCOSTO, codcosto);
rdoc.put(RDOC_CODCMS, codcms);
rdoc.put(RDOC_FASCMS, codfase);
rdoc.put(RDOC_QTA, qtaore);
rdoc.put(RDOC_UMQTA, risatt.um());
rdoc.put(RDOC_PREZZO, costo);
rdoc.put(RDOC_PREZZOL, rdoc.iva(risatt.cod_iva()).lordo(costo, ALL_DECIMALS));
rdoc.put(RDOC_CODIVA, risatt.cod_iva());
rilroa.put(RILORE_PROVV, key.provv());
rilroa.put(RILORE_ANNO, key.anno());
rilroa.put(RILORE_CODNUM, key.codnum());
rilroa.put(RILORE_NDOC, key.ndoc());
rilroa.put(RILORE_IDRIGA, rdoc.get_long(RDOC_IDRIGA));
}
else
{
rilroa.zero(RILORE_PROVV);
rilroa.zero(RILORE_ANNO);
rilroa.zero(RILORE_CODNUM);
rilroa.zero(RILORE_NDOC);
rilroa.zero(RILORE_IDRIGA);
}
err = rilroa.rewrite_write();
}
if (err != NOERR)
@ -599,6 +694,7 @@ void TRilevamento_cons_msk::registra()
}
if (err == NOERR)
{
ca.destroy();
sheet.destroy();
riempi_sheet();
}
@ -638,6 +734,28 @@ bool TRilevamento_cons_msk::on_field_event(TOperable_field& f, TField_event e, l
{
if (e == fe_modify && f.dlg() >= F_ANAL && f.dlg() < F_ANAL+12)
riempi_sheet();
if (main_app().has_module(CUAUT) && f.dlg() == _scms_lid)
{
if (e == fe_init || e == fe_modify)
{
const TRectype & curr = f.mask().efield(_scms_lid).browse()->cursor()->curr();
const TString codcms = curr.get(COMMESSE_CODCMS);
f.mask().set(S_CMSH, codcms);
if (e == fe_modify)
{
TToken_string key;
key.add(codcms);
key.add("C");
key.add(1);
const TRectype & cfcms = cache().get(LF_CFCMS, key);
f.mask().set(S_CUP, cfcms.get(CFCMS_CUP), 3);
f.mask().set(S_CIG, cfcms.get(CFCMS_CIG), 3);
}
}
}
switch (f.dlg())
{
case DLG_DEFAULT:
@ -850,6 +968,8 @@ TRilevamento_cons_msk::TRilevamento_cons_msk()
set(F_ANNO, TDate(TODAY).year());
}
set(F_INTERVALLO, dett);
_numcn = ini_get_string(CONFIG_DITTA, "ci", "CODNUMCN");
_tipocn = ini_get_string(CONFIG_DITTA, "ci", "TIPODOCCN");
}
////////////////////////////////////////////
@ -865,6 +985,7 @@ public:
void TRilevamento_cons_app::main_loop()
{
open_files(LF_DOC, LF_RIGHEDOC, LF_RILORE, 0);
TRilevamento_cons_msk msk;
while (msk.run() != K_QUIT) ;
}

View File

@ -24,9 +24,7 @@
#define S_RISOATT 101
#define S_CODRIS 102
#define S_DESRIS 119
#define S_CODATT 202
#define S_DESATT 219
#define S_TPORA 103
#define S_CDC1 104
#define S_CDC2 105
@ -43,4 +41,12 @@
#define S_QTAORE 116
#define S_COSTO 117
#define S_OREDIS 118
#define S_ID 120
#define S_CUP 119
#define S_CIG 120
#define S_DESRIS 121
#define S_DESATT 221
#define S_ID 122
#define S_CMSH 350
#define S_DCUP 351
#define S_DCIG 352

View File

@ -32,7 +32,7 @@ ENDPAGE
PAGE "Rilevazione consuntivi" 0 2 0 0
GROUPBOX DLG_NULL 78 78
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 1 0 "@bSelezione"
END
@ -147,6 +147,8 @@ BEGIN
ITEM "Qta\nOre@5"
ITEM "Costo@6"
ITEM "Ore\ndisponibilità"
ITEM "CUP@15"
ITEM "CIG@10"
ITEM "Descrizione@50"
ITEM "ID@8"
END
@ -174,9 +176,9 @@ END
ENDPAGE
ENDMASK
PAGE "Riga consuntivo" -1 -1 78 13
PAGE "Riga consuntivo" -1 -1 78 17
GROUPBOX DLG_NULL 76 12
GROUPBOX DLG_NULL 76 16
BEGIN
PROMPT 1 1 "@bRisorsa - Attrezzatura"
END
@ -332,9 +334,61 @@ BEGIN
PROMPT 50 11 "Quantità ore "
END
STRING S_CMSH 20
BEGIN
PROMPT 50 16 ""
FLAGS "H"
END
STRING S_CUP 15
BEGIN
PROMPT 2 12 "CUP "
USE LF_CFCMS KEY 2 SELECT TIPOCF=="C"
JOIN %CUP INTO CODTAB==CUP
JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
INPUT COMMESSA S_CMSH SELECT
INPUT CUP S_CUP
DISPLAY "Codice CUP@15" CUP
DISPLAY "Descrizione@50" %CUP->S0
DISPLAY "Codice Cliente" CODCF
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
OUTPUT S_CUP CUP
OUTPUT S_DCUP %CUP->S0
CHECKTYPE NORMAL
END
STRING S_DCUP 50 30
BEGIN
PROMPT 40 12 ""
FLAGS "D"
END
STRING S_CIG 10
BEGIN
PROMPT 2 13 "CIG "
USE LF_CFCMS KEY 3 SELECT TIPOCF=="C"
JOIN %CIG INTO CODTAB==CIG
JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
INPUT COMMESSA S_CMSH SELECT
INPUT CIG S_CIG
DISPLAY "Codice CIG@15" CIG
DISPLAY "Descrizione@50" %CIG->S0
DISPLAY "Codice Cliente" CODCF
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
OUTPUT S_CIG CIG
OUTPUT S_DCIG %CIG->S0
CHECKTYPE NORMAL
END
STRING S_DCIG 50 30
BEGIN
PROMPT 40 13 ""
FLAGS "D"
END
NUMBER S_ID 8
BEGIN
PROMPT 2 12 "ID "
PROMPT 2 14 "ID "
FLAGS "D"
END

View File

@ -842,5 +842,76 @@ TRilevamento_ore::TRilevamento_ore()
zero();
}
///////////////////////////
//// TDoc_key ////
///////////////////////////
TDoc_key::TDoc_key(const int anno, const TString& codnum, const long ndoc, const char provv)
{
add(provv);
add(anno);
add(codnum);
add(ndoc);
}
TDoc_key::TDoc_key(const TRectype & rec)
{
add(rec.get_char(DOC_PROVV));
add(rec.get_int(DOC_ANNO));
add(rec.get(DOC_CODNUM));
add(rec.get_long(DOC_NDOC));
}
const long date2ndoc(const TDate date)
{
TDate inizio(date);
inizio.set_day(1);
inizio.set_month(1);
return date - inizio + 1;
}
///////////////////////////
//// TDoc_cache ////
///////////////////////////
//KEY2OBJ:sceglie il documento giusto da disco in modo da poterlo continuare, o lo crea se non c'è
TObject* TDoc_cache::key2obj(const char* key)
{
TDocumento* doc = NULL;
TToken_string tmp(key);
TDoc_key chiave(key);
const char provv = chiave.provv();
const int anno = chiave.anno();
const TString& codnum = chiave.codnum();
const int ndoc = chiave.ndoc();
doc = new TDocumento(provv, anno, codnum, ndoc);
return doc;
}
//DOC: restituisce un puntatore ad un documento identificato dalla chiave documento completa
TDocumento& TDoc_cache::doc(const TDoc_key& kdoc)
{
return *(TDocumento*)objptr(kdoc);
}
TDocumento& TDoc_cache::new_doc(TDoc_key& kdoc)
{
kdoc.set_ndoc(0L);
return *(TDocumento*)objptr(kdoc);
}
//DISCARDING: salva un documento sul disco prima di eliminarlo dalla cache
void TDoc_cache::discarding(const THash_object* obj)
{
TDocumento& doc = (TDocumento&)obj->obj();
if (doc.physical_rows() == 0)
doc.remove();
else
doc.rewrite();
}

View File

@ -9,6 +9,10 @@
#include <recarray.h>
#endif
#ifndef __VELIB_H
#include <../ve/velib.h>
#endif
#ifndef __TABMOD_H
#include <tabmod.h>
#endif
@ -242,4 +246,52 @@ public:
TRilevamento_ore();
};
///////////////////////////
//// TDoc_key ////
///////////////////////////
class TDoc_key: public TToken_string
{
public:
const char provv() { return get(0)[0]; }
const int anno() { return get_int(1); }
const char* codnum() { return get(2); }
const long ndoc() { return get_long(3); }
void set_provv(const char provv = 'D') { add(provv, 0); }
void set_anno(const int anno) { add(anno, 1); }
void set_codnum(const char* codnum) { add(codnum, 2); }
void set_ndoc(const long ndoc) { add(ndoc, 3); }
TDoc_key& operator= (const char* key) { set(key); }
TDoc_key(const int anno, const TString& codnum, const long ndoc, const char provv = 'D');
TDoc_key(const char* key):TToken_string(key){}
TDoc_key(const TToken_string& key):TToken_string(key){}
TDoc_key(const TDoc_key& key):TToken_string(key){}
TDoc_key(const TRectype & rec);
TDoc_key():TToken_string(){}
};
///////////////////////////
//// TDoc_cache ////
///////////////////////////
const long date2ndoc(const TDate data);
//classe TDoc_cache
class TDoc_cache : public TCache
{
protected:
virtual void discarding(const THash_object* obj);
virtual TObject* key2obj(const char* key);
public:
TDocumento& doc(const TDoc_key& kdoc);
TDocumento& doc(const TRectype& rec) { return doc(TDoc_key(rec)); }
TDocumento& new_doc(TDoc_key& kdoc);
TDocumento& new_doc(const TRectype& rec) { return new_doc(TDoc_key(rec)); }
TDoc_cache() : TCache(1883) {}
};
#endif