Personalizzazioni per Cigno

git-svn-id: svn://10.65.10.50/branches/R_10_00@22727 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2012-09-18 10:35:36 +00:00
parent 148f889d51
commit ab083a1e95
9 changed files with 3388 additions and 2992 deletions

View File

@ -7,15 +7,10 @@ int main(int argc, char** argv)
int n = argc > 1 ? atoi(argv[1]+1) : 0; int n = argc > 1 ? atoi(argv[1]+1) : 0;
switch(n) switch(n)
{ {
case 0: case 0: ps0430100(argc, argv); break; //Correlazioni articoli utenti
ps0430100(argc, argv); break; //Correlazioni articoli utenti case 1: ps0430200(argc, argv); break; //Configurazione campi per utente
case 1: //case 2: ps0430300(argc, argv); break; //generazione ordini (è or1400 per il cigno)
ps0430200(argc, argv); break; //Configurazione campi per utente default: ps0430100(argc, argv); break;
case 2:
ps0430300(argc, argv); break; //generazione ordini (è or1400 per il cigno)
default:
ps0430100(argc, argv); break;
} }
exit(0);
return 0; return 0;
} }

View File

@ -18,22 +18,197 @@
class TArt_mask : public TAutomask class TArt_mask : public TAutomask
{ {
TString _query;
TISAM_recordset _recset;
bool _filter_changed;
virtual void next_page(int p);
public: public:
void update_sheet();
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TArt_mask() : TAutomask("ps0430100a") {} TArt_mask();
~TArt_mask() {}
}; };
TArt_mask::TArt_mask() : TAutomask("ps0430100a"), _recset("USE ANAMAG")
{
TConfig c(CONFIG_DITTA);
TSheet_field & sh = sfield(F_ARTICLES);
TMask & sh_mask = sh.sheet_mask();
TString80 prompt;
for (int i = 1; i <= 10; i++)
{
const int col = sh.cid2index(F_USER1 + i -1);
TEditable_field & f = sh_mask.efield(F_USER1 + i - 1);
if (c.get_bool("CHK_USER", "ve", i) && c.get_bool("USERDEF", "or", i))
{
prompt = c.get("PROMPT_USER", "ve", i);
prompt.rpad(20);
f.set_prompt(prompt);
sh.set_column_header(col, prompt);
}
else
{
f.hide();
sh.delete_column(col);
}
}
}
void TArt_mask::update_sheet()
{
const bool active_only = get_bool(F_ACTIVEONLY);
TSheet_field& sf = sfield(F_ARTICLES);
TString query("USE ANAMAG KEY ");
TString select;
TLocalisamfile multirel(LF_MULTIREL);
const TString user(get(F_USER));
const TString & codart = get(F_SCODART);
if (codart.full())
select << "(UPPER(" << ANAMAG_CODART << ")?=UPPER(\"" << codart << "\"))";
const TString & desart = get(F_SDESART);
if (desart.full())
{
if (select.full())
select << "&&";
select << "(UPPER(" << ANAMAG_DESCR << ")?=UPPER(\"" << desart << "\"))";
}
const TString & desagg = get(F_SDESAGG);
if (desagg.full())
{
if (select.full())
select << "&&";
select << "(UPPER(" << ANAMAG_DESCRAGG << ")?=UPPER(\"" << desagg << "\"))";
}
const TString & codforn = get(F_SCODFOR);
if (codforn.full())
{
if (select.full())
select << "&&";
select << "(" << ANAMAG_CODFORN << "==\"" << codforn << "\")";
}
const TString & ragsoc = get(F_SRAGSOC);
if (ragsoc.full())
{
if (select.full())
select << "&&";
select << "(UPPER(CLIFO.RAGSOC)?=UPPER(\"" << ragsoc << "\"))";
}
TString16 grmerc(get(F_GRMERC));
if (grmerc.full())
query << '3';
else
query << '1';
if (select.full())
query << "\nSELECT " << select;
grmerc.left_just(3);
grmerc << get(F_SGRMERC);
grmerc.trim();
if (grmerc.full())
query << "\nJOIN CLIFO INTO TIPOCF==\"F\" CODCF==CODFORN\nFROM GRMERC=#GRMERC\nTO GRMERC=#GRMERC";
else
query << "\nJOIN CLIFO INTO TIPOCF==\"F\" CODCF==CODFORN\n";
_recset.set(query);
TVariant var ;
var = grmerc;
_recset.set_var("#GRMERC", var);
int i = 0;
sf.destroy();
for (bool ok = _recset.move_first(); ok; ok = _recset.move_next())
{
const TString& codart = _recset.get(ANAMAG_CODART).as_string();
multirel.put(MULTI_COD, FILE_KEY);
multirel.put(MULTI_FIRST, user);
multirel.put(MULTI_SECOND, codart);
const bool act = multirel.read(_isequal) == NOERR;
if (active_only && !act)
continue;
TToken_string & row = sf.row(i++);
row.add(codart, sf.cid2index(F_CODART));
row.add(_recset.get(ANAMAG_DESCR).as_string(), sf.cid2index(F_DESCR));
row.add(act ? "X" : " ", sf.cid2index(F_ATTIVO));
row.add(_recset.get(ANAMAG_CODFORN).as_string(), sf.cid2index(F_CODFORN));
row.add(_recset.get("CLIFO.RAGSOC").as_string(), sf.cid2index(F_RAGSOC));
row.add(_recset.get(ANAMAG_GIORNIRIOR).as_string(), sf.cid2index(F_LEADTIME));
row.add(_recset.get(ANAMAG_LOTTORIOR).as_string(), sf.cid2index(F_LOTTOMIN));
row.add(_recset.get(ANAMAG_DESCRAGG).as_string().left(50), sf.cid2index(F_DESCRAGG));
row.add(_recset.get(ANAMAG_PPCONF).as_string(), sf.cid2index(F_PPCONF));
row.add(_recset.get(ANAMAG_VALSTATUN).as_string(), sf.cid2index(F_VALSTATUN));
row.add(_recset.get(ANAMAG_ULTCOS1).as_string(), sf.cid2index(F_ULTCOS1));
row.add(_recset.get(ANAMAG_USER1).as_string(), sf.cid2index(F_USER1));
row.add(_recset.get(ANAMAG_USER2).as_string(), sf.cid2index(F_USER2));
row.add(_recset.get(ANAMAG_USER3).as_string(), sf.cid2index(F_USER3));
row.add(_recset.get(ANAMAG_USER4).as_string(), sf.cid2index(F_USER4));
row.add(_recset.get(ANAMAG_USER5).as_string(), sf.cid2index(F_USER5));
row.add(_recset.get(ANAMAG_USER6).as_string(), sf.cid2index(F_USER6));
row.add(_recset.get(ANAMAG_USER7).as_string(), sf.cid2index(F_USER7));
row.add(_recset.get(ANAMAG_USER8).as_string(), sf.cid2index(F_USER8));
row.add(_recset.get(ANAMAG_USER9).as_string(), sf.cid2index(F_USER9));
row.add(_recset.get(ANAMAG_USER10).as_string(), sf.cid2index(F_USER10));
}
}
void TArt_mask::next_page(int p)
{
TAutomask::next_page(p);
if (_filter_changed)
{
TSheet_field & sf = sfield(F_ARTICLES);
if (curr_win() == sf.parent())
{
update_sheet();
sf.force_update();
_filter_changed = false;
}
}
}
bool TArt_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TArt_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
switch (o.dlg()) switch (o.dlg())
{ {
case F_GRMERC:
case F_SGRMERC:
case F_SCODART:
case F_SDESART:
case F_SDESAGG:
case F_SCODFOR:
case F_SRAGSOC:
if (e == fe_modify)
_filter_changed = true;
break;
case F_SET: case F_SET:
if (e == fe_button) if (e == fe_button)
{ {
TSheet_field& sf = sfield(F_ARTICLES); TSheet_field& sf = sfield(F_ARTICLES);
const long items = sf.items(); const int items = sf.items();
bool select = true; bool select = true;
const int cid = sf.cid2index(F_ATTIVO); const int cid = sf.cid2index(F_ATTIVO);
int i ; int i ;
@ -48,19 +223,14 @@ bool TArt_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
sf.force_update(); sf.force_update();
} }
break; break;
case F_RESET: case F_ACTIVEONLY:
if (e == fe_button) if (e == fe_modify)
{ {
TSheet_field & sf = sfield(F_ARTICLES); if (!field(F_USER).empty())
const long items = sf.items();
for (int i = 0; i < items; i++)
{ {
TToken_string & row = sf.row(i); update_sheet();
sfield(F_ARTICLES).force_update();
row.add(" ", sf.cid2index(F_ATTIVO));
} }
sf.force_update();
} }
break; break;
default: default:
@ -71,7 +241,6 @@ bool TArt_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
class TRelArticoli_multirel_app : public TMultirel_application class TRelArticoli_multirel_app : public TMultirel_application
{ {
TISAM_recordset _recset;
TArt_mask * _mask; TArt_mask * _mask;
protected: protected:
@ -92,7 +261,7 @@ public:
virtual const char * extra_modules() const {return "ba";} virtual const char * extra_modules() const {return "ba";}
TRelArticoli_multirel_app() : _recset("USE ANAMAG KEY 1") {} TRelArticoli_multirel_app() {}
virtual ~TRelArticoli_multirel_app() {} virtual ~TRelArticoli_multirel_app() {}
}; };
@ -110,11 +279,6 @@ bool TRelArticoli_multirel_app::user_create()
bool TRelArticoli_multirel_app::user_destroy() bool TRelArticoli_multirel_app::user_destroy()
{ {
/* prefix().close_closeable_isamfiles();
TSystemisamfile multirel(LF_MULTIREL);
multirel.pack(); */
delete _mask; delete _mask;
return true; return true;
} }
@ -122,33 +286,9 @@ bool TRelArticoli_multirel_app::user_destroy()
int TRelArticoli_multirel_app::read(TMask& m) int TRelArticoli_multirel_app::read(TMask& m)
{ {
const TRectype & curr = get_relation()->lfile().curr(); const TRectype & curr = get_relation()->lfile().curr();
TSheet_field & sf = m.sfield(F_ARTICLES); TArt_mask & mask = (TArt_mask &) m;
TLocalisamfile multirel(LF_MULTIREL);
const TString user(m.get(F_USER));
int i = 0;
sf.destroy(); mask.update_sheet();
for (bool ok = _recset.move_first(); ok; ok = _recset.move_next())
{
TToken_string & row = sf.row(i++);
const TString & codart = _recset.get(ANAMAG_CODART).as_string();
row.add(codart, sf.cid2index(F_CODART));
row.add(_recset.get(ANAMAG_DESCR).as_string(), sf.cid2index(F_DESCR));
row.add(_recset.get(ANAMAG_DESCRAGG).as_string(), sf.cid2index(F_DESCRAGG));
row.add(_recset.get(ANAMAG_CODFORN).as_string(), sf.cid2index(F_CODFORN));
TToken_string key; key.format("F|%ld", _recset.get(ANAMAG_CODFORN).as_int());
row.add(cache().get(LF_CLIFO, key, "RAGSOC"), sf.cid2index(F_RAGSOC));
multirel.put(MULTI_COD, FILE_KEY);
multirel.put(MULTI_FIRST, user);
multirel.put(MULTI_SECOND, codart);
if (multirel.read(_isequal) == NOERR)
row.add("X", sf.cid2index(F_ATTIVO));
else
row.add(" ", sf.cid2index(F_ATTIVO));
}
return NOERR; return NOERR;
} }
@ -156,13 +296,12 @@ int TRelArticoli_multirel_app::rewrite(const TMask& m)
{ {
int err = NOERR; int err = NOERR;
TSheet_field & sf = m.sfield(F_ARTICLES); TSheet_field & sf = m.sfield(F_ARTICLES);
int i = 0;
TLocalisamfile multirel(LF_MULTIREL); TLocalisamfile multirel(LF_MULTIREL);
const TString user(m.get(F_USER)); const TString user(m.get(F_USER));
for (bool ok = _recset.move_first(); err == NOERR && ok; ok = _recset.move_next()) for (int i = 0; i < sf.items(); i++)
{ {
TToken_string & row = sf.row(i++); TToken_string & row = sf.row(i);
bool selected = *row.get(sf.cid2index(F_ATTIVO)) > ' '; bool selected = *row.get(sf.cid2index(F_ATTIVO)) > ' ';
multirel.zero(); multirel.zero();

View File

@ -6,11 +6,38 @@
#define F_DUSER 152 #define F_DUSER 152
#define F_ARTICLES 153 #define F_ARTICLES 153
#define F_SET 154 #define F_SET 154
#define F_RESET 155 #define F_ACTIVEONLY 155
#define F_GRMERC 156
#define F_DGRMERC 157
#define F_SGRMERC 158
#define F_DSGRMERC 159
#define F_SCODART 160
#define F_SDESART 161
#define F_SDESAGG 162
#define F_SCODFOR 163
#define F_SRAGSOC 164
#define F_CODART 101 #define F_CODART 101
#define F_DESCR 102 #define F_DESCR 102
#define F_ATTIVO 103 #define F_ATTIVO 103
#define F_DESCRAGG 104 #define F_CODFORN 104
#define F_CODFORN 105 #define F_RAGSOC 105
#define F_RAGSOC 106
#define F_LEADTIME 106
#define F_LOTTOMIN 107
#define F_DESCRAGG 108
#define F_PPCONF 109
#define F_VALSTATUN 110
#define F_ULTCOS1 111
#define F_USER1 112
#define F_USER2 113
#define F_USER3 114
#define F_USER4 115
#define F_USER5 116
#define F_USER6 117
#define F_USER7 118
#define F_USER8 119
#define F_USER9 120
#define F_USER10 121

View File

@ -33,9 +33,8 @@ END
STRING F_USER 8 STRING F_USER 8
BEGIN BEGIN
PROMPT 4 2 "Utente " PROMPT 4 0 "Utente "
FLAGS "U" FLAGS "U"
// FIELD FIRST
KEY 1 KEY 1
USE LF_USER SELECT ISGROUP!="X" USE LF_USER SELECT ISGROUP!="X"
INPUT USERNAME F_USER INPUT USERNAME F_USER
@ -50,24 +49,132 @@ END
STRING F_DUSER 50 STRING F_DUSER 50
BEGIN BEGIN
PROMPT 25 2 "" PROMPT 25 0 ""
FLAGS "D" FLAGS "D"
END END
SPREADSHEET F_ARTICLES 85 -3 BOOLEAN F_ACTIVEONLY
BEGIN BEGIN
PROMPT 1 4 "Articoli" PROMPT 4 1 "Mostrare solo gli articoli attivi"
ITEM "Codice@20"
ITEM "Descrizione@45"
ITEM "Attivo"
ITEM "Descrizione fornitore@45"
ITEM "Codice Fonitore"
ITEM "Ragione sociale@45"
END END
BUTTON F_SET 10 2 BUTTON F_SET 10 2
BEGIN BEGIN
PROMPT -11 -1 "~Tutti" PROMPT -1 0 "~Tutti"
END
SPREADSHEET F_ARTICLES
BEGIN
PROMPT 1 2 "Articoli"
ITEM "Codice@20"
ITEM "Descrizione@45"
ITEM "Attivo"
ITEM "Fornit."
ITEM "Ragione sociale@45"
ITEM "Lead\ntime@5"
ITEM "Lotto minimo\ndi riordino@10"
ITEM "Descrizione aggiuntiva@50"
ITEM "Q.tà per unità\ndi vendita@15"
ITEM "Prezzo unitario@15"
ITEM "Prezzo unità\ndi vendita@15"
ITEM "Campo Aggiuntivo 1@15"
ITEM "Campo Aggiuntivo 2@15"
ITEM "Campo Aggiuntivo 3@15"
ITEM "Campo Aggiuntivo 4@15"
ITEM "Campo Aggiuntivo 5@15"
ITEM "Campo Aggiuntivo 6@15"
ITEM "Campo Aggiuntivo 7@15"
ITEM "Campo Aggiuntivo 8@15"
ITEM "Campo Aggiuntivo 9@15"
ITEM "Campo Aggiuntivo 10@15"
END
ENDPAGE
PAGE "Filtri" -1 -1 80 20
STRING F_GRMERC 3
BEGIN
PROMPT 2 4 "Gruppo merceologico "
FLAG "U"
USE GMC KEY 1 SELECT CODTAB[4,5]==""
INPUT CODTAB F_GRMERC
DISPLAY "Codice" CODTAB[1,3]
DISPLAY "Descrizione@50" S0
OUTPUT F_GRMERC CODTAB[1,3]
OUTPUT F_DGRMERC S0
CHECKTYPE SEARCH
FIELD OR14_GRM
END
STRING F_DGRMERC 50 35
BEGIN
PROMPT 35 4 ""
USE GMC KEY 2 SELECT CODTAB[4,5]==""
INPUT S0 F_DGRMERC
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_GRMERC CODTAB[1,3]
OUTPUT F_DGRMERC S0
CHECKTYPE SEARCH
END
STRING F_SGRMERC 2
BEGIN
PROMPT 2 6 "Sottogruppo merceologico "
FLAG "U"
USE GMC
INPUT CODTAB[1,3] F_GRMERC
INPUT CODTAB[4,5] F_SGRMERC
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_GRMERC CODTAB[1,3]
OUTPUT F_SGRMERC CODTAB[4,5]
OUTPUT F_DSGRMERC S0
CHECKTYPE NORMAL
FIELD OR14_SGR
END
STRING F_DSGRMERC 50 35
BEGIN
PROMPT 35 6 ""
USE GMC KEY 2 SELECT CODTAB[4,5] != ""
INPUT S0 F_DSGRMERC
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_SGRMERC
CHECKTYPE NORMAL
END
STRING F_SCODART 20
BEGIN
PROMPT 2 8 "Codice articolo "
END
STRING F_SDESART 50
BEGIN
PROMPT 2 10 "Descrizione "
END
STRING F_SDESAGG 50
BEGIN
PROMPT 2 12 "Descrizione aggiuntiva "
END
STRING F_SCODFOR 7
BEGIN
PROMPT 2 14 "Codice fornitore "
USE LF_CLIFO
INPUT TIPOCF "F"
INPUT CODCF F_SCODFOR
DISPLAY "Codice " CODCF
DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT F_SCODFOR CODCF
END
STRING F_SRAGSOC 50
BEGIN
PROMPT 2 16 "Ragione sociale "
END END
ENDPAGE ENDPAGE
@ -93,24 +200,138 @@ BEGIN
PROMPT 2 4 "Attivo per questo utente" PROMPT 2 4 "Attivo per questo utente"
END END
STRING F_DESCRAGG 50 45 NUMBER F_CODFORN 6
BEGIN BEGIN
PROMPT 2 6 " " PROMPT 2 6 " "
FLAGS "D" FLAGS "D"
END END
NUMBER F_CODFORN 6 STRING F_RAGSOC 50 45
BEGIN BEGIN
PROMPT 2 8 " " PROMPT 2 8 " "
FLAGS "D" FLAGS "D"
END END
STRING F_RAGSOC 50 45 NUMBER F_LEADTIME 5
BEGIN BEGIN
PROMPT 2 10 " " PROMPT 2 10 "Lead time "
FLAGS "D" FLAGS "D"
END END
NUMBER F_LOTTOMIN 10 3
BEGIN
PROMPT 42 10 "Lotto "
FLAGS "D"
END
STRING F_DESCRAGG 50 45
BEGIN
PROMPT 2 12 " "
FLAGS "D"
END
NUMBER F_PPCONF 15
BEGIN
PROMPT 2 12 "Q.tà per unità di vendita "
FLAGS "D"
END
NUMBER F_VALSTATUN 15 5
BEGIN
PROMPT 2 14 "Prezzo unitario "
FLAGS "D"
END
NUMBER F_ULTCOS1 15 5
BEGIN
PROMPT 2 16 "Prezzo unità di vendita "
FLAGS "D"
END
BUTTON DLG_OK 11 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 11 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Campi Utente" -1 -1 80 20
STRING F_USER1 20
BEGIN
PROMPT 2 2 "Campo utente 1 "
FLAGS "D"
END
STRING F_USER2 20
BEGIN
PROMPT 2 4 "Campo utente 2 "
FLAGS "D"
END
STRING F_USER3 20
BEGIN
PROMPT 2 6 "Campo utente 3 "
FLAGS "D"
END
STRING F_USER4 20
BEGIN
PROMPT 2 8 "Campo utente 4 "
FLAGS "D"
END
STRING F_USER5 20
BEGIN
PROMPT 2 10 "Campo utente 5 "
FLAGS "D"
END
STRING F_USER6 20
BEGIN
PROMPT 2 12 "Campo utente 6 "
FLAGS "D"
END
STRING F_USER7 20
BEGIN
PROMPT 2 14 "Campo utente 7 "
FLAGS "D"
END
STRING F_USER8 20
BEGIN
PROMPT 2 16 "Campo utente 8 "
FLAGS "D"
END
STRING F_USER9 20
BEGIN
PROMPT 2 18 "Campo utente 9 "
FLAGS "D"
END
STRING F_USER10 20
BEGIN
PROMPT 2 20 "Campo utente 10 "
FLAGS "D"
END
BUTTON DLG_OK 11 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 11 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

View File

@ -1,10 +1,13 @@
#include <applicat.h>
#include <automask.h> #include <automask.h>
#include <relation.h> #include <defmask.h>
#include <msksheet.h>
#include <mask.h>
#include <recarray.h>
#include <recset.h>
#include <tabapp.h>
#include <multirel.h> #include <multirel.h>
#include "../mg/anamag.h" #include "../mg/anamag.h"
#include "ps0430200a.h" #include "ps0430200a.h"
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -13,23 +16,13 @@
class TUser_mask : public TAutomask class TUser_mask : public TAutomask
{ {
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public: public:
bool get_user_ini(TFilename& name) const; virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TUser_mask() : TAutomask("ps0430200a") {} TUser_mask() : TAutomask("ps0430200a") {}
~TUser_mask() {}
}; };
bool TUser_mask::get_user_ini(TFilename& name) const
{
name = prefix().get_studio();
name.add("config");
name.add(get(F_USER));
name.ext("ini");
return name.exist();
}
bool TUser_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TUser_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
switch (o.dlg()) switch (o.dlg())
@ -37,9 +30,11 @@ bool TUser_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
case F_USER: case F_USER:
if (e == fe_modify) if (e == fe_modify)
{ {
const char* const defpar = "or"; const TString& new_user = o.get();
TFilename inipath; get_user_ini(inipath); const TString16 old_user = user();
TConfig userconf(inipath, defpar); user() = new_user;
const char* defpar = "or";
TConfig userconf(CONFIG_USER, defpar);
for (int i = o.mask().fields()-1; i >= 0; i--) for (int i = o.mask().fields()-1; i >= 0; i--)
{ {
@ -47,11 +42,9 @@ bool TUser_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
const TFieldref* fr = f.field(); const TFieldref* fr = f.field();
if (fr != NULL) if (fr != NULL)
{
f.set(fr->read(userconf, defpar)); f.set(fr->read(userconf, defpar));
f.check();
}
} }
user() = old_user;
} }
break; break;
default: default:
@ -62,9 +55,12 @@ bool TUser_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
class TUser_set_app : public TSkeleton_application class TUser_set_app : public TSkeleton_application
{ {
protected: public:
virtual const char * extra_modules() const {return "ba";} virtual const char * extra_modules() const {return "ba";}
virtual void main_loop(); virtual void main_loop();
TUser_set_app() {}
virtual ~TUser_set_app() {}
}; };
void TUser_set_app::main_loop() void TUser_set_app::main_loop()
@ -73,17 +69,20 @@ void TUser_set_app::main_loop()
while (mask.run() == K_ENTER) while (mask.run() == K_ENTER)
{ {
const char* const defpar = "or"; const TString& new_user = mask.get(F_USER);
TFilename inipath; mask.get_user_ini(inipath); const TString16 old_user = user();
TConfig userconf(inipath, defpar); user() = new_user;
const char* defpar = "or";
TConfig userconf(CONFIG_USER, defpar);
for (int i = mask.fields()-1; i >= 0; i--) for (int i = mask.fields()-1; i >= 0; i--)
{ {
const TMask_field& f = mask.fld(i); TMask_field& f = mask.fld(i);
const TFieldref* fr = f.field(); const TFieldref* fr = f.field();
if (fr != NULL) if (fr != NULL)
fr->write(userconf, defpar, f.get()); fr->write(userconf, defpar, f.get());
} }
user() = old_user;
mask.reset(); mask.reset();
} }
} }

View File

@ -21,4 +21,11 @@
#define F_FSCT 119 #define F_FSCT 119
#define F_DASTATO 120 #define F_DASTATO 120
#define F_ASTATO 121 #define F_ASTATO 121
#define F_CODNUMCAR 122
#define F_DESNUMCAR 123
#define F_TIPODOCCAR 124
#define F_DESTIPODOCCAR 125
#define F_STATOEVASO 126
#define F_STATOINI 127

View File

@ -68,7 +68,7 @@ END
STRING F_SGRMERC 2 STRING F_SGRMERC 2
BEGIN BEGIN
PROMPT 2 6 "Sottogr.merc ." PROMPT 2 5 "Sottogr.merc. "
FLAG "U" FLAG "U"
USE GMC USE GMC
INPUT CODTAB[1,3] F_GRMERC INPUT CODTAB[1,3] F_GRMERC
@ -84,7 +84,7 @@ END
STRING F_DSGRMERC 50 STRING F_DSGRMERC 50
BEGIN BEGIN
PROMPT 29 6 "" PROMPT 29 5 ""
USE GMC KEY 2 SELECT CODTAB[4,5] != "" USE GMC KEY 2 SELECT CODTAB[4,5] != ""
INPUT S0 F_DSGRMERC INPUT S0 F_DSGRMERC
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
@ -95,7 +95,7 @@ END
STRING F_CDCT 20 STRING F_CDCT 20
BEGIN BEGIN
PROMPT 2 8 "CDC/Commessa " PROMPT 2 7 "CDC/Commessa "
FLAGS "UZ" FLAGS "UZ"
USE CMS USE CMS
INPUT CODTAB F_CDCT INPUT CODTAB F_CDCT
@ -108,7 +108,7 @@ END
STRING F_FSCT 10 STRING F_FSCT 10
BEGIN BEGIN
PROMPT 45 8 "Fase " PROMPT 45 7 "Fase "
FLAGS "UZ" FLAGS "UZ"
USE FSC USE FSC
INPUT CODTAB F_FSCT INPUT CODTAB F_FSCT
@ -121,7 +121,7 @@ END
STRING F_CODNUM 4 STRING F_CODNUM 4
BEGIN BEGIN
PROMPT 2 10 "Numerazione " PROMPT 2 9 "Numerazione "
USE %NUM USE %NUM
INPUT CODTAB F_CODNUM INPUT CODTAB F_CODNUM
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
@ -135,7 +135,7 @@ END
STRING F_DESNUM 50 STRING F_DESNUM 50
BEGIN BEGIN
PROMPT 29 10 "" PROMPT 29 9 ""
USE %NUM KEY 2 USE %NUM KEY 2
INPUT S0 F_DESNUM INPUT S0 F_DESNUM
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
@ -146,7 +146,7 @@ END
STRING F_TIPODOC 4 STRING F_TIPODOC 4
BEGIN BEGIN
PROMPT 2 12 "Tipo " PROMPT 2 10 "Tipo "
USE %TIP USE %TIP
INPUT CODTAB F_TIPODOC INPUT CODTAB F_TIPODOC
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
@ -160,7 +160,7 @@ END
STRING F_DESTIPODOC 50 STRING F_DESTIPODOC 50
BEGIN BEGIN
PROMPT 29 12 "" PROMPT 29 10 ""
USE %TIP KEY 2 USE %TIP KEY 2
INPUT S0 F_DESTIPODOC INPUT S0 F_DESTIPODOC
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
@ -169,9 +169,85 @@ BEGIN
CHECKTYPE SEARCH CHECKTYPE SEARCH
END END
STRING F_CODNUMCAR 4
BEGIN
PROMPT 2 12 "Num.doc.carico "
USE %NUM
INPUT CODTAB F_CODNUMCAR
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODNUMCAR CODTAB
OUTPUT F_DESNUMCAR S0
FLAG "UG"
CHECKTYPE NORMAL
FIELD OR14_NUMCAR
END
STRING F_DESNUMCAR 50
BEGIN
PROMPT 29 12 ""
USE %NUM KEY 2
INPUT S0 F_DESNUMCAR
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_CODNUMCAR
CHECKTYPE SEARCH
END
STRING F_TIPODOCCAR 4
BEGIN
PROMPT 2 13 "Tipo doc.car. "
USE %TIP
INPUT CODTAB F_TIPODOCCAR
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_TIPODOCCAR CODTAB
OUTPUT F_DESTIPODOCCAR S0
CHECKTYPE NORMAL
FLAG "UG"
FIELD OR14_TIPCAR
END
STRING F_DESTIPODOCCAR 50
BEGIN
PROMPT 29 13 ""
USE %TIP KEY 2
INPUT S0 F_DESTIPODOCCAR
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_TIPODOCCAR
CHECKTYPE SEARCH
END
STRING F_STATOEVASO 1
BEGIN
PROMPT 2 13 "Tipo doc.car. "
PROMPT 2 14 "Stato ord. ev. "
USE %STD
INPUT CODTAB F_STATOEVASO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_STATOEVASO CODTAB
CHECKTYPE NORMAL
FIELD OR14_STATOEVASO
END
STRING F_STATOINI 1
BEGIN
PROMPT 52 14 "Stato ordine iniziale "
USE %STD
INPUT CODTAB F_STATOINI
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_STATOINI CODTAB
CHECKTYPE NORMAL
FIELD OR14_STATOINI
END
STRING F_MAG 3 STRING F_MAG 3
BEGIN BEGIN
PROMPT 2 14 "Magazzino " PROMPT 2 15 "Magazzino "
FLAGS "UG" FLAGS "UG"
USE MAG SELECT CODTAB[4,5]=="" USE MAG SELECT CODTAB[4,5]==""
INPUT CODTAB F_MAG INPUT CODTAB F_MAG
@ -185,7 +261,7 @@ END
STRING F_DESMAG 50 STRING F_DESMAG 50
BEGIN BEGIN
PROMPT 29 14 "" PROMPT 29 15 ""
USE MAG KEY 2 SELECT CODTAB[4,5]=="" USE MAG KEY 2 SELECT CODTAB[4,5]==""
INPUT S0 F_DESMAG INPUT S0 F_DESMAG
DISPLAY "Denominazione magazzino@50" S0 DISPLAY "Denominazione magazzino@50" S0

View File

@ -7,7 +7,6 @@
#include <progind.h> #include <progind.h>
#include <reprint.h> #include <reprint.h>
#include <utility.h> #include <utility.h>
#include <xvtility.h>
#include "../or/orlib.h" #include "../or/orlib.h"
#include "../cg/cglib01.h" #include "../cg/cglib01.h"
@ -95,14 +94,13 @@ class TGenera_ordini_mask : public TAutomask
TString _doc_filter; TString _doc_filter;
int _days_interval; int _days_interval;
int _riga_da_selezionare; int _riga_da_selezionare;
short _campo_da_selezionare;
bool _filter_changed, _order_changed; bool _filter_changed, _order_changed;
private: private:
void serialize(bool bSave); void serialize(bool bSave);
void load_user_defs(); void load_user_defs();
void update_sheet(); void update_sheet();
void update_documents(); void update_orders();
void reconstruction(const TDocumento& doc2delete); void reconstruction(const TDocumento& doc2delete);
protected: protected:
@ -133,14 +131,6 @@ protected:
public: public:
void generate_orders(); void generate_orders();
void generate_carics(); void generate_carics();
void generate_docs_head(const char type, const TSheet_field& sf,
long& minforn, long& maxforn, TAssoc_array& documents);
void generate_caric_row(const TSheet_field& sf, TToken_string* row, const real qta,
TDocumento* d,TRiga_documento& rdoc, TLocalisamfile& righedoc);
void generate_order_row(const TSheet_field& sf, TToken_string* row, const real qta,
TDocumento* d, TRiga_documento& rdoc, const TRectype& forn, const TRectype& fornven);
void write_docs(const char tipo, const long& minforn, const long& maxforn, TAssoc_array& documents);
virtual bool create(); virtual bool create();
virtual void main_loop(); virtual void main_loop();
virtual bool destroy(); virtual bool destroy();
@ -275,34 +265,34 @@ void TGenera_ordini_mask::update_sheet()
TToken_string & row = sf.row(i); TToken_string & row = sf.row(i);
const TString & codart = recset.get(LF_ANAMAG, ANAMAG_CODART).as_string(); const TString & codart = recset.get(LF_ANAMAG, ANAMAG_CODART).as_string();
row.add(codart, sf.cid2index(SA_CODART)); row.add(codart, sf.cid2index(F_CODART));
art.read(codart); art.read(codart);
const real giac = art.giacenza_anno(codmag, "", anno); const real giac = art.giacenza_anno(codmag, "", anno);
row.add(recset.get(LF_ANAMAG, ANAMAG_DESCR).as_string(), sf.cid2index(SA_DESCR)); row.add(recset.get(LF_ANAMAG, ANAMAG_DESCR).as_string(), sf.cid2index(F_DESCR));
row.add(recset.get("UMART.UM").as_string(), sf.cid2index(SA_UM)); row.add(recset.get("UMART.UM").as_string(), sf.cid2index(F_UM));
const long codforn = recset.get(LF_ANAMAG, ANAMAG_CODFORN).as_int(); const long codforn = recset.get(LF_ANAMAG, ANAMAG_CODFORN).as_int();
row.add(codforn, sf.cid2index(SA_FORNITORE)); row.add(codforn, sf.cid2index(F_FORNITORE));
row.add(recset.get("CLIFO.RAGSOC").as_string(), sf.cid2index(SA_RAGSOC)); row.add(recset.get("CLIFO.RAGSOC").as_string(), sf.cid2index(F_RAGSOC));
row.add(recset.get(LF_ANAMAG, ANAMAG_GIORNIRIOR).as_string(), sf.cid2index(SA_LEADTIME)); row.add(recset.get(LF_ANAMAG, ANAMAG_GIORNIRIOR).as_string(), sf.cid2index(F_LEADTIME));
row.add(recset.get(LF_ANAMAG, ANAMAG_LOTTORIOR).as_string(), sf.cid2index(SA_LOTTOMIN)); row.add(recset.get(LF_ANAMAG, ANAMAG_LOTTORIOR).as_string(), sf.cid2index(F_LOTTOMIN));
row.add(recset.get(LF_ANAMAG, ANAMAG_DESCRAGG).as_string(), sf.cid2index(SA_DESCRAGG)); row.add(recset.get(LF_ANAMAG, ANAMAG_DESCRAGG).as_string(), sf.cid2index(F_DESCRAGG));
row.add(giac.string(), sf.cid2index(SA_GIACENZA)); row.add(giac.string(), sf.cid2index(F_GIACENZA));
row.add(recset.get(LF_ANAMAG, ANAMAG_PPCONF).as_string(), sf.cid2index(SA_PPCONF)); row.add(recset.get(LF_ANAMAG, ANAMAG_PPCONF).as_string(), sf.cid2index(F_PPCONF));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER1).as_string(), sf.cid2index(SA_USER1)); row.add(recset.get(LF_ANAMAG, ANAMAG_USER1).as_string(), sf.cid2index(F_USER1));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER2).as_string(), sf.cid2index(SA_USER2)); row.add(recset.get(LF_ANAMAG, ANAMAG_USER2).as_string(), sf.cid2index(F_USER2));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER3).as_string(), sf.cid2index(SA_USER3)); row.add(recset.get(LF_ANAMAG, ANAMAG_USER3).as_string(), sf.cid2index(F_USER3));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER4).as_string(), sf.cid2index(SA_USER4)); row.add(recset.get(LF_ANAMAG, ANAMAG_USER4).as_string(), sf.cid2index(F_USER4));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER5).as_string(), sf.cid2index(SA_USER5)); row.add(recset.get(LF_ANAMAG, ANAMAG_USER5).as_string(), sf.cid2index(F_USER5));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER6).as_string(), sf.cid2index(SA_USER6)); row.add(recset.get(LF_ANAMAG, ANAMAG_USER6).as_string(), sf.cid2index(F_USER6));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER7).as_string(), sf.cid2index(SA_USER7)); row.add(recset.get(LF_ANAMAG, ANAMAG_USER7).as_string(), sf.cid2index(F_USER7));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER8).as_string(), sf.cid2index(SA_USER8)); row.add(recset.get(LF_ANAMAG, ANAMAG_USER8).as_string(), sf.cid2index(F_USER8));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER9).as_string(), sf.cid2index(SA_USER9)); row.add(recset.get(LF_ANAMAG, ANAMAG_USER9).as_string(), sf.cid2index(F_USER9));
row.add(recset.get(LF_ANAMAG, ANAMAG_USER10).as_string(), sf.cid2index(SA_USER10)); row.add(recset.get(LF_ANAMAG, ANAMAG_USER10).as_string(), sf.cid2index(F_USER10));
const real disp = art.disponibilita(codes, get(F_MAG), NULL); const real disp = art.disponibilita(codes, get(F_MAG), NULL);
row.add(disp.string(), sf.cid2index(SA_DISPON)); row.add(disp.string(), sf.cid2index(F_DISPON));
sf.check_row(i); sf.check_row(i);
if (check_expr) if (check_expr)
{ {
@ -328,12 +318,12 @@ void TGenera_ordini_mask::update_sheet()
sf.force_update(); sf.force_update();
} }
void TGenera_ordini_mask::update_documents() void TGenera_ordini_mask::update_orders()
{ {
_order_changed = false; _order_changed = false;
TWait_cursor hourglass; TWait_cursor hourglass;
TSheet_field& sh = sfield(F_DOCUMENTS); TSheet_field& sh = sfield(F_ORDERS);
sh.destroy(); sh.destroy();
TString query; TString query;
@ -360,7 +350,7 @@ void TGenera_ordini_mask::update_documents()
TMask& m = sh.sheet_mask(); TMask& m = sh.sheet_mask();
TRelation& rel = *orders.cursor()->relation(); TRelation& rel = *orders.cursor()->relation();
const int status_pos = sh.cid2index(SD_STATODOC); const int status_pos = sh.cid2index(S_STATODOC);
for (bool ok = orders.move_first(); ok; ok = orders.move_next()) for (bool ok = orders.move_first(); ok; ok = orders.move_next())
{ {
TToken_string& row = sh.row(-1); TToken_string& row = sh.row(-1);
@ -397,9 +387,9 @@ void TGenera_ordini_mask::next_page(int p)
} }
if (_order_changed) if (_order_changed)
{ {
const TSheet_field& sf = sfield(F_DOCUMENTS); const TSheet_field& sf = sfield(F_ORDERS);
if (win() == sf.parent()) if (win() == sf.parent())
update_documents(); update_orders();
} }
} }
@ -411,19 +401,19 @@ bool TGenera_ordini_mask::on_sheet_event(TOperable_field& o, TField_event e, lon
case se_query_del: case se_query_del:
case se_query_add: case se_query_add:
return false; return false;
case fe_init: case fe_init:
if (o.dlg() == F_ARTICLES) if (o.dlg() == F_ARTICLES)
update_sheet(); update_sheet();
else else
update_documents(); update_orders();
break; break;
//gestione automatica immissione qta per articolo (con terminalino)
case se_notify_modify: case se_notify_modify:
if (o.dlg() == F_ARTICLES) if (o.dlg() == F_ARTICLES)
{ {
_campo_da_selezionare = F_CAZ_CODART; TEdit_field& cc = efield(F_CAZ_CODART);
cc.reset();
cc.set_focus();
} }
break; break;
@ -514,7 +504,7 @@ bool TGenera_ordini_mask::on_field_event(TOperable_field& o, TField_event e, lon
case F_DASTATO: case F_DASTATO:
case F_ASTATO: case F_ASTATO:
if (e == fe_modify) if (e == fe_modify)
update_documents(); update_orders();
break; break;
case F_CAZ_CODART: //ricerca riga da codart in testa alla maschera case F_CAZ_CODART: //ricerca riga da codart in testa alla maschera
@ -620,7 +610,7 @@ bool TGenera_ordini_mask::on_field_event(TOperable_field& o, TField_event e, lon
capp().print_doc(c->curr()); capp().print_doc(c->curr());
update_sheet(); update_sheet();
update_documents(); update_orders();
} }
ok = false; // Non uscire ok = false; // Non uscire
} }
@ -668,7 +658,7 @@ bool TGenera_ordini_mask::on_field_event(TOperable_field& o, TField_event e, lon
doc.remove(); doc.remove();
} }
update_sheet(); update_sheet();
update_documents(); update_orders();
} }
ok = false; // Non uscire ok = false; // Non uscire
} }
@ -677,7 +667,7 @@ bool TGenera_ordini_mask::on_field_event(TOperable_field& o, TField_event e, lon
if (e == fe_button && jolly == 0) if (e == fe_button && jolly == 0)
{ {
capp().generate_orders(); capp().generate_orders();
update_documents(); update_orders();
update_sheet(); update_sheet();
ok = false; ok = false;
} }
@ -686,7 +676,7 @@ bool TGenera_ordini_mask::on_field_event(TOperable_field& o, TField_event e, lon
if (e == fe_button && jolly == 0) if (e == fe_button && jolly == 0)
{ {
capp().generate_carics(); capp().generate_carics();
update_documents(); update_orders();
update_sheet(); update_sheet();
ok = false; ok = false;
} }
@ -742,23 +732,12 @@ void TGenera_ordini_mask::on_idle()
TAutomask::on_idle(); TAutomask::on_idle();
if (_riga_da_selezionare >= 0) if (_riga_da_selezionare >= 0)
{ {
TString msg;
msg << "Vado alla riga " << _riga_da_selezionare;
xvtil_statbar_set(msg);
//si posiziona sulla qta //si posiziona sulla qta
TSheet_field& sf_righe = sfield(F_ARTICLES); TSheet_field& sf_righe = sfield(F_ARTICLES);
sf_righe.set_focus(); const int column = sf_righe.cid2index(F_QTA);
sf_righe.select(_riga_da_selezionare, true); sf_righe.select(_riga_da_selezionare, column, true);
_riga_da_selezionare = -1; _riga_da_selezionare = -1;
} sf_righe.set_focus();
//si riposiziona sul campo selezionatore resettandolo in modo da perdere il precedente articolo
if (_campo_da_selezionare > 0)
{
TEdit_field& cc = efield(_campo_da_selezionare);
_campo_da_selezionare = -1;
cc.reset();
cc.set_focus();
} }
} }
@ -793,8 +772,8 @@ TGenera_ordini_mask::TGenera_ordini_mask()
for (int i = 1; i <= 10; i++) for (int i = 1; i <= 10; i++)
{ {
const int col = sh.cid2index(SA_USER1 + i -1); const int col = sh.cid2index(F_USER1 + i -1);
TEditable_field & f = sh_mask.efield(SA_USER1 + i - 1); TEditable_field & f = sh_mask.efield(F_USER1 + i - 1);
if (c.get_bool("CHK_USER", "ve", i) && c.get_bool("USERDEF", "or", i)) if (c.get_bool("CHK_USER", "ve", i) && c.get_bool("USERDEF", "or", i))
{ {
@ -812,7 +791,6 @@ TGenera_ordini_mask::TGenera_ordini_mask()
//resetta l'indicatore di riga da selezionare //resetta l'indicatore di riga da selezionare
_riga_da_selezionare = -1; _riga_da_selezionare = -1;
_campo_da_selezionare = -1;
} }
TGenera_ordini_mask::~TGenera_ordini_mask() TGenera_ordini_mask::~TGenera_ordini_mask()
@ -849,30 +827,28 @@ void TCreazione_ordini::print()
{ {
_mask->field(DLG_PRINT).on_hit(); _mask->field(DLG_PRINT).on_hit();
} }
void TCreazione_ordini::print_doc(const TRectype & doc) void TCreazione_ordini::print_doc(const TRectype & doc)
{ {
const TTipo_documento tipo(doc.get(DOC_TIPODOC)); const TTipo_documento tipo(doc.get(DOC_TIPODOC));
TFilename rep; TFilename rep; tipo.main_print_profile(rep, 0);
tipo.main_print_profile(rep, 0); rep.ext("rep");
TString cmdline; TString commandline;
if (rep.ends_with("rep", true)) // Esiste il nuovo report :-) if (rep.custom_path()) // Esiste il nuovo report :-)
cmdline = "ve1 -2"; commandline = "ve1 -2";
else // Esiste il vecchio form :-( else // Esiste il vecchio form :-(
cmdline = "ve1 -0"; commandline = "ve1 -0";
cmdline << ' ' << doc.get(DOC_CODNUM) << ' ' << doc.get(DOC_ANNO) << ' '; commandline << ' ' << doc.get(DOC_CODNUM) << ' ' << doc.get(DOC_ANNO) << ' ';
cmdline << doc.get(DOC_PROVV) << ' ' << doc.get(DOC_NDOC) << ' ' << doc.get(DOC_NDOC); commandline << doc.get(DOC_PROVV) << ' ' << doc.get(DOC_NDOC) << ' ' << doc.get(DOC_NDOC);
cmdline << " D"; commandline << " D";
const int ncopie = tipo.ncopie(); const int ncopie = tipo.ncopie();
if (ncopie > 0) if (ncopie > 0)
cmdline << ' ' << ncopie; commandline << ' ' << ncopie;
TExternal_app interattivo( cmdline ); TExternal_app interattivo( commandline );
interattivo.run(); interattivo.run();
} }
@ -897,201 +873,71 @@ void TCreazione_ordini::aggiorna_stato_doc_orig(const TRectype& rdoc)
} }
} }
void TCreazione_ordini::generate_carics()
//genera la riga del documento di carico (una sola per chiamata)
void TCreazione_ordini::generate_caric_row(const TSheet_field& sf, TToken_string* row,
const real qta, TDocumento* d, TRiga_documento& rdoc, TLocalisamfile& righedoc)
{ {
const TDate dataord = row->get(sf.cid2index(SD_DATADOC)); TGenera_ordini_mask& mask = *_mask;
const long ndoc = row->get_long(sf.cid2index(SD_NUMDOC)); TSheet_field& sf = mask.sfield(F_ORDERS);
const int nriga = row->get_int(sf.cid2index(SD_NUMRIGA));
TRectype& rigcar = righedoc.curr(); long minforn = 999999L;
rigcar.put(RDOC_PROVV, 'D'); long maxforn = 0L;
rigcar.put(RDOC_ANNO, dataord.year()); TAssoc_array orders;
rigcar.put(RDOC_CODNUM, _mask->get(F_CODNUM));
rigcar.put(RDOC_NDOC, ndoc); if (sf.items() > 0)
rigcar.put(RDOC_NRIGA, nriga);
int err = righedoc.read(_isequal, _lock);
if (err == NOERR)
{ {
d->copy_data(rdoc, rigcar); const TDate datadoc = mask.get_date(F_DATADOCCAR);
rdoc.put(rdoc.field_qta(), qta);
rigcar.add(rdoc.field_qtaevasa(), qta);
if (rigcar.get_real(rdoc.field_qtaevasa()) >= rigcar.get_real(rdoc.field_qta()))
rigcar.put(RDOC_RIGAEVASA, true);
rdoc.put(RDOC_DACODNUM, rigcar.get(RDOC_CODNUM));
rdoc.put(RDOC_DAANNO, rigcar.get(RDOC_ANNO));
rdoc.put(RDOC_DAPROVV, rigcar.get(RDOC_PROVV));
rdoc.put(RDOC_DANDOC, rigcar.get(RDOC_NDOC));
rdoc.put(RDOC_DAIDRIGA, rigcar.get(RDOC_NRIGA));
err = righedoc.rewrite();
if (err == NOERR)
aggiorna_stato_doc_orig(rigcar);
}
if (err != NOERR)
error_box(FR("Impossibile aggiornare la riga %d del doc. %ld"), nriga, ndoc);
}
//genera la riga del documento ordine (una sola per chiamata)
void TCreazione_ordini::generate_order_row(const TSheet_field& sf, TToken_string* row, const real qta,
TDocumento* d, TRiga_documento& rdoc, const TRectype& forn, const TRectype& fornven)
{
const TString codart = row->get(sf.cid2index(SA_CODART));
TString8 codmag = _mask->get(F_MAG);
codmag.right_just(3);
codmag << _mask->get(F_DEP);
TString8 codmagc = _mask->get(F_MAGC);
codmagc.right_just(3);
codmagc << _mask->get(F_DEPC);
const bool ultimo_prezzo = _mask->get(F_PREZZO) == "U";
rdoc.put(RDOC_CODMAG, codmag);
rdoc.put(RDOC_CODMAGC, codmagc);
rdoc.put(RDOC_CODART, codart);
rdoc.put(RDOC_CODARTMAG, codart);
rdoc.put(RDOC_CHECKED, "X");
rdoc.put(RDOC_DESCR, row->get(sf.cid2index(SA_DESCR)));
const TString descr_agg = row->get(sf.cid2index(SA_DESCRAGG));
if (descr_agg.full())
{
rdoc.put(RDOC_DESCLUNGA, "X");
rdoc.put(RDOC_DESCEST, descr_agg);
}
rdoc.put(RDOC_UMQTA, row->get(sf.cid2index(SA_UM)));
rdoc.put(RDOC_QTA, qta);
const TDate datacons(row->get(sf.cid2index(SA_DATACONS)));
rdoc.put(RDOC_DATACONS, datacons);
const TRectype& articolo = cache().get(LF_ANAMAG, codart);
TPrice prezzo;
if (ultimo_prezzo)
prezzo = articolo.get_real(ANAMAG_ULTCOS1);
else
prezzo = articolo.get_real(ANAMAG_COSTSTD);
const TString4 codval = forn.get(CLI_CODVAL);
prezzo.change_value(codval);
rdoc.put(RDOC_PREZZO, prezzo.get_num());
const TString4 codiva = fornven.get(CFV_ASSFIS);
if (codiva.full())
rdoc.put(RDOC_CODIVA, codiva);
else
rdoc.put(RDOC_CODIVA, articolo.get(ANAMAG_CODIVA));
const TString commessa = row->get(sf.cid2index(SA_CDC));
const TString fase = row->get(sf.cid2index(SA_FSC));
rdoc.put(RDOC_CODCMS, commessa);
rdoc.put(RDOC_FASCMS, fase);
for (int i = 0; i < 10 ; i++)
if (_userfld.row(i).full())
rdoc.put(_userfld.row(i), _mask->get(SA_USER1 + i));
rdoc.put(RDOC_CODAGG1, row->get(sf.cid2index(SA_CODAGG1)));
rdoc.put(RDOC_CODAGG2, row->get(sf.cid2index(SA_CODAGG2)));
}
//genera la testata del documento di 'C'arico o dell''O'rdine e chiama i metodi per creare le righe..
//..di entrambi
void TCreazione_ordini::generate_docs_head(const char type, const TSheet_field& sf,
long& minforn, long& maxforn, TAssoc_array& documents)
{
TString msg;
TString4 codnum, tipodoc;
TDate datadoc;
TLocalisamfile righedoc(LF_RIGHEDOC);
switch (type)
{
case 'C':
{
datadoc = _mask->get_date(F_DATADOCCAR);
const char* const defpar = "or"; const char* const defpar = "or";
TConfig c(CONFIG_USER, defpar); TConfig c(CONFIG_USER, defpar);
codnum = c.get("OR14_NUMCAR"); const TString& codnum = c.get("OR14_NUMCAR");
tipodoc = c.get("OR14_TIPCAR"); const TString& tipodoc = c.get("OR14_TIPCAR");
msg << "Generazione documenti di carico";
}
break;
case 'O':
{
datadoc = _mask->get_date(F_DATADOC);
codnum = _mask->get(F_CODNUM);
tipodoc = _mask->get(F_TIPODOC);
msg << "Generazione ordini";
}
break;
default:
break;
}
//parte comune ai casi 'C' ed 'O'
const TTipo_documento tipo(tipodoc); const TTipo_documento tipo(tipodoc);
const TString& commessa_testata = _mask->get(F_CDCT);
const TString& fase_testata = _mask->get(F_FSCT);
TProgind pi(sf.items(), msg, true, true); //const bool ultimo_prezzo = mask.get(F_PREZZO) == "U";
const TString& commessat = mask.get(F_CDCT);
const TString& faset = mask.get(F_FSCT);
//giro su tutte le righe dello sheet //TString8 codmag(mask.get(F_MAG));
//codmag.right_just(3);
//codmag << mask.get(F_DEP);
//TString8 codmagc(mask.get(F_MAGC));
//codmagc.right_just(3);
//codmagc << mask.get(F_DEPC);
TLocalisamfile righedoc(LF_RIGHEDOC);
TProgind pi(sf.items(), TR("Generazione documenti di carico"), true, true);
FOR_EACH_SHEET_ROW(sf, n, row) FOR_EACH_SHEET_ROW(sf, n, row)
{ {
if (!pi.setstatus(n)) if (!pi.setstatus(n))
break; break;
if (row->get_char(sf.cid2index(SD_DAEVADERE) == 'X')) if (row->get_char(sf.cid2index(S_DAEVADERE) == 'X'))
{ {
real qta; const real qta = row->get(sf.cid2index(S_QTADAEVADERE));
TString8 codforn;
TDate datacons;
if (type == 'C')
{
qta = row->get(sf.cid2index(SD_QTADAEVADERE));
codforn = row->get(sf.cid2index(SD_FORNITORE));
datacons = row->get(sf.cid2index(SD_DATACONS));
}
else
{
qta = row->get(sf.cid2index(SA_QTA));
codforn = row->get(sf.cid2index(SA_FORNITORE));
datacons = row->get(sf.cid2index(SA_DATACONS));
}
if (!qta.is_zero()) if (!qta.is_zero())
{ {
//dati relativi al fornitore.. const TString8 codforn(row->get(sf.cid2index(S_FORNITORE)));
const long cod = atol(codforn); const long cod = atol(codforn);
TString8 key; key.format("F|%ld", cod); TString8 key; key.format("F|%ld", cod);
const TRectype& forn = cache().get(LF_CLIFO, key); const TRectype& forn = cache().get(LF_CLIFO, key);
//..e cfven collegato const TDate datacons(row->get(sf.cid2index(S_DATACONS)));
const TString4 codval(forn.get(CLI_CODVAL));
const TRectype& forven = cache().get(LF_CFVEN, key); const TRectype& forven = cache().get(LF_CFVEN, key);
const TString4 codiva(forven.get(CFV_ASSFIS));
const TString commessa = row->get(sf.cid2index(S_CDC));
const TString fase = row->get(sf.cid2index(S_FSC));
TDocumento* d = (TDocumento*)documents.objptr(codforn); TDocumento* d = (TDocumento*)orders.objptr(codforn);
if (d == NULL) if (d == NULL)
{ {
//il documento va creato
d = new TDocumento('D', datadoc.year(), codnum, 0L); d = new TDocumento('D', datadoc.year(), codnum, 0L);
d->put(DOC_TIPODOC, tipodoc); d->put(DOC_TIPODOC, tipodoc);
d->put(DOC_TIPOCF, "F"); d->put(DOC_TIPOCF, "F");
d->put(DOC_CODCF, codforn); d->put(DOC_CODCF, codforn);
d->put(DOC_DATADOC, datadoc); d->put(DOC_DATADOC, datadoc);
d->put(DOC_DATACONS, datacons); d->put(DOC_DATACONS, datacons);
d->put(DOC_CODVAL, forn.get(CLI_CODVAL)); d->put(DOC_CODVAL, codval);
d->put(DOC_CODLIN, forn.get(CLI_CODLIN)); d->put(DOC_CODLIN, forn.get(CLI_CODLIN));
d->put(DOC_CODPAG, forn.get(CLI_CODPAG)); d->put(DOC_CODPAG, forn.get(CLI_CODPAG));
d->put(DOC_CODABIA, forn.get(CLI_CODABI)); d->put(DOC_CODABIA, forn.get(CLI_CODABI));
@ -1116,49 +962,103 @@ void TCreazione_ordini::generate_docs_head(const char type, const TSheet_field&
d->put(DOC_ADDBOLLI, forven.get(CFV_ADDBOLLI)); d->put(DOC_ADDBOLLI, forven.get(CFV_ADDBOLLI));
d->put(DOC_CATVEN, forven.get(CFV_CATVEN)); d->put(DOC_CATVEN, forven.get(CFV_CATVEN));
d->put(DOC_CODLIST, forven.get(CFV_CODLIST)); d->put(DOC_CODLIST, forven.get(CFV_CODLIST));
d->put(DOC_CODCMS, commessa_testata); d->put(DOC_CODCMS, commessat);
if (type == 'O') // le note non dovrebbero servire
d->put(DOC_NOTE, _mask->get(F_NOTE)); //d->put(DOC_NOTE, mask.get(F_NOTE));
const TString& causmag = tipo.caus_mov(); const TString& causmag = tipo.caus_mov();
d->put(DOC_CAUSMAG, causmag); d->put(DOC_CAUSMAG, causmag);
documents.add(codforn, d); orders.add(codforn, d);
if (cod < minforn) if (cod < minforn)
minforn = cod; minforn = cod;
if (cod > maxforn) if (cod > maxforn)
maxforn = cod; maxforn = cod;
} //if (d == NULL)... }
//generazione righe del documento
TRiga_documento& rdoc = d->new_row("01"); TRiga_documento& rdoc = d->new_row("01");
if (type == 'C')
generate_caric_row(sf, row, qta, d, rdoc, righedoc); /* guy si e' molto arrabbiato nel leggere queste righe di pseudo codice (attenzione, morde!)
const TString codart(row->get(sf.cid2index(S_CODART)));
//rdoc.put(RDOC_CODMAG, codmag);
//rdoc.put(RDOC_CODMAGC, codmagc);
rdoc.put(RDOC_CODART, codart);
rdoc.put(RDOC_CODARTMAG, codart);
rdoc.put(RDOC_CHECKED, "X");
rdoc.put(RDOC_DESCR, row->get(sf.cid2index(S_DESCART)));
//const TString descr_agg(row->get(sf.cid2index(S_DESCRAGG)));
//if (descr_agg.full())
//{
// rdoc.put(RDOC_DESCLUNGA, "X");
// rdoc.put(RDOC_DESCEST, descr_agg);
//}
rdoc.put(RDOC_UMQTA, row->get(sf.cid2index(S_UM)));
rdoc.put(RDOC_QTA, qta);
rdoc.put(RDOC_DATACONS, datacons);
const TRectype& articolo = cache().get(LF_ANAMAG, codart);
//TPrice prezzo;
//if (ultimo_prezzo)
// prezzo = articolo.get_real(ANAMAG_ULTCOS1);
//else
// prezzo = articolo.get_real(ANAMAG_COSTSTD);
//prezzo.change_value(codval);
//rdoc.put(RDOC_PREZZO, prezzo.get_num());
if (codiva.full())
rdoc.put(RDOC_CODIVA, codiva);
else else
generate_order_row(sf, row, qta, d, rdoc, forn, forven); rdoc.put(RDOC_CODIVA, articolo.get(ANAMAG_CODIVA));
rdoc.put(RDOC_CODCMS, commessa);
rdoc.put(RDOC_FASCMS, fase);
for (int i = 0; i < 10 ; i++)
if (_userfld.row(i).full())
rdoc.put(_userfld.row(i), mask.get(F_USER1 + i));
} //if (!qta.is_zero())... rdoc.put(RDOC_CODAGG1, row->get(sf.cid2index(F_CODAGG1)));
} //if (row->get_char... rdoc.put(RDOC_CODAGG2, row->get(sf.cid2index(F_CODAGG2)));
} //FOR_EACH_SHEET_ROW(sf, n, row)... */
const TDate dataord = row->get(sf.cid2index(S_DATADOC));
const long ndoc = row->get_long(sf.cid2index(S_NUMDOC));
const int nriga = row->get_int(sf.cid2index(S_NUMRIGA));
TRectype& rigord = righedoc.curr();
rigord.put(RDOC_PROVV, 'D');
rigord.put(RDOC_ANNO, dataord.year());
rigord.put(RDOC_CODNUM, mask.get(F_CODNUM));
rigord.put(RDOC_NDOC, ndoc);
rigord.put(RDOC_NRIGA, nriga);
int err = righedoc.read(_isequal, _lock);
if (err == NOERR)
{
d->copy_data(rdoc, rigord);
rdoc.put(rdoc.field_qta(), qta);
rigord.add(rdoc.field_qtaevasa(), qta);
if (rigord.get_real(rdoc.field_qtaevasa()) >= rigord.get_real(rdoc.field_qta()))
rigord.put(RDOC_RIGAEVASA, true);
rdoc.put(RDOC_DACODNUM, rigord.get(RDOC_CODNUM));
rdoc.put(RDOC_DAANNO, rigord.get(RDOC_ANNO));
rdoc.put(RDOC_DAPROVV, rigord.get(RDOC_PROVV));
rdoc.put(RDOC_DANDOC, rigord.get(RDOC_NDOC));
rdoc.put(RDOC_DAIDRIGA, rigord.get(RDOC_NRIGA));
err = righedoc.rewrite();
if (err == NOERR)
aggiorna_stato_doc_orig(rigord);
} }
if (err != NOERR)
error_box(FR("Impossibile aggiornare la riga %d del doc. %ld"), nriga, ndoc);
//salva i documenti generati }
void TCreazione_ordini::write_docs(const char tipo, const long& minforn, const long& maxforn, TAssoc_array& documents) }
{ }
TString msg;
switch (tipo)
{
case 'C': msg << "Registrazione documenti di carico"; break;
case 'O': msg << "Registrazione ordini"; break;
default: break;
} }
TProgind pi(documents.items(), msg, true, true); if (orders.items() > 0)
{
TProgind pi(orders.items(), TR("Registrazione documenti di carico"), true, true);
TString cmdline; TString cmdline;
int cnt = 0; int cnt = 0;
TString8 key; TString8 key;
@ -1166,7 +1066,199 @@ void TCreazione_ordini::write_docs(const char tipo, const long& minforn, const l
for (long cod = minforn; cod <= maxforn; cod++) for (long cod = minforn; cod <= maxforn; cod++)
{ {
key.format("%ld", cod); key.format("%ld", cod);
TDocumento* d = (TDocumento*)documents.objptr(key); TDocumento* d = (TDocumento*)orders.objptr(key);
if (d != NULL)
{
if (!pi.addstatus(1))
break;
if (d->write() == NOERR)
{
if (cmdline.blank())
{
const TTipo_documento& tipo = d->tipo();
TFilename rep;
tipo.main_print_profile(rep, 1);
rep.ext("rep");
if (rep.custom_path()) // Esiste il nuovo report :-)
cmdline = "ve1 -2";
else // Esiste il vecchio form :-(
cmdline = "ve1 -0";
}
cnt++;
const long ndoc = d->get_long(DOC_NDOC);
if (mindoc <= 0 || ndoc < mindoc)
mindoc = ndoc;
if (ndoc > maxdoc)
maxdoc = ndoc;
}
}
}
if (yesno_box(TR("Sono stati generati %d documenti:\nSi desidera stamparli ora?"), cnt))
{
const TString& codnum = mask.get(F_CODNUM);
const TDate datadoc(TODAY);
const int anno = datadoc.year();
cmdline << " " << codnum << ' ' << anno << " D " << mindoc << ' ' << maxdoc;
TExternal_app prg(cmdline);
prg.run(true, true, false);
}
}
}
void TCreazione_ordini::generate_orders()
{
TGenera_ordini_mask& mask = *_mask;
TSheet_field& sf = mask.sfield(F_ARTICLES);
long minforn = 999999L;
long maxforn = 0L;
TAssoc_array orders;
if (sf.items() > 0)
{
const TDate datadoc = mask.get_date(F_DATADOC);
const TString& codnum = mask.get(F_CODNUM);
const TString& tipodoc = mask.get(F_TIPODOC);
const TTipo_documento tipo(tipodoc);
const bool ultimo_prezzo = mask.get(F_PREZZO) == "U";
const TString& commessat = mask.get(F_CDCT);
const TString& faset = mask.get(F_FSCT);
TString8 codmag(mask.get(F_MAG));
codmag.right_just(3);
codmag << mask.get(F_DEP);
TString8 codmagc(mask.get(F_MAGC));
codmagc.right_just(3);
codmagc << mask.get(F_DEPC);
TProgind pi(sf.items(), TR("Generazione ordini"), true, true);
FOR_EACH_SHEET_ROW(sf, n, row)
{
if (!pi.setstatus(n))
break;
const real qta = row->get(sf.cid2index(F_QTA));
if (!qta.is_zero())
{
const TString8 codforn(row->get(sf.cid2index(F_FORNITORE)));
const long cod = atol(codforn);
TString8 key; key.format("F|%ld", cod);
const TRectype& forn = cache().get(LF_CLIFO, key);
const TDate datacons(row->get(sf.cid2index(F_DATACONS)));
const TString4 codval(forn.get(CLI_CODVAL));
const TRectype& forven = cache().get(LF_CFVEN, key);
const TString4 codiva(forven.get(CFV_ASSFIS));
const TString commessa = row->get(sf.cid2index(F_CDC));
const TString fase = row->get(sf.cid2index(F_FSC));
TDocumento* d = (TDocumento*)orders.objptr(codforn);
if (d == NULL)
{
d = new TDocumento('D', datadoc.year(), codnum, 0L);
d->put(DOC_TIPODOC, tipodoc);
d->put(DOC_TIPOCF, "F");
d->put(DOC_CODCF, codforn);
d->put(DOC_DATADOC, datadoc);
d->put(DOC_DATACONS, datacons);
d->put(DOC_CODVAL, codval);
d->put(DOC_CODLIN, forn.get(CLI_CODLIN));
d->put(DOC_CODPAG, forn.get(CLI_CODPAG));
d->put(DOC_CODABIA, forn.get(CLI_CODABI));
d->put(DOC_CODCABA, forn.get(CLI_CODCAB));
d->put(DOC_IBAN, forn.get(CLI_IBAN));
d->put(DOC_CODABIP, forven.get(CFV_CODABIPR));
d->put(DOC_CODCABP, forven.get(CFV_CODCABPR));
d->put(DOC_RAGGR, forven.get(CFV_RAGGDOC));
d->put(DOC_RAGGREFF, forven.get(CFV_RAGGEFF));
d->put(DOC_CODINDSP, forven.get(CFV_CODINDSP));
d->put(DOC_CODAG, forven.get(CFV_CODAG));
d->put(DOC_ZONA, forven.get(CFV_CODZONA));
d->put(DOC_CODSPMEZZO, forven.get(CFV_CODSPMEZZO));
d->put(DOC_CODPORTO, forven.get(CFV_CODPORTO));
d->put(DOC_CODNOTESP1, forven.get(CFV_CODNOTESP1));
d->put(DOC_CODNOTESP2, forven.get(CFV_CODNOTESP2));
d->put(DOC_CODNOTE, forven.get(CFV_CODNOTE));
d->put(DOC_CODVETT1, forven.get(CFV_CODVETT1));
d->put(DOC_CODVETT2, forven.get(CFV_CODVETT2));
d->put(DOC_CODVETT3, forven.get(CFV_CODVETT3));
d->put(DOC_PERCSPINC, forven.get(CFV_PERCSPINC));
d->put(DOC_ADDBOLLI, forven.get(CFV_ADDBOLLI));
d->put(DOC_CATVEN, forven.get(CFV_CATVEN));
d->put(DOC_CODLIST, forven.get(CFV_CODLIST));
d->put(DOC_CODCMS, commessat);
d->put(DOC_NOTE, mask.get(F_NOTE));
const TString& causmag = tipo.caus_mov();
d->put(DOC_CAUSMAG, causmag);
orders.add(codforn, d);
if (cod < minforn)
minforn = cod;
if (cod > maxforn)
maxforn = cod;
}
TRiga_documento& rdoc = d->new_row("01");
const TString codart(row->get(sf.cid2index(F_CODART)));
rdoc.put(RDOC_CODMAG, codmag);
rdoc.put(RDOC_CODMAGC, codmagc);
rdoc.put(RDOC_CODART, codart);
rdoc.put(RDOC_CODARTMAG, codart);
rdoc.put(RDOC_CHECKED, "X");
rdoc.put(RDOC_DESCR, row->get(sf.cid2index(F_DESCR)));
const TString descr_agg(row->get(sf.cid2index(F_DESCRAGG)));
if (descr_agg.full())
{
rdoc.put(RDOC_DESCLUNGA, "X");
rdoc.put(RDOC_DESCEST, descr_agg);
}
rdoc.put(RDOC_UMQTA, row->get(sf.cid2index(F_UM)));
rdoc.put(RDOC_QTA, qta);
rdoc.put(RDOC_DATACONS, datacons);
const TRectype& articolo = cache().get(LF_ANAMAG, codart);
TPrice prezzo;
if (ultimo_prezzo)
prezzo = articolo.get_real(ANAMAG_ULTCOS1);
else
prezzo = articolo.get_real(ANAMAG_COSTSTD);
prezzo.change_value(codval);
rdoc.put(RDOC_PREZZO, prezzo.get_num());
if (codiva.full())
rdoc.put(RDOC_CODIVA, codiva);
else
rdoc.put(RDOC_CODIVA, articolo.get(ANAMAG_CODIVA));
rdoc.put(RDOC_CODCMS, commessa);
rdoc.put(RDOC_FASCMS, fase);
for (int i = 0; i < 10 ; i++)
if (_userfld.row(i).full())
rdoc.put(_userfld.row(i), mask.get(F_USER1 + i));
rdoc.put(RDOC_CODAGG1, row->get(sf.cid2index(F_CODAGG1)));
rdoc.put(RDOC_CODAGG2, row->get(sf.cid2index(F_CODAGG2)));
}
}
}
if (orders.items() > 0)
{
TProgind pi(orders.items(), TR("Registrazione ordini"), true, true);
TString cmdline;
int cnt = 0;
TString8 key;
long mindoc = 0, maxdoc = 0;
for (long cod = minforn; cod <= maxforn; cod++)
{
key.format("%ld", cod);
TDocumento* d = (TDocumento*)orders.objptr(key);
if (d != NULL) if (d != NULL)
{ {
if (!pi.addstatus(1)) if (!pi.addstatus(1))
@ -1178,66 +1270,32 @@ void TCreazione_ordini::write_docs(const char tipo, const long& minforn, const l
const TTipo_documento& tipo = d->tipo(); const TTipo_documento& tipo = d->tipo();
TFilename rep; TFilename rep;
tipo.main_print_profile(rep, 0); tipo.main_print_profile(rep, 0);
rep.ext("rep");
if (rep.ends_with("rep", true)) // Esiste il nuovo report :-) if (rep.custom_path()) // Esiste il nuovo report :-)
cmdline = "ve1 -2"; cmdline = "ve1 -2";
else // Esiste il vecchio form :-( else // Esiste il vecchio form :-(
cmdline = "ve1 -0"; cmdline = "ve1 -0";
} //if (cmdline.blank())... }
cnt++; cnt++;
const long ndoc = d->get_long(DOC_NDOC); const long ndoc = d->get_long(DOC_NDOC);
if (mindoc <= 0 || ndoc < mindoc) if (mindoc <= 0 || ndoc < mindoc)
mindoc = ndoc; mindoc = ndoc;
if (ndoc > maxdoc) if (ndoc > maxdoc)
maxdoc = ndoc; maxdoc = ndoc;
} //if (d->write() == NOERR)... }
} //if (d != NULL)... }
} //for (long cod = minforn; cod <= maxforn; cod++)... }
if (yesno_box(TR("Sono stati generati %d documenti:\nSi desidera stamparli ora?"), cnt)) if (yesno_box(TR("Sono stati generati %d documenti:\nSi desidera stamparli ora?"), cnt))
{ {
const TString& codnum = _mask->get(F_CODNUM); const TString& codnum = mask.get(F_CODNUM);
const TDate datadoc(TODAY); const TDate datadoc(TODAY);
const int anno = datadoc.year(); const int anno = datadoc.year();
cmdline << " " << codnum << ' ' << anno << " D " << mindoc << ' ' << maxdoc; cmdline << " " << codnum << ' ' << anno << " D " << mindoc << ' ' << maxdoc;
TExternal_app prg(cmdline); TExternal_app prg(cmdline);
prg.run(true, true, false); prg.run(true, true, false);
} //if (yesno_box(TR("Sono...
} }
void TCreazione_ordini::generate_carics()
{
TSheet_field& sf = _mask->sfield(F_DOCUMENTS);
long minforn = 999999L;
long maxforn = 0L;
TAssoc_array carics;
if (sf.items() > 0)
generate_docs_head('C', sf, minforn, maxforn, carics);
if (carics.items() > 0)
write_docs('C', minforn, maxforn, carics);
} }
//genera gli ordini a partire dalle righe articolo sullo sheet F_ARTICLES
void TCreazione_ordini::generate_orders()
{
TSheet_field& sf = _mask->sfield(F_ARTICLES);
long minforn = 999999L;
long maxforn = 0L;
TAssoc_array orders;
if (sf.items() > 0)
generate_docs_head('O', sf, minforn, maxforn, orders);
if (orders.items() > 0)
write_docs('O', minforn, maxforn, orders);
} }
void TCreazione_ordini::main_loop() void TCreazione_ordini::main_loop()

File diff suppressed because it is too large Load Diff