Patch level : 2.2 124

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

Gestione documenti collegati


git-svn-id: svn://10.65.10.50/trunk@13172 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2005-06-05 14:13:14 +00:00
parent 6faf37ea72
commit 5ad8a638bd
12 changed files with 327 additions and 81 deletions

View File

@ -8,55 +8,12 @@
#include "ci0.h"
#include "cilib.h"
#include "ci0300.h"
#include "../ve/velib.h"
///////////////////////////////////////////////////////////
// TConfigurazioneIndustriale_mask
///////////////////////////////////////////////////////////
void TConfigurazioneIndustriale_mask::add_element(TToken_string& t, long selrow)
{
if (selrow<-1)
return;
if (selrow>items()-1)
selrow = -1;
rows_array().add(t,selrow);
force_update();
}
void TConfigurazioneIndustriale_mask::add_element(long selrow)
{
if (selrow<-1)
return;
if (selrow>items()-1)
selrow = -1;
sheet().insert(selrow, true, true);
force_update();
}
void TConfigurazioneIndustriale_mask::delete_element(long selrow)
{
TToken_string t(40);
if (items()<1)
return;
if (selrow<0)
return;
if (selrow>items()-1)
return;
rows_array().destroy(selrow);
force_update();
}
void TConfigurazioneIndustriale_mask::moveup_element(long selrow)
{
if (items()<=1)
@ -68,7 +25,9 @@ void TConfigurazioneIndustriale_mask::moveup_element(long selrow)
if (selrow>items()-1)
return;
rows_array().swap(selrow,selrow-1);
rows_array().swap(selrow,selrow - 1);
sheet().check_row(selrow - 1);
sheet().check_row(selrow);
sheet().force_update();
sheet().select(selrow-1);
@ -86,6 +45,8 @@ void TConfigurazioneIndustriale_mask::movedown_element(long selrow)
return;
rows_array().swap(selrow,selrow+1);
sheet().check_row(selrow);
sheet().check_row(selrow + 1);
sheet().force_update();
sheet().select(selrow+1);
@ -101,6 +62,37 @@ bool TConfigurazioneIndustriale_mask::on_field_event(TOperable_field& o, TField_
case F_MOVEDN:
movedown_element(sheet().selected());
break;
case FR_TIPODOC:
if (e == fe_modify)
{
TCodice_numerazione cod_num(o.mask().get(FR_NUM));
const TString& tipo = o.get();
int last = cod_num.ntipi_doc();
for (int i = 0; i < last; i++ )
{
const TString16 curtipo(cod_num.tipo_doc(i));
if (curtipo == tipo)
return true;
}
return o.error_box( "Tipo non valido per la numerazione selezionata!" );
}
case FR_COLL:
if (e == fe_modify && !o.mask().is_running())
{
TMask & row_mask = o.mask();
row_mask.set(FR_NUM, "");
row_mask.set(FR_TIPODOC, "");
row_mask.set(FR_STATO, "");
row_mask.set(FR_VAR, "");
row_mask.set(FR_MODCOLL, "");
const int row = sheet().selected();
sheet().update_row(row);
sheet().check_row(row);
sheet().force_update(row);
}
default:
break;
}
@ -158,15 +150,21 @@ void TConfigurazioneIndustriale_app::file_to_sheet()
while (configfile.exist("Descr",item))
{
TToken_string t;
TToken_string & t = mask().sheet().row(item);
t.add(configfile.get("Filter", NULL,item, "F01"));
t.add(configfile.get("Descr", NULL,item, "Fatture"));
t.add(configfile.get("InsertRemain", NULL,item, ""));
t.add(configfile.get("ModifyRemain", NULL,item, ""));
mask().add_element(t);
t.add(configfile.get("DocColl", NULL, item, ""));
t.add(configfile.get("NumColl", NULL, item, ""));
t.add(configfile.get("TipoColl", NULL, item, ""));
t.add(configfile.get("StatoColl", NULL, item, ""));
t.add(configfile.get("ModColl", NULL, item, ""));
t.add(configfile.get("Var", NULL, item, ""));
mask().sheet().check_row(item);
item++;
}
mask().sheet().force_update();
}
void TConfigurazioneIndustriale_app::sheet_to_file()
@ -191,6 +189,12 @@ void TConfigurazioneIndustriale_app::sheet_to_file()
configfile.set("Descr", currdesc, NULL, true, i);
configfile.set("InsertRemain", mask().row(i).get(2), NULL, true, i);
configfile.set("ModifyRemain", mask().row(i).get(3), NULL, true, i);
configfile.set("DocColl", mask().row(i).get(4), NULL, true, i);
configfile.set("NumColl", mask().row(i).get(5), NULL, true, i);
configfile.set("TipoColl", mask().row(i).get(6), NULL, true, i);
configfile.set("StatoColl", mask().row(i).get(7), NULL, true, i);
configfile.set("ModColl", mask().row(i).get(8), NULL, true, i);
configfile.set("Var", mask().row(i).get(9), NULL, true, i);
totlen+=currdesc.len();
}

View File

@ -13,9 +13,6 @@ protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
void add_element(TToken_string& t, long selrow = -1);
void add_element(long selrow = -1);
void delete_element(long selrow);
void moveup_element(long selrow);
void movedown_element(long selrow);

View File

@ -1,6 +1,22 @@
// DEFINIZIONE CAMPI MASCHERE PER LA CONFIGURAZIONE di CI
// campi maschera ci0300a.uml
#define F_SHEET 151
#define F_MOVEUP 152
#define F_MOVEDN 153
#define F_SHEET 151
#define F_MOVEUP 152
#define F_MOVEDN 153
#define FR_FILTRO 101
#define FR_DES 102
#define FR_INS 103
#define FR_MOD 104
#define FR_COLL 105
#define FR_NUM 106
#define FR_TIPODOC 107
#define FR_STATO 108
#define FR_MODCOLL 109
#define FR_VAR 110
#define FR_DESNUM 201
#define FR_DESTIPODOC 202
#define FR_DESSTA 203

View File

@ -18,13 +18,19 @@ ENDPAGE
PAGE "Configurazione" -1 -1 78 23
SPREADSHEET F_SHEET 74 16
SPREADSHEET F_SHEET -1 16
BEGIN
PROMPT 3 1 ""
ITEM "Filtro@4"
ITEM "Filtro"
ITEM "Descrizione@30"
ITEM "Rimani in\nInserimento@14"
ITEM "Rimani in\nModifica@14"
ITEM "Rimani in\ninserimento@11"
ITEM "Rimani in\nmodifica@9"
ITEM "Documento\ncollegato@9"
ITEM "Numerazione"
ITEM "Tipo\nDocumento"
ITEM "Stato"
ITEM "Modifica documento\ncollegato@18"
ITEM "Campi modificati@50"
END
BUTTON F_MOVEUP 2 2
@ -43,35 +49,133 @@ ENDPAGE
ENDMASK
PAGE "Tipologia Documento" -1 -1 50 8
PAGE "Tipologia Documento" -1 -1 78 13
STRING 101 4
STRING FR_FILTRO 4
BEGIN
PROMPT 1 1 "Filtro "
USE %NUM
INPUT CODTAB 101
INPUT CODTAB FR_FILTRO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT 101 CODTAB
OUTPUT 102 S0
OUTPUT FR_FILTRO CODTAB
OUTPUT FR_DES S0
CHECKTYPE NORMAL
FLAG "UPA"
END
STRING 102 30
STRING FR_DES 30
BEGIN
PROMPT 1 2 "Descrizione "
END
BOOLEAN 103
BOOLEAN FR_INS
BEGIN
PROMPT 1 3 "Rimani in inserimento"
END
BOOLEAN 104
BOOLEAN FR_MOD
BEGIN
PROMPT 1 4 "Rimani in inserimento"
PROMPT 1 4 "Rimani in modifica"
END
BOOLEAN FR_COLL
BEGIN
PROMPT 1 5 "Documento collegato"
MESSAGE FALSE CLEAR,1@
MESSAGE TRUE ENABLE,1@
END
BOOLEAN FR_MODCOLL
BEGIN
PROMPT 23 5 "Modifica interattiva del documento collegato"
GROUP 1
END
STRING FR_NUM 4
BEGIN
PROMPT 1 6 "Numerazione "
USE %NUM
INPUT CODTAB FR_NUM
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_NUM CODTAB
OUTPUT FR_DESNUM S0
CHECKTYPE REQUIRED
FLAG "UPA"
GROUP 1
END
STRING FR_DESNUM 50
BEGIN
PROMPT 23 6 ""
HELP "Descrizione numerazione"
USE %NUM KEY 2
INPUT S0 FR_DESNUM
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT FR_NUM
GROUP 1
END
STRING FR_TIPODOC 4
BEGIN
PROMPT 1 7 "Tipo "
HELP "Codice tipo documento"
USE %TIP
INPUT CODTAB FR_TIPODOC
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_TIPODOC CODTAB
OUTPUT FR_DESTIPODOC S0
CHECKTYPE REQUIRED
FLAG "UP"
GROUP 1
END
STRING FR_DESTIPODOC 50
BEGIN
PROMPT 23 7 ""
HELP "Descrizione tipo documento"
USE %TIP KEY 2
INPUT S0 FR_DESTIPODOC
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT FR_TIPODOC
GROUP 1
END
STRING FR_STATO 1
BEGIN
PROMPT 1 8 "Stato "
USE %STD
CHECKTYPE REQUIRED
INPUT CODTAB FR_STATO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_STATO CODTAB
OUTPUT FR_DESSTA S0
FLAG "U"
GROUP 1
END
STRING FR_DESSTA 50
BEGIN
PROMPT 23 8 ""
HELP "Descrizione tipo documento"
USE %STD KEY 2
INPUT S0 FR_DESSTA
DISPLAY "Descrizione@40" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT FR_STATO
GROUP 1
END
ZOOM FR_VAR 50
BEGIN
PROMPT 1 9 "Campi variati "
GROUP 1
END
BUTTON DLG_CANCEL 10 2

View File

@ -33,11 +33,18 @@ void TImmissioneDocumenti_app::init_tabs()
while (items == 0 || configfile.exist("Descr",items))
{
pagenames.add(configfile.get("Descr", NULL,items, "Fatture"));
m.filters().add(configfile.get("Filter", NULL,items, "F01"));
pagenames.add(configfile.get("Descr", NULL, items, "Fatture"));
m.filters().add(configfile.get("Filter", NULL, items, "F01"));
m.insert().set(items, configfile.get_bool("InsertRemain", NULL, items));
m.modify().set(items, configfile.get_bool("ModifyRemain", NULL, items));
m.activate_almanac(F_AL01 + items, items, TDate(TODAY));
m.doc_coll().set(items, configfile.get_bool("DocColl", NULL, items));
m.num_coll().add(configfile.get("NumColl", NULL, items), items);
m.tipo_coll().add(configfile.get("TipoColl", NULL, items), items);
m.stato_coll().add(configfile.get("StatoColl", NULL, items), items);
m.var_coll().add(configfile.get("Var", NULL, items), items);
m.mod_coll().set(items, configfile.get_bool("ModColl", NULL, items));
m.activate_almanac(F_AL01 + items, items, TDate(TODAY));
items++;
}
m.disable_page(items);
@ -87,6 +94,9 @@ void TImmissioneDocumenti_app::init_flags()
bool TImmissioneDocumenti_app::create()
{
open_files(LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, LF_DESLIN, LF_CODCORR,
LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON, LF_MOV, LF_STOMAG,
LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0);
_mask = new TImmissioneDocumenti_mask();
init_tabs();
@ -218,8 +228,7 @@ void TImmissioneDocumenti_mask::open_day_mask(TDate date)
void TImmissioneDocumenti_mask::call_ve0(int exitval, TRelation& relation, TDate& date, const TString& codnum, const TString& doctype, byte currpage)
{
TFilename tempfile;
tempfile.tempdir();
tempfile.add("ci.ini");
tempfile.temp("", "ini");
{
TConfig configfile(tempfile);
@ -228,7 +237,7 @@ void TImmissioneDocumenti_mask::call_ve0(int exitval, TRelation& relation, TDate
{
case K_ENTER:
configfile.set("Action", "Modify", "Transaction");
if (_modify[currpage])
if (modify()[currpage])
configfile.set("Mode", "R", "Transaction");
configfile.set("NDOC", relation.lfile().get(DOC_NDOC), "33");
break;
@ -238,7 +247,7 @@ void TImmissioneDocumenti_mask::call_ve0(int exitval, TRelation& relation, TDate
break;
case K_INS:
configfile.set("Action", "Insert", "Transaction");
if (_insert[currpage])
if (insert()[currpage])
configfile.set("Mode", "R", "Transaction");
configfile.set("DATADOC", date.string(), "33");
break;
@ -259,6 +268,105 @@ void TImmissioneDocumenti_mask::call_ve0(int exitval, TRelation& relation, TDate
TExternal_app ve(commandline);
ve.run();
if (doc_coll()[currpage])
{
TDocumento doc;
TLocalisamfile documenti(LF_DOC);
long recno;
long ndoc_coll = 0L;
bool new_doc = false;
{
TConfig configfile(tempfile);
recno = configfile.get_long("Record", "Transaction");
if (recno > 0L)
{
doc.head().readat(documenti, recno);
doc.read();
const TString16 num_coll(num_coll().row(currpage));
const TString16 tipo_coll(tipo_coll().row(currpage));
const TString16 stato_coll(stato_coll().row(currpage));
const long ndoc = doc.get_long(DOC_NDOC);
TLocalisamfile rdoc(LF_RIGHEDOC);
rdoc.setkey(4);
rdoc.put(RDOC_DAPROVV, "D");
rdoc.put(RDOC_DAANNO, date.year());
rdoc.put(RDOC_DACODNUM, codnum);
rdoc.put(RDOC_DANDOC, ndoc);
new_doc = rdoc.read(_isgteq) != NOERR;
if (!new_doc)
{
bool new_doc = (rdoc.get(RDOC_DAPROVV) != "D");
new_doc |= (rdoc.get_int(RDOC_DAANNO) != date.year());
new_doc |= (rdoc.get(RDOC_DACODNUM) != codnum);
new_doc |= (rdoc.get_long(RDOC_DANDOC) != ndoc);
if (!new_doc)
ndoc_coll = rdoc.get_long(RDOC_NDOC);
}
configfile.set(DOC_CODNUM, num_coll, "33");
configfile.set(DOC_TIPODOC, tipo_coll, "33");
if (exitval == K_DEL)
configfile.set("Action", "Delete", "Transaction");
else
{
TDocumento doc_coll('D', date.year(), num_coll, ndoc_coll);
configfile.set("Action", "Modify", "Transaction");
configfile.set("Mode", "", "Transaction");
configfile.set_paragraph("33");
configfile.remove("STATO"); // creato dalla transazione precedente ???
if (new_doc)
{
TToken_string var(var_coll().row(currpage), ' ');
doc_coll.copy_contents(doc);
for (const char * field = var.get(0); field && *field; field = var.get())
doc_coll.zero(field);
doc_coll.put(DOC_STATO, stato_coll);
doc_coll.write();
ndoc_coll = doc_coll.get_long(DOC_NDOC);
}
else
{
TString_array vals;
TToken_string var(var_coll().row(currpage), ' ');
const char * field;
var.add(DOC_STATO);
for (field = var.get(0); field && *field; field = var.get())
vals.add(doc_coll.get(field));
doc_coll.copy_contents(doc);
int i = 0;
for (field = var.get(0); field && *field; field = var.get())
doc_coll.put(field, vals.row(i++));
doc_coll.rewrite();
if (!mod_coll()[currpage])
ndoc_coll = 0L;
}
}
configfile.set(DOC_NDOC, ndoc_coll, "33");
}
}
if (ndoc_coll > 0L)
ve.run();
}
remove_file(tempfile);
}

View File

@ -12,7 +12,12 @@ class TImmissioneDocumenti_mask : public TAlmanac_mask
TBit_array _ordered;
TBit_array _insert;
TBit_array _modify;
TBit_array _doccoll;
TBit_array _modcoll;
TString_array _numcoll;
TString_array _tipocoll;
TString_array _statocoll;
TString_array _varcoll;
protected:
@ -26,11 +31,23 @@ public:
const TString_array & filters() const { return _filters;}
const TArray & flags() const { return _flags;}
const TBit_array & ordered() const { return _ordered;}
const TBit_array & doc_coll() const { return _doccoll;}
const TBit_array & mod_coll() const { return _modcoll;}
const TString_array & num_coll() const { return _numcoll;}
const TString_array & tipo_coll() const { return _tipocoll;}
const TString_array & stato_coll() const { return _statocoll;}
const TString_array & var_coll() const { return _varcoll;}
TString_array & filters() { return _filters;}
TArray & flags() { return _flags;}
TBit_array & ordered() { return _ordered;}
TBit_array & insert() { return _insert;}
TBit_array & modify() { return _modify;}
TBit_array & doc_coll() { return _doccoll;}
TBit_array & mod_coll() { return _modcoll;}
TString_array & num_coll() { return _numcoll;}
TString_array & tipo_coll() { return _tipocoll;}
TString_array & stato_coll() { return _statocoll;}
TString_array & var_coll() { return _varcoll;}
public:
// apertura del foglio interno di gestione dei documenti

View File

@ -176,7 +176,7 @@ MESSAGE EMPTY SHOW,20|HIDE,10</prescript>
<font face="Courier New" size="7" />
</field>
</section>
<sql>USE RDOC KEY 2 SELECT (((CODNUM=#S_CODNUM)||(CODNUM='MNI')||(CODNUM='DFNI')||(CODNUM='FCI'))&#26;&#26;STR(CODCMS=#S_CMS)&#26;&#26;NUM(ANSI(33.DATADOC)&#3E;=ANSI(#S_DATEFROM))&#26;&#26;NUM(ANSI(33.DATADOC)&#3C;=#S_DATETO)&#26;&#26;(33.CODCF&#3E;=#DACF)&#26;&#26;(33.CODCF&#3C;=#ACF))
<sql>USE RDOC KEY 2
BY 20.RAGSOC 33.NDOC 33.DATADOC NRIGA
JOIN DOC INTO CODNUM=CODNUM ANNO=ANNO PROVV=PROVV NDOC=NDOC
JOIN CLIFO TO DOC INTO CODCF=CODCF TIPOCF=TIPOCF

View File

@ -162,7 +162,7 @@
<font face="Courier New" size="7" />
</field>
</section>
<sql>USE RDOC KEY 2 SELECT ((CODNUM=#S_CODNUM)&#26;&#26;NUM(ANSI(33.DATADOC)&#3E;=ANSI(#S_DATEFROM))&#26;&#26;NUM(ANSI(33.DATADOC)&#3C;=#S_DATETO))
<sql>USE RDOC KEY 2
BY 33.TIPODOC CODART CODCMS 33.DATADOC
JOIN DOC INTO CODNUM=CODNUM ANNO=ANNO PROVV=PROVV NDOC=NDOC
JOIN COMMESSE INTO CODCMS=CODCMS

View File

@ -164,7 +164,7 @@
<font face="Courier New" size="7" />
</field>
</section>
<sql>USE RDOC KEY 2 SELECT ((CODNUM=#S_CODNUM)&#26;&#26;NUM(ANSI(33.DATADOC)&#3E;=ANSI(#S_DATEFROM))&#26;&#26;NUM(ANSI(33.DATADOC)&#3C;=#S_DATETO))
<sql>USE RDOC KEY 2
BY 20.RAGSOC 33.TIPODOC 34.CODCMS 33.DATADOC
JOIN DOC INTO CODNUM=CODNUM ANNO=ANNO PROVV=PROVV NDOC=NDOC
JOIN CLIFO TO DOC INTO CODCF=CODCF TIPOCF=TIPOCF

View File

@ -122,7 +122,7 @@
<font face="Courier New" size="7" />
</field>
</section>
<sql>USE RDOC KEY 2 SELECT (((CODNUM=#S_CODNUM)||(CODNUM='MNI')||(CODNUM='DFNI')||(CODNUM='FCI'))&#26;&#26;STR(CODCMS&#3E;=#S_CMSFROM)&#26;&#26;STR(CODCMS&#3C;=#S_CMSTO)&#26;&#26;NUM(ANSI(33.DATADOC)&#3E;=ANSI(#S_DATEFROM))&#26;&#26;NUM(ANSI(33.DATADOC)&#3C;=#S_DATETO)&#26;&#26;(33.TIPODOC!=''))
<sql>USE RDOC KEY 2
BY CODCMS 33.TIPODOC[2,4]
JOIN DOC INTO CODNUM=CODNUM ANNO=ANNO PROVV=PROVV NDOC=NDOC
JOIN COMMESSE INTO CODCMS=CODCMS

View File

@ -192,7 +192,7 @@
<font face="Courier New" size="7" />
</field>
</section>
<sql>USE RDOC KEY 2 SELECT (((CODNUM=#S_CODNUM)||(CODNUM="MNI"))&#26;&#26;STR(CODCMS&#3E;=#S_CMSFROM)&#26;&#26;STR(CODCMS&#3C;=#S_CMSTO)&#26;&#26;NUM(ANSI(33.DATADOC)&#3E;=ANSI(#S_DATEFROM))&#26;&#26;NUM(ANSI(33.DATADOC)&#3C;=#S_DATETO))
<sql>USE RDOC KEY 2
BY 33.CODCMS 33.TIPODOC CODART
JOIN DOC INTO CODNUM=CODNUM ANNO=ANNO PROVV=PROVV NDOC=NDOC
JOIN COMMESSE INTO CODCMS=CODCMS

View File

@ -191,7 +191,7 @@
<font face="Courier New" size="7" />
</field>
</section>
<sql>USE DOC KEY 3 SELECT ((CODNUM=#S_CODNUM)&#26;&#26;STR(CODCMS&#3E;=#S_CMSFROM)&#26;&#26;STR(CODCMS&#3C;=#S_CMSTO))
<sql>USE DOC KEY 3
BY CODCMS TIPODOC
JOIN RDOC INTO CODNUM=CODNUM ANNO=ANNO PROVV=PROVV NDOC=NDOC
FROM DATADOC=#S_DATEFROM