Aggiunta prima versione programmi:
- Gestione agenti - Gestione provvigioni - Gestione tabelle Da fare: stampe varie git-svn-id: svn://10.65.10.50/trunk@5108 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
3f560b06df
commit
1fe4f39307
27
pr/agenti.h
Executable file
27
pr/agenti.h
Executable file
@ -0,0 +1,27 @@
|
||||
#ifndef __AGE_H
|
||||
#define __AGE_H
|
||||
|
||||
#define AGE_CODAGE "CODAGE"
|
||||
#define AGE_RAGSOC "RAGSOC"
|
||||
#define AGE_CODFORN "CODFORN"
|
||||
#define AGE_TIPO "TIPO"
|
||||
#define AGE_CODCAPO "CODCAPO"
|
||||
#define AGE_PERCCAPO "PERCCAPO"
|
||||
#define AGE_PERCFATT "PERCFATT"
|
||||
#define AGE_PERCPAG "PERCPAG"
|
||||
#define AGE_TIPOIMP "TIPOIMP"
|
||||
#define AGE_TIPOCAL "TIPOCAL"
|
||||
#define AGE_PERCPROVV "PERCPROVV"
|
||||
#define AGE_SEQRIC "SEQRIC"
|
||||
#define AGE_CODRICPR1 "CODRICPR1"
|
||||
#define AGE_CODRICPR2 "CODRICPR2"
|
||||
#define AGE_CODRICPR3 "CODRICPR3"
|
||||
#define AGE_CODRICPR4 "CODRICPR4"
|
||||
#define AGE_SEQALT "SEQALT"
|
||||
#define AGE_CODALTPR1 "CODALTPR1"
|
||||
#define AGE_CODALTPR2 "CODALTPR2"
|
||||
#define AGE_CODALTPR3 "CODALTPR3"
|
||||
#define AGE_CODALTPR4 "CODALTPR4"
|
||||
|
||||
#endif
|
||||
|
@ -1,3 +1,3 @@
|
||||
122
|
||||
0
|
||||
$agenti|0|0|116|36|Archivio agenti|||
|
||||
$agenti|0|0|110|36|Archivio agenti|||
|
||||
|
@ -1,5 +1,5 @@
|
||||
122
|
||||
21
|
||||
20
|
||||
CODAGE|1|5|0|Codice agente
|
||||
RAGSOC|1|50|0|Ragioe sociale
|
||||
CODFORN|3|6|0|Codice fornitore relativo
|
||||
@ -7,8 +7,7 @@ TIPO|1|1|0|Tipo (<A>gente, <C>apozona, <S>ubagente
|
||||
CODCAPO|1|5|0|Codice dell'agente capozona
|
||||
PERCCAPO|4|5|2|Percentuale di provvigione del capozona
|
||||
PERCFATT|4|6|2|Percentuale di provvigione da liquidare all'atto della fatturazione
|
||||
PERCPAG|4|6|2|Percentuale di provvigione da liquidare all'atto del pagamento
|
||||
TIPOIMP1|1|1|0|Tipo importo su cui calcolare le provvigioni (<L>ordo, <N>etto)
|
||||
TIPOIMP|1|1|0|Tipo importo su cui calcolare le provvigioni (<L>ordo, <N>etto)
|
||||
TIPOCAL|1|1|0|Tipo di calcolo della provvigione (<D>ocumento, <R>iga per riga)
|
||||
PERCPROVV|4|5|2|Percentuale di provvigione fissa dell'agente
|
||||
SEQRIC|1|4|0|Sequenza di ricerca percentuale di provvigione (<A>gente, Categoria di <V>endita, <M>agazzino, <C>liente, C<O>ndizioni di vendita, Archivio <P>rovvigioni
|
||||
|
@ -1,3 +1,3 @@
|
||||
123
|
||||
0
|
||||
$percprov|0|0|32|36|Archivio percentuali di provvigione|||
|
||||
$percprov|0|0|67|36|Archivio percentuali di provvigione|||
|
||||
|
@ -1,9 +1,9 @@
|
||||
123
|
||||
5
|
||||
CODPR|1|2|0|Codice archivio percentuale di provvigione
|
||||
KEY|1|4|0|Chiave parametrica
|
||||
TIPO|1|2|0|Tipo (Provvigione a <P>ercentuale , a <I>mporto unitario, a <V>alore complessivo))
|
||||
KEYORD|1|40|0|Chiave parametrica
|
||||
TIPO|1|1|0|Tipo (Provvigione a <P>ercentuale , a <I>mporto unitario, a <V>alore complessivo))
|
||||
PERCPROVV|4|5|2|Percentuale di provvigione
|
||||
IMPORTO|4|18|2|Importo unitario o Valore
|
||||
1
|
||||
CODPR+KEY|
|
||||
CODPR+KEYORD|
|
||||
|
10
pr/f124.trr
10
pr/f124.trr
@ -4,15 +4,15 @@ CODAGE|1|5|0|Codice agente
|
||||
ANNO|2|4|0|Anno del documento
|
||||
CODNUM|1|4|0|Codice numerazione del documento
|
||||
NDOC|3|7|0|Numero documento
|
||||
NRIGA|1|4|0|Numero riga
|
||||
NRATA|1|4|0|Numero rata
|
||||
NRIGA|2|4|0|Numero riga
|
||||
NRATA|2|4|0|Numero rata
|
||||
GENERATA|1|1|0|Flag di generazione (< >Immessa, generata dal <D>ocumento)
|
||||
DATADOC|5|8|0|Data del documento
|
||||
IMPDOC|4|18|2|Totale documento
|
||||
IMPPRDOC|4|18|2|Provvigione totale del documento
|
||||
IMPNETDOC|4|18|2|Importo base di calcolo delle provvigioni (?)
|
||||
CODCLI|3|6|0|Codice cliente
|
||||
TIPOPAG|1|1|0|Tipo pagamento
|
||||
TIPOPAG|2|1|0|Tipo pagamento
|
||||
CODVAL|1|3|0|Codice valuta
|
||||
CAMBIO|4|18|2|Cambio della valuta
|
||||
DATACAMBIO|5|8|0|Data cambio
|
||||
@ -24,6 +24,6 @@ PAGATO|4|18|2|Importo rata pagato
|
||||
PROVVPAG|4|18|2|Provvigione pagata
|
||||
PAGMAT|4|18|2|Pagamento maturato
|
||||
PROVVMAT|4|18|2|Provvigione maturata
|
||||
TIPOPAGPR|1|1|0|Tipo pagamento della provvigione (?)
|
||||
TIPOPAGPR|2|1|0|Tipo pagamento della provvigione (?)
|
||||
1
|
||||
CODAGE+ANNO+CODNUM+NDOC+NRIGA+NRATA|
|
||||
CODAGE+NRIGA|
|
||||
|
11
pr/percprov.h
Executable file
11
pr/percprov.h
Executable file
@ -0,0 +1,11 @@
|
||||
#ifndef __PER_H
|
||||
#define __PER_H
|
||||
|
||||
#define PER_CODPR "CODPR"
|
||||
#define PER_KEYORD "KEYORD"
|
||||
#define PER_TIPO "TIPO"
|
||||
#define PER_PERCPROVV "PERCPROVV"
|
||||
#define PER_IMPORTO "IMPORTO"
|
||||
|
||||
#endif
|
||||
|
34
pr/pr0.cpp
Executable file
34
pr/pr0.cpp
Executable file
@ -0,0 +1,34 @@
|
||||
#include <xvt.h>
|
||||
#include <checks.h>
|
||||
|
||||
#include "pr0.h"
|
||||
|
||||
const char* const usage = "Errore - uso : %s -{0|1|2|3|4|5|6}";
|
||||
|
||||
int main(int argc,char** argv)
|
||||
{
|
||||
const int n = argc > 1 ? atoi(argv[1]+1) : -1;
|
||||
|
||||
switch (n)
|
||||
{
|
||||
case 0:
|
||||
pr0100(argc,argv); break; // gestione tabelle
|
||||
case 1:
|
||||
pr0200(argc,argv); break; // stampa tabelle
|
||||
case 2:
|
||||
pr0300(argc,argv); break; // parametri studio
|
||||
case 3:
|
||||
pr0400(argc,argv); break; // parametri ditta
|
||||
case 4:
|
||||
pr0500(argc,argv); break; // gestione agenti
|
||||
case 5:
|
||||
pr0600(argc,argv); break; // gestione archivi percentuali di provvigione
|
||||
case 6:
|
||||
pr0700(argc,argv); break; // gestione provvigioni agenti
|
||||
default:
|
||||
error_box(usage, argv[0]);
|
||||
}
|
||||
exit(0);
|
||||
return 0;
|
||||
}
|
||||
|
13
pr/pr0.h
Executable file
13
pr/pr0.h
Executable file
@ -0,0 +1,13 @@
|
||||
#ifndef __PR0_H
|
||||
#define __PR0_H
|
||||
|
||||
int pr0100(int argc, char** argv);
|
||||
int pr0200(int argc, char** argv);
|
||||
int pr0300(int argc, char** argv);
|
||||
int pr0400(int argc, char** argv);
|
||||
int pr0500(int argc, char** argv);
|
||||
int pr0600(int argc, char** argv);
|
||||
int pr0700(int argc, char** argv);
|
||||
|
||||
#endif // __PR0_H
|
||||
|
49
pr/pr0.url
Executable file
49
pr/pr0.url
Executable file
@ -0,0 +1,49 @@
|
||||
#include <default.url>
|
||||
|
||||
/* pr0 -0 Gestione tabelle */
|
||||
|
||||
MENU TASK_MENUBAR
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* pr0 -1 Stampa tabelle */
|
||||
MENUBAR MENU_BAR(1)
|
||||
|
||||
MENU MENU_BAR(1)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* pr0 -2 Parametri studio */
|
||||
|
||||
MENUBAR MENU_BAR(2)
|
||||
|
||||
MENU MENU_BAR(2)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* pr0 -3 Parametri ditta */
|
||||
|
||||
MENUBAR MENU_BAR(3)
|
||||
|
||||
MENU MENU_BAR(3)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* pr0 -4 Gestione agenti */
|
||||
|
||||
MENUBAR MENU_BAR(4)
|
||||
|
||||
MENU MENU_BAR(4)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* pr0 -5 Gestione percentuali di provvigione */
|
||||
|
||||
MENUBAR MENU_BAR(5)
|
||||
|
||||
MENU MENU_BAR(5)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* pr0 -6 Gestione provvigioni */
|
||||
|
||||
MENUBAR MENU_BAR(6)
|
||||
|
||||
MENU MENU_BAR(6)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
|
70
pr/pr0100.cpp
Executable file
70
pr/pr0100.cpp
Executable file
@ -0,0 +1,70 @@
|
||||
// Programma generico di gestione tabelle modulo provvigioni agenti
|
||||
|
||||
#include <tabapp.h>
|
||||
#include <tabutil.h>
|
||||
#include "prtbapr.h"
|
||||
|
||||
class TTablePR_app : public Tab_application
|
||||
{
|
||||
protected:
|
||||
virtual bool user_destroy() ;
|
||||
virtual bool user_create() ;
|
||||
static bool gmc_handler(TMask_field& f, KEY k);
|
||||
public:
|
||||
|
||||
TTablePR_app() {}
|
||||
virtual ~TTablePR_app() {}
|
||||
};
|
||||
|
||||
static inline TTablePR_app& app() { return (TTablePR_app&)main_app(); }
|
||||
|
||||
bool TTablePR_app::gmc_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.to_check(k))
|
||||
{
|
||||
TString v1 = f.get(),v2;
|
||||
TMask& m = f.mask();
|
||||
if (v1 == "E" || v1 == "R")
|
||||
{
|
||||
for (short id = F_SEQRIC1; id <= F_SEQRIC4; id++)
|
||||
{
|
||||
if (f.dlg() == id)
|
||||
continue;
|
||||
v2 = m.get(id);
|
||||
if (v1 == "E" && v2 == "R" || v1 == "R" && v2 == "E")
|
||||
return f.error_box("Non e' possibile usare contemporaneamente la "
|
||||
"tabella gruppo merceologico e la tabella sottogruppo "
|
||||
"merceologico");
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TTablePR_app::user_create()
|
||||
{
|
||||
Tab_application::user_create();
|
||||
const TString& name = get_tabname();
|
||||
TMask& mask = *get_mask();
|
||||
if (name == "APR")
|
||||
{
|
||||
mask.set_handler(F_SEQRIC1,gmc_handler);
|
||||
mask.set_handler(F_SEQRIC2,gmc_handler);
|
||||
mask.set_handler(F_SEQRIC3,gmc_handler);
|
||||
mask.set_handler(F_SEQRIC4,gmc_handler);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TTablePR_app::user_destroy()
|
||||
{
|
||||
return Tab_application::user_destroy();
|
||||
}
|
||||
|
||||
int pr0100(int argc, char** argv)
|
||||
{
|
||||
TTablePR_app a;
|
||||
a.run(argc, argv, "Tabella");
|
||||
return 0;
|
||||
}
|
5
pr/pr0200.cpp
Executable file
5
pr/pr0200.cpp
Executable file
@ -0,0 +1,5 @@
|
||||
|
||||
int pr0200(int argc, char** argv)
|
||||
{
|
||||
return 0;
|
||||
}
|
5
pr/pr0300.cpp
Executable file
5
pr/pr0300.cpp
Executable file
@ -0,0 +1,5 @@
|
||||
|
||||
int pr0300(int argc, char** argv)
|
||||
{
|
||||
return 0;
|
||||
}
|
5
pr/pr0400.cpp
Executable file
5
pr/pr0400.cpp
Executable file
@ -0,0 +1,5 @@
|
||||
|
||||
int pr0400(int argc, char** argv)
|
||||
{
|
||||
return 0;
|
||||
}
|
130
pr/pr0500.cpp
Executable file
130
pr/pr0500.cpp
Executable file
@ -0,0 +1,130 @@
|
||||
// Programma di gestione agenti
|
||||
|
||||
#include <relapp.h>
|
||||
|
||||
#include "agenti.h"
|
||||
#include "pr0.h"
|
||||
#include "pr0500a.h"
|
||||
|
||||
class TGestione_agenti_app:public TRelation_application
|
||||
{
|
||||
TMask *_msk;
|
||||
TRelation *_rel;
|
||||
TLocalisamfile *_age;
|
||||
|
||||
protected:
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
virtual TMask* get_mask(int mode) {return _msk;}
|
||||
virtual bool changing_mask(int mode) {return FALSE;}
|
||||
virtual TRelation* get_relation() const {return _rel;}
|
||||
static bool percfat_handler(TMask_field& f, KEY k);
|
||||
static bool codcapo_handler(TMask_field& f, KEY k);
|
||||
static bool seqalt_handler(TMask_field& f, KEY k);
|
||||
static bool codalt_handler(TMask_field& f, KEY k);
|
||||
public:
|
||||
TGestione_agenti_app() {};
|
||||
~TGestione_agenti_app() {};
|
||||
};
|
||||
|
||||
static inline TGestione_agenti_app& app() { return (TGestione_agenti_app&) main_app(); }
|
||||
|
||||
bool TGestione_agenti_app::percfat_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.to_check(k,TRUE))
|
||||
{
|
||||
const real p = 100.0 - real(f.get());
|
||||
f.mask().set(F_PERCPAG,p);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_agenti_app::codcapo_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.to_check(k) && k == K_ENTER) // Solo prima che prema il pulsante di registrazione
|
||||
{
|
||||
TLocalisamfile* agenti = app()._age;
|
||||
TRecfield agente(agenti->curr(),AGE_CODAGE);
|
||||
TRecfield capo(agenti->curr(),AGE_CODCAPO);
|
||||
TString ag = f.mask().get(F_CODAGE),ca = f.get();
|
||||
agente = ca;
|
||||
while (agenti->read() == NOERR)
|
||||
{
|
||||
ca = capo;
|
||||
if (ca == ag)
|
||||
break;
|
||||
if (ca.empty())
|
||||
break;
|
||||
agente = ca;
|
||||
}
|
||||
if (agenti->good() && ca == ag)
|
||||
return f.error_box("Il codice del capozona inserito non e' valido, in quanto e' stato rilevato nella catena un codice capozona corrispondente al presente codice agente.");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_agenti_app::seqalt_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.to_check(k) && k == K_ENTER) // Solo prima che prema il pulsante di registrazione
|
||||
{
|
||||
if (f.get() == "A")
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
if (m.get(F_SEQRIC1) == "A" || m.get(F_SEQRIC2) == "A" ||
|
||||
m.get(F_SEQRIC3) == "A" || m.get(F_SEQRIC4) == "A")
|
||||
return f.error_box("La percentuale definita nell'agente non puo' essere usata nella indicazione "
|
||||
"di percentuale aggiuntiva se gia' utilizzata nella sequenza di ricerca della percentuale di provvigione");
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_agenti_app::codalt_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.to_check(k) && k == K_ENTER) // Solo prima che prema il pulsante di registrazione
|
||||
{
|
||||
TString16 cod = f.get();
|
||||
if (cod.not_empty())
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
if (m.get(F_CODRICPR1) == cod || m.get(F_CODRICPR2) == cod ||
|
||||
m.get(F_CODRICPR3) == cod || m.get(F_CODRICPR4) == cod)
|
||||
return f.error_box("L'archivio provvigioni %s definito nella indicazione di percentuale aggiuntiva non puo' essere utilizzato "
|
||||
"se gia' impostato nella sequenza di ricerca della percentuale di provvigione", (const char*)cod);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_agenti_app::user_create()
|
||||
{
|
||||
_msk = new TMask("pr0500a") ;
|
||||
_rel = new TRelation(LF_AGENTI);
|
||||
_msk->set_handler(F_CODCAPO,codcapo_handler);
|
||||
_msk->set_handler(F_SEQALT1,seqalt_handler);
|
||||
_msk->set_handler(F_SEQALT2,seqalt_handler);
|
||||
_msk->set_handler(F_SEQALT3,seqalt_handler);
|
||||
_msk->set_handler(F_SEQALT4,seqalt_handler);
|
||||
_msk->set_handler(F_CODALTPR1,codalt_handler);
|
||||
_msk->set_handler(F_CODALTPR2,codalt_handler);
|
||||
_msk->set_handler(F_CODALTPR3,codalt_handler);
|
||||
_msk->set_handler(F_CODALTPR4,codalt_handler);
|
||||
_msk->set_handler(F_PERCFATT,percfat_handler);
|
||||
_age = new TLocalisamfile (LF_AGENTI);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_agenti_app::user_destroy()
|
||||
{
|
||||
delete _msk;
|
||||
delete _rel;
|
||||
delete _age;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int pr0500(int argc, char** argv)
|
||||
{
|
||||
TGestione_agenti_app a;
|
||||
a.run(argc,argv,"Gestione agenti");
|
||||
return 0;
|
||||
}
|
32
pr/pr0500a.h
Executable file
32
pr/pr0500a.h
Executable file
@ -0,0 +1,32 @@
|
||||
// campi maschera pr0500a.uml
|
||||
|
||||
#define F_CODAGE 101
|
||||
#define F_RAGSOC 102
|
||||
#define F_CODFORN 103
|
||||
#define F_DESCRFORN 104
|
||||
#define F_TIPO 105
|
||||
#define F_CODCAPO 106
|
||||
#define F_DESCRCAPO 107
|
||||
#define F_PERCCAPO 108
|
||||
#define F_PERCFATT 109
|
||||
#define F_PERCPAG 110
|
||||
#define F_TIPOIMP 111
|
||||
#define F_TIPOCAL 112
|
||||
#define F_PERCPROVV 113
|
||||
#define F_SEQRIC1 114
|
||||
#define F_SEQRIC2 115
|
||||
#define F_SEQRIC3 116
|
||||
#define F_SEQRIC4 117
|
||||
#define F_CODRICPR1 118
|
||||
#define F_CODRICPR2 119
|
||||
#define F_CODRICPR3 120
|
||||
#define F_CODRICPR4 121
|
||||
#define F_SEQALT1 122
|
||||
#define F_SEQALT2 123
|
||||
#define F_SEQALT3 124
|
||||
#define F_SEQALT4 125
|
||||
#define F_CODALTPR1 126
|
||||
#define F_CODALTPR2 127
|
||||
#define F_CODALTPR3 128
|
||||
#define F_CODALTPR4 129
|
||||
|
404
pr/pr0500a.uml
Executable file
404
pr/pr0500a.uml
Executable file
@ -0,0 +1,404 @@
|
||||
#include "pr0500a.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
#include <toolbar.h>
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Gestione Agenti" -1 -1 78 8
|
||||
|
||||
GROUPBOX DLG_NULL 80 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "Agente"
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
STRING F_CODAGE 5
|
||||
BEGIN
|
||||
PROMPT 2 2 "Codice "
|
||||
FIELD CODAGE
|
||||
FLAGS "UZ"
|
||||
KEY 1
|
||||
USE LF_AGENTI
|
||||
INPUT CODAGE F_CODAGE
|
||||
DISPLAY "Codice@8R" CODAGE
|
||||
DISPLAY "Descrizione@50" RAGSOC
|
||||
OUTPUT F_CODAGE CODAGE
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 2 3 "Ragione sociale "
|
||||
FIELD RAGSOC
|
||||
KEY 2
|
||||
USE LF_AGENTI KEY 2
|
||||
INPUT RAGSOC F_RAGSOC
|
||||
DISPLAY "Descrizione@50" RAGSOC
|
||||
DISPLAY "Codice@8R" CODAGE
|
||||
COPY OUTPUT F_CODAGE
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_CODFORN 6
|
||||
BEGIN
|
||||
PROMPT 2 5 "Cod. fornitore "
|
||||
FIELD CODFORN
|
||||
USE LF_CLIFO KEY 1 SELECT TIPOCF=="F"
|
||||
INPUT TIPOCF "F"
|
||||
INPUT CODCF F_CODFORN
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione sociale@50" RAGSOC
|
||||
OUTPUT F_CODFORN CODCF
|
||||
OUTPUT F_DESCRFORN RAGSOC
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN CG0 -1
|
||||
END
|
||||
|
||||
STRING F_DESCRFORN 50
|
||||
BEGIN
|
||||
PROMPT 27 5 ""
|
||||
USE LF_CLIFO KEY 2 SELECT TIPOCF=="F"
|
||||
INPUT TIPOCF "F"
|
||||
INPUT RAGSOC F_DESCRFORN
|
||||
DISPLAY "Ragione sociale@50" RAGSOC
|
||||
DISPLAY "Codice" CODCF
|
||||
OUTPUT F_CODFORN CODCF
|
||||
OUTPUT F_DESCRFORN RAGSOC
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN CG0 -1
|
||||
END
|
||||
|
||||
LISTBOX F_TIPO 10
|
||||
BEGIN
|
||||
PROMPT 2 6 "Tipo agente "
|
||||
FIELD TIPO
|
||||
ITEM "A|Agente"
|
||||
ITEM "C|Capozona"
|
||||
ITEM "S|Subagente"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 80 4
|
||||
BEGIN
|
||||
PROMPT 1 7 "Capozona"
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
STRING F_CODCAPO 5
|
||||
BEGIN
|
||||
PROMPT 2 8 "Cod. capozona "
|
||||
FIELD CODCAPO
|
||||
FLAGS "UZ"
|
||||
USE LF_AGENTI
|
||||
INPUT CODAGE F_CODCAPO
|
||||
DISPLAY "Codice@8R" CODAGE
|
||||
DISPLAY "Descrizione@50" RAGSOC
|
||||
OUTPUT F_CODCAPO CODAGE
|
||||
OUTPUT F_DESCRCAPO RAGSOC
|
||||
CHECKTYPE NORMAL
|
||||
MESSAGE EMPTY CLEAR,F_PERCCAPO
|
||||
MESSAGE ENABLE,F_PERCCAPO
|
||||
END
|
||||
|
||||
STRING F_DESCRCAPO 50
|
||||
BEING
|
||||
PROMPT 27 8 ""
|
||||
USE LF_AGENTI KEY 2
|
||||
INPUT RAGSOC F_DESCRCAPO
|
||||
DISPLAY "Descrizione@50" RAGSOC
|
||||
DISPLAY "Codice@8R" CODAGE
|
||||
OUTPUT F_CODCAPO CODAGE
|
||||
OUTPUT F_DESCRCAPO RAGSOC
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
NUMBER F_PERCCAPO 5 2
|
||||
BEGIN
|
||||
PROMPT 2 9 "% provvigione capozona sulle provvigioni "
|
||||
FIELD PERCCAPO
|
||||
NUM_EXPR {(#F_PERCCAPO>=0.0)&&(#F_PERCCAPO<100.0)}
|
||||
WARNING "Inserire una percentuale tra 0 e 100"
|
||||
END
|
||||
|
||||
NUMBER F_PERCFATT 6 2
|
||||
BEGIN
|
||||
PROMPT 2 11 "% provvigione da liquidare alla fatturazione "
|
||||
FIELD PERCFATT
|
||||
NUM_EXPR {(#F_PERCFATT>=0.0)&&(#F_PERCFATT<=100.0)}
|
||||
WARNING "Inserire una percentuale tra 0 e 100"
|
||||
END
|
||||
|
||||
NUMBER F_PERCPAG 6 2
|
||||
BEGIN
|
||||
PROMPT 2 12 "% provvigione da liquidare al pagamento "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
LISTBOX F_TIPOIMP 5
|
||||
BEGIN
|
||||
PROMPT 2 13 "Tipo di importo per il calcolo provvigione "
|
||||
FIELD TIPOIMP
|
||||
ITEM "L|Lordo"
|
||||
ITEM "N|Netto"
|
||||
END
|
||||
|
||||
LISTBOX F_TIPOCAL 9
|
||||
BEGIN
|
||||
PROMPT 2 14 "Tipo di calcolo provvigione "
|
||||
FIELD TIPOCAL
|
||||
ITEM "D|Documento"
|
||||
ITEM "R|Riga"
|
||||
END
|
||||
|
||||
NUMBER F_PERCPROVV 5 2
|
||||
BEGIN
|
||||
PROMPT 2 15 "% provvigione fissa "
|
||||
FIELD PERCPROVV
|
||||
NUM_EXPR {(#F_PERCPROVV>=0.0)&&(#F_PERCPROVV<100.0)}
|
||||
WARNING "Inserire una percentuale tra 0 e 100"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Ricerche" -1 -1 78 8
|
||||
|
||||
LISTBOX F_SEQRIC1 22
|
||||
BEGIN
|
||||
PROMPT 1 2 "Sequenza ricerca % provvigione "
|
||||
FIELD SEQRIC[1,1]
|
||||
ITEM "A|Agente" MESSAGE CLEAR,F_CODRICPR1
|
||||
ITEM "V|Categoria di vendita" MESSAGE CLEAR,F_CODRICPR1
|
||||
ITEM "M|Articolo di magazzino" MESSAGE CLEAR,F_CODRICPR1
|
||||
ITEM "C|Cliente" MESSAGE CLEAR,F_CODRICPR1
|
||||
ITEM "O|Condizione di vendita" MESSAGE CLEAR,F_CODRICPR1
|
||||
ITEM "1|Archivio % provvigioni" MESSAGE ENABLE,F_CODRICPR1
|
||||
STR_EXPR ((#THIS_FIELD!=#F_SEQRIC2)&&(#THIS_FIELD!=#F_SEQRIC3)&&(#THIS_FIELD!=#F_SEQRIC4))
|
||||
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
|
||||
END
|
||||
|
||||
STRING F_CODRICPR1 2
|
||||
BEGIN
|
||||
PROMPT 59 2 ""
|
||||
FIELD CODRICPR1
|
||||
FLAGS "UZ"
|
||||
USE APR
|
||||
INPUT CODTAB F_CODRICPR1
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODRICPR1 CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
STR_EXPR (#THIS_FIELD=="")||((#THIS_FIELD!=#F_CODRICPR2)&&(#THIS_FIELD!=#F_CODRICPR3)&&(#THIS_FIELD!=#F_CODRICPR4))
|
||||
WARNING "Codice archivio non valido o gia' utilizzato per questa sequenza"
|
||||
END
|
||||
|
||||
LISTBOX F_SEQRIC2 22
|
||||
BEGIN
|
||||
PROMPT 32 3 ""
|
||||
FIELD SEQRIC[2,2]
|
||||
ITEM "-|Nessuno" MESSAGE CLEAR,5@|CLEAR,F_CODRICPR2
|
||||
ITEM "A|Agente" MESSAGE ENABLE,F_SEQRIC3|CLEAR,F_CODRICPR2
|
||||
ITEM "V|Categoria di vendita" MESSAGE ENABLE,F_SEQRIC3|CLEAR,F_CODRICPR2
|
||||
ITEM "M|Articolo di magazzino" MESSAGE ENABLE,F_SEQRIC3|CLEAR,F_CODRICPR2
|
||||
ITEM "C|Cliente" MESSAGE ENABLE,F_SEQRIC3|CLEAR,F_CODRICPR2
|
||||
ITEM "O|Condizione di vendita" MESSAGE ENABLE,F_SEQRIC3|CLEAR,F_CODRICPR2
|
||||
ITEM "2|Archivio % provvigioni" MESSAGE ENABLE,F_SEQRIC3|ENABLE,F_CODRICPR2
|
||||
STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQRIC1)&&(#THIS_FIELD!=#F_SEQRIC3)&&(#THIS_FIELD!=#F_SEQRIC4))
|
||||
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
|
||||
END
|
||||
|
||||
STRING F_CODRICPR2 2
|
||||
BEGIN
|
||||
PROMPT 59 3 ""
|
||||
FIELD CODRICPR2
|
||||
FLAGS "UZ"
|
||||
USE APR
|
||||
INPUT CODTAB F_CODRICPR2
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODRICPR2 CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
STR_EXPR (#THIS_FIELD=="")||((#THIS_FIELD!=#F_CODRICPR1)&&(#THIS_FIELD!=#F_CODRICPR3)&&(#THIS_FIELD!=#F_CODRICPR4))
|
||||
WARNING "Codice archivio non valido o gia' utilizzato per questa sequenza"
|
||||
END
|
||||
|
||||
LISTBOX F_SEQRIC3 22
|
||||
BEGIN
|
||||
PROMPT 32 4 ""
|
||||
FIELD SEQRIC[3,3]
|
||||
ITEM "-|Nessuno" MESSAGE CLEAR,F_SEQRIC4|CLEAR,F_CODRICPR3
|
||||
ITEM "A|Agente" MESSAGE ENABLE,F_SEQRIC4|CLEAR,F_CODRICPR3
|
||||
ITEM "V|Categoria di vendita" MESSAGE ENABLE,F_SEQRIC4|CLEAR,F_CODRICPR3
|
||||
ITEM "M|Articolo di magazzino" MESSAGE ENABLE,F_SEQRIC4|CLEAR,F_CODRICPR3
|
||||
ITEM "C|Cliente" MESSAGE ENABLE,F_SEQRIC4|CLEAR,F_CODRICPR3
|
||||
ITEM "O|Condizione di vendita" MESSAGE ENABLE,F_SEQRIC4|CLEAR,F_CODRICPR3
|
||||
ITEM "3|Archivio % provvigioni" MESSAGE ENABLE,F_SEQRIC4|ENABLE,F_CODRICPR3
|
||||
GROUP 5
|
||||
STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQRIC1)&&(#THIS_FIELD!=#F_SEQRIC2)&&(#THIS_FIELD!=#F_SEQRIC4))
|
||||
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
|
||||
END
|
||||
|
||||
STRING F_CODRICPR3 2
|
||||
BEGIN
|
||||
PROMPT 59 4 ""
|
||||
FIELD CODRICPR3
|
||||
FLAGS "UZ"
|
||||
USE APR
|
||||
INPUT CODTAB F_CODRICPR3
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODRICPR3 CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
STR_EXPR (#THIS_FIELD=="")||((#THIS_FIELD!=#F_CODRICPR1)&&(#THIS_FIELD!=#F_CODRICPR2)&&(#THIS_FIELD!=#F_CODRICPR4))
|
||||
GROUP 4 5
|
||||
WARNING "Codice archivio non valido o gia' utilizzato per questa sequenza"
|
||||
END
|
||||
|
||||
LISTBOX F_SEQRIC4 22
|
||||
BEGIN
|
||||
PROMPT 32 5 ""
|
||||
FIELD SEQRIC[4,4]
|
||||
ITEM "-|Nessuno" MESSAGE CLEAR,F_CODRICPR4
|
||||
ITEM "A|Agente" MESSAGE CLEAR,F_CODRICPR4
|
||||
ITEM "V|Categoria di vendita" MESSAGE CLEAR,F_CODRICPR4
|
||||
ITEM "M|Articolo di magazzino" MESSAGE CLEAR,F_CODRICPR4
|
||||
ITEM "C|Cliente" MESSAGE CLEAR,F_CODRICPR4
|
||||
ITEM "O|Condizione di vendita" MESSAGE CLEAR,F_CODRICPR4
|
||||
ITEM "4|Archivio % provvigioni" MESSAGE ENABLE,F_CODRICPR4
|
||||
STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQRIC1)&&(#THIS_FIELD!=#F_SEQRIC2)&&(#THIS_FIELD!=#F_SEQRIC3))
|
||||
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
|
||||
GROUP 5
|
||||
END
|
||||
|
||||
STRING F_CODRICPR4 2
|
||||
BEGIN
|
||||
PROMPT 59 5 ""
|
||||
FIELD CODRICPR4
|
||||
FLAGS "UZ"
|
||||
USE APR
|
||||
INPUT CODTAB F_CODRICPR4
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODRICPR4 CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
STR_EXPR (#THIS_FIELD=="")||((#THIS_FIELD!=#F_CODRICPR1)&&(#THIS_FIELD!=#F_CODRICPR2)&&(#THIS_FIELD!=#F_CODRICPR3))
|
||||
GROUP 4 5
|
||||
WARNING "Codice archivio non valido o gia' utilizzato per questa sequenza"
|
||||
END
|
||||
|
||||
LISTBOX F_SEQALT1 22
|
||||
BEGIN
|
||||
PROMPT 1 9 "Indicazione % aggiuntiva "
|
||||
FIELD SEQALT[1,1]
|
||||
ITEM "-|Nessuno" MESSAGE CLEAR,6@
|
||||
ITEM "A|Agente" MESSAGE CLEAR,F_CODALTPR1|ENABLE,F_SEQALT2
|
||||
ITEM "1|Archivio % provvigioni" MESSAGE ENABLE,F_CODALTPR1|ENABLE,F_SEQALT2
|
||||
STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQALT2)&&(#THIS_FIELD!=#F_SEQALT3)&&(#THIS_FIELD!=#F_SEQALT4))
|
||||
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
|
||||
END
|
||||
|
||||
STRING F_CODALTPR1 2
|
||||
BEGIN
|
||||
PROMPT 59 9 ""
|
||||
FIELD CODALTPR1
|
||||
FLAGS "UZ"
|
||||
USE APR
|
||||
INPUT CODTAB F_CODALTPR1
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODALTPR1 CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
STR_EXPR (#THIS_FIELD=="")||((#THIS_FIELD!=#F_CODALTPR2)&&(#THIS_FIELD!=#F_CODALTPR3)&&(#THIS_FIELD!=#F_CODALTPR4))
|
||||
GROUP 6
|
||||
WARNING "Codice archivio non valido o gia' utilizzato per questa sequenza"
|
||||
END
|
||||
|
||||
LISTBOX F_SEQALT2 22
|
||||
BEGIN
|
||||
PROMPT 32 10 ""
|
||||
FIELD SEQALT[2,2]
|
||||
ITEM "-|Nessuno" MESSAGE CLEAR,7@|CLEAR,F_CODALTPR2
|
||||
ITEM "A|Agente" MESSAGE ENABLE,F_SEQALT3|CLEAR,F_CODALTPR2
|
||||
ITEM "2|Archivio % provvigioni" MESSAGE ENABLE,F_SEQALT3|ENABLE,F_CODALTPR2
|
||||
STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQALT1)&&(#THIS_FIELD!=#F_SEQALT3)&&(#THIS_FIELD!=#F_SEQALT4))
|
||||
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
|
||||
GROUP 6
|
||||
END
|
||||
|
||||
STRING F_CODALTPR2 2
|
||||
BEGIN
|
||||
PROMPT 59 10 ""
|
||||
FIELD CODALTPR2
|
||||
FLAGS "UZ"
|
||||
USE APR
|
||||
INPUT CODTAB F_CODALTPR2
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODALTPR2 CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
STR_EXPR (#THIS_FIELD=="")||((#THIS_FIELD!=#F_CODALTPR1)&&(#THIS_FIELD!=#F_CODALTPR3)&&(#THIS_FIELD!=#F_CODALTPR4))
|
||||
GROUP 6
|
||||
WARNING "Codice archivio non valido o gia' utilizzato per questa sequenza"
|
||||
END
|
||||
|
||||
LISTBOX F_SEQALT3 22
|
||||
BEGIN
|
||||
PROMPT 32 11 ""
|
||||
FIELD SEQALT[3,3]
|
||||
ITEM "-|Nessuno" MESSAGE CLEAR,F_SEQALT4|CLEAR,F_CODALTPR3
|
||||
ITEM "A|Agente" MESSAGE ENABLE,F_SEQALT4|CLEAR,F_CODALTPR3
|
||||
ITEM "3|Archivio % provvigioni" MESSAGE ENABLE,F_SEQALT4|ENABLE,F_CODALTPR3
|
||||
STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQALT1)&&(#THIS_FIELD!=#F_SEQALT2)&&(#THIS_FIELD!=#F_SEQALT4))
|
||||
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
|
||||
GROUP 6 7
|
||||
END
|
||||
|
||||
STRING F_CODALTPR3 2
|
||||
BEGIN
|
||||
PROMPT 59 11 ""
|
||||
FIELD CODALTPR3
|
||||
FLAGS "UZ"
|
||||
USE APR
|
||||
INPUT CODTAB F_CODALTPR3
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODALTPR3 CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
STR_EXPR (#THIS_FIELD=="")||((#THIS_FIELD!=#F_CODALTPR1)&&(#THIS_FIELD!=#F_CODALTPR2)&&(#THIS_FIELD!=#F_CODALTPR4))
|
||||
GROUP 6 7
|
||||
WARNING "Codice archivio non valido o gia' utilizzato per questa sequenza"
|
||||
END
|
||||
|
||||
LISTBOX F_SEQALT4 22
|
||||
BEGIN
|
||||
PROMPT 32 12 ""
|
||||
FIELD SEQALT[4,4]
|
||||
ITEM "-|Nessuno" MESSAGE CLEAR,F_CODALTPR4
|
||||
ITEM "A|Agente" MESSAGE CLEAR,F_CODALTPR4
|
||||
ITEM "4|Archivio % provvigioni" MESSAGE ENABLE,F_CODALTPR4
|
||||
STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQALT1)&&(#THIS_FIELD!=#F_SEQALT2)&&(#THIS_FIELD!=#F_SEQALT3))
|
||||
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
|
||||
GROUP 6 7
|
||||
END
|
||||
|
||||
STRING F_CODALTPR4 2
|
||||
BEGIN
|
||||
PROMPT 59 12 ""
|
||||
FIELD CODALTPR4
|
||||
FLAGS "UZ"
|
||||
USE APR
|
||||
INPUT CODTAB F_CODALTPR4
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODALTPR4 CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
STR_EXPR (#THIS_FIELD=="")||((#THIS_FIELD!=#F_CODALTPR1)&&(#THIS_FIELD!=#F_CODALTPR2)&&(#THIS_FIELD!=#F_CODALTPR3))
|
||||
GROUP 6 7
|
||||
WARNING "Codice archivio non valido o gia' utilizzato per questa sequenza"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
253
pr/pr0600.cpp
Executable file
253
pr/pr0600.cpp
Executable file
@ -0,0 +1,253 @@
|
||||
// Programma di gestione percentuali di provvigione
|
||||
|
||||
#include <relapp.h>
|
||||
#include <tabutil.h>
|
||||
|
||||
#include "percprov.h"
|
||||
#include "pr0600a.h"
|
||||
#include "pr0.h"
|
||||
|
||||
typedef short order[4];
|
||||
|
||||
class TGestione_percprovv_app:public TRelation_application
|
||||
{
|
||||
TMask *_msk;
|
||||
TRelation *_rel;
|
||||
order _ordinamento;
|
||||
|
||||
protected:
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
virtual TMask* get_mask(int mode) {return _msk;}
|
||||
virtual bool changing_mask(int mode) {return FALSE;}
|
||||
virtual TRelation* get_relation() const {return _rel;}
|
||||
virtual void init_query_mode(TMask& m);
|
||||
virtual void init_query_insert_mode(TMask& m);
|
||||
static bool codpr_handler(TMask_field& f, KEY k);
|
||||
static bool complete_key_handler(TMask_field& f, KEY k);
|
||||
static bool output_key_handler(TMask_field& f, KEY k);
|
||||
static bool tipo_handler(TMask_field& f, KEY k);
|
||||
static void set_order_fields(TString16& ord, TMask& m);
|
||||
public:
|
||||
TGestione_percprovv_app() {};
|
||||
~TGestione_percprovv_app() {};
|
||||
};
|
||||
|
||||
|
||||
static inline TGestione_percprovv_app& app() { return (TGestione_percprovv_app&) main_app(); }
|
||||
|
||||
bool TGestione_percprovv_app::output_key_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (k == K_TAB) // Viene passato solo quando entra in modifica, visto che e' disabled
|
||||
{
|
||||
order& kd = app()._ordinamento;
|
||||
TMask& m = f.mask();
|
||||
TString codpr = m.get(F_CODPR_QUERY);
|
||||
TString key = f.get();
|
||||
TString16 ord;
|
||||
int from = 0;
|
||||
TTable apr("APR");
|
||||
|
||||
apr.put("CODTAB",codpr);
|
||||
if (apr.read() == NOERR)
|
||||
ord = apr.get("S3");
|
||||
set_order_fields(ord,m);
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
if (kd[i] == 0)
|
||||
break;
|
||||
TMask_field& fld = m.field(kd[i]);
|
||||
const word size = fld.size();
|
||||
fld.set(key.mid(from,size));
|
||||
from += size;
|
||||
}
|
||||
((TEditable_field&)f).test_key_complete(FALSE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_percprovv_app::tipo_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.to_check(k))
|
||||
{
|
||||
const char v = f.get()[0];
|
||||
if (v == 'I' || v == 'V')
|
||||
{
|
||||
order& kd = app()._ordinamento;
|
||||
bool found = FALSE;
|
||||
for (int i = 0; i < 4 && !found; i++)
|
||||
if (kd[i] == F_CODART)
|
||||
found = TRUE;
|
||||
if (!found)
|
||||
return f.error_box("Impossibile settare il tipo di provvigione ad importo unitario o valore se non "
|
||||
"e' presente la ricerca per codice articolo.");
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_percprovv_app::complete_key_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.to_check(k))
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
TString v,k,fmt;
|
||||
order& kd = app()._ordinamento;
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
if (kd[i] == 0)
|
||||
break;
|
||||
TMask_field& f = m.field(kd[i]);
|
||||
if (kd[i] != F_CLIENTE)
|
||||
fmt.format("%%-%us",f.size());
|
||||
else
|
||||
fmt.format("%%%us",f.size());
|
||||
v.format(fmt,(const char*)f.get());
|
||||
k << v;
|
||||
}
|
||||
m.set(F_KEYORD,k);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TGestione_percprovv_app::set_order_fields(TString16& ord, TMask& m)
|
||||
{
|
||||
order& kd = app()._ordinamento;
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
switch (ord[i])
|
||||
{
|
||||
case 'C':
|
||||
m.show(-5);
|
||||
m.field(F_CLIENTE).check_type(CHECK_REQUIRED);
|
||||
kd[i] = F_CLIENTE;
|
||||
break;
|
||||
case 'V':
|
||||
m.show(-6);
|
||||
m.field(F_CATVEN).check_type(CHECK_REQUIRED);
|
||||
kd[i] = F_CATVEN;
|
||||
break;
|
||||
case 'A':
|
||||
m.show(-7);
|
||||
m.field(F_CODAGE).check_type(CHECK_REQUIRED);
|
||||
kd[i] = F_CODAGE;
|
||||
break;
|
||||
case 'P':
|
||||
m.show(-8);
|
||||
m.field(F_CODPAG).check_type(CHECK_REQUIRED);
|
||||
kd[i] = F_CODPAG;
|
||||
break;
|
||||
case 'S':
|
||||
m.show(-9);
|
||||
m.field(F_CODSCONTO).check_type(CHECK_REQUIRED);
|
||||
kd[i] = F_CODSCONTO;
|
||||
break;
|
||||
case 'Z':
|
||||
m.show(-10);
|
||||
m.field(F_CODZONA).check_type(CHECK_REQUIRED);
|
||||
kd[i] = F_CODZONA;
|
||||
break;
|
||||
case 'M':
|
||||
m.show(-11);
|
||||
m.field(F_CODART).check_type(CHECK_REQUIRED);
|
||||
kd[i] = F_CODART;
|
||||
break;
|
||||
case 'E':
|
||||
m.show(-12);
|
||||
m.field(F_CODGMC).check_type(CHECK_REQUIRED);
|
||||
kd[i] = F_CODGMC;
|
||||
break;
|
||||
case 'R':
|
||||
m.show(-13);
|
||||
m.field(F_CODSMC).check_type(CHECK_REQUIRED);
|
||||
kd[i] = F_CODSMC;
|
||||
break;
|
||||
case 'F':
|
||||
m.show(-14);
|
||||
m.field(F_CODRFA).check_type(CHECK_REQUIRED);
|
||||
kd[i] = F_CODRFA;
|
||||
break;
|
||||
default:
|
||||
kd[i] = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool TGestione_percprovv_app::codpr_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.to_check(k))
|
||||
{
|
||||
TTable apr("APR");
|
||||
TString s(f.get());
|
||||
apr.put("CODTAB",s);
|
||||
if (apr.read() == NOERR)
|
||||
{
|
||||
TString16 ord;
|
||||
TMask& m = f.mask();
|
||||
|
||||
ord = apr.get("S3");
|
||||
m.set(F_DESCR,apr.get("S0"));
|
||||
m.show(F_TIPO);
|
||||
m.show(F_PERCPROVV);
|
||||
set_order_fields(ord,m);
|
||||
}
|
||||
else
|
||||
return f.error_box("Codice archivio non presente");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TGestione_percprovv_app::init_query_mode(TMask& m)
|
||||
{
|
||||
m.hide(F_CODPR_NEW);
|
||||
m.show(F_CODPR_QUERY);
|
||||
set_search_field(F_CODPR_QUERY);
|
||||
m.hide(-1);
|
||||
for (short i = F_CLIENTE; i<=F_CODRFA; i+=2)
|
||||
m.field(i).check_type(CHECK_NONE); // Il flag di forced rimane a TRUE
|
||||
}
|
||||
|
||||
void TGestione_percprovv_app::init_query_insert_mode(TMask& m)
|
||||
{
|
||||
m.hide(F_CODPR_QUERY);
|
||||
m.show(F_CODPR_NEW);
|
||||
set_search_field(F_CODPR_NEW);
|
||||
m.hide(-1);
|
||||
for (short i = F_CLIENTE; i<=F_CODRFA; i+=2)
|
||||
m.field(i).check_type(CHECK_NONE); // Il flag di forced rimane a TRUE
|
||||
}
|
||||
|
||||
bool TGestione_percprovv_app::user_create()
|
||||
{
|
||||
_msk = new TMask("pr0600a") ;
|
||||
_msk->set_handler(F_CODPR_QUERY,codpr_handler);
|
||||
_msk->set_handler(F_CODPR_NEW,codpr_handler);
|
||||
_msk->set_handler(F_CLIENTE,complete_key_handler);
|
||||
_msk->set_handler(F_CATVEN,complete_key_handler);
|
||||
_msk->set_handler(F_CODAGE,complete_key_handler);
|
||||
_msk->set_handler(F_CODPAG,complete_key_handler);
|
||||
_msk->set_handler(F_CODSCONTO,complete_key_handler);
|
||||
_msk->set_handler(F_CODZONA,complete_key_handler);
|
||||
_msk->set_handler(F_CODART,complete_key_handler);
|
||||
_msk->set_handler(F_CODGMC,complete_key_handler);
|
||||
_msk->set_handler(F_CODSMC,complete_key_handler);
|
||||
_msk->set_handler(F_CODRFA,complete_key_handler);
|
||||
_msk->set_handler(F_KEYORD,output_key_handler);
|
||||
_msk->set_handler(F_TIPO,tipo_handler);
|
||||
_rel = new TRelation(LF_PERCPROV);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_percprovv_app::user_destroy()
|
||||
{
|
||||
delete _msk;
|
||||
delete _rel;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int pr0600(int argc, char** argv)
|
||||
{
|
||||
TGestione_percprovv_app a;
|
||||
a.run(argc,argv,"Gestione percentuali provvigione");
|
||||
return 0;
|
||||
}
|
33
pr/pr0600a.h
Executable file
33
pr/pr0600a.h
Executable file
@ -0,0 +1,33 @@
|
||||
// campi maschera pr0600a.uml
|
||||
|
||||
#define F_CODPR_QUERY 101
|
||||
#define F_CODPR_NEW 102
|
||||
#define F_DESCR 103
|
||||
#define F_KEYORD 104
|
||||
#define F_CLIENTE 105
|
||||
#define F_DESCR1 106
|
||||
#define F_CATVEN 107
|
||||
#define F_DESCR2 108
|
||||
#define F_CODAGE 109
|
||||
#define F_DESCR3 110
|
||||
#define F_CODPAG 111
|
||||
#define F_DESCR4 112
|
||||
#define F_CODSCONTO 113
|
||||
#define F_DESCR5 114
|
||||
#define F_CODZONA 115
|
||||
#define F_DESCR6 116
|
||||
#define F_CODART 117
|
||||
#define F_DESCR7 118
|
||||
#define F_CODGMC 119
|
||||
#define F_DESCR8 120
|
||||
#define F_CODSMC 121
|
||||
#define F_DESCR9 122
|
||||
#define F_CODRFA 123
|
||||
#define F_DESCR10 124
|
||||
#define F_TIPO 125
|
||||
#define F_PERCPROVV 126
|
||||
#define F_IMPORTO 127
|
||||
#define F_TIMPORTO 128
|
||||
#define F_TVALORE 129
|
||||
|
||||
|
334
pr/pr0600a.uml
Executable file
334
pr/pr0600a.uml
Executable file
@ -0,0 +1,334 @@
|
||||
#include "pr0600a.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
#include <toolbar.h>
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Percentuali provvigione" -1 -1 78 8
|
||||
|
||||
GROUPBOX DLG_NULL 80 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "Archivio"
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
STRING F_CODPR_QUERY 2
|
||||
BEGIN
|
||||
PROMPT 2 2 "Codice archivio "
|
||||
FIELD CODPR
|
||||
FLAGS "UZ"
|
||||
KEY 1
|
||||
USE LF_PERCPROV KEY 1 //SELECT CODPR==#F_CODPR_QUERY
|
||||
INPUT CODPR F_CODPR_QUERY
|
||||
INPUT KEYORD F_KEYORD
|
||||
DISPLAY "Archivio" CODPR
|
||||
DISPLAY "Ordinamento@40" KEYORD
|
||||
OUTPUT F_CODPR_QUERY CODPR
|
||||
OUTPUT F_KEYORD KEYORD
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_CODPR_NEW 2
|
||||
BEGIN
|
||||
PROMPT 2 2 "Codice archivio "
|
||||
FIELD CODPR
|
||||
FLAGS "HUZ"
|
||||
KEY 1
|
||||
USE APR
|
||||
INPUT CODTAB F_CODPR_NEW
|
||||
DISPLAY "Codice@10" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODPR_NEW CODTAB
|
||||
CHECKTYPE FORCED
|
||||
WARNING "Codice archivio non presente"
|
||||
END
|
||||
|
||||
STRING F_DESCR 50
|
||||
BEGIN
|
||||
PROMPT 2 3 "Descrizione "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_KEYORD 40
|
||||
BEGIN
|
||||
PROMPT 100 100 "Ordinamento "
|
||||
FLAGS "D_"
|
||||
FIELD KEYORD
|
||||
KEY 1
|
||||
USE LF_PERCPROV
|
||||
INPUT CODPR F_CODPR_QUERY SELECT
|
||||
INPUT KEYORD F_KEYORD
|
||||
DISPLAY "Archivio" CODPR
|
||||
DISPLAY "Ordinamento@40" KEYORD
|
||||
OUTPUT F_CODPR_QUERY CODPR
|
||||
OUTPUT F_KEYORD KEYORD
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_CLIENTE 6
|
||||
BEGIN
|
||||
PROMPT 2 6 "Cod. cliente "
|
||||
FLAGS "R"
|
||||
KEY 1
|
||||
USE LF_CLIFO KEY 1 SELECT TIPOCF=="C"
|
||||
INPUT TIPOCF "C"
|
||||
INPUT CODCF F_CLIENTE
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione sociale@50" RAGSOC
|
||||
OUTPUT F_CLIENTE CODCF
|
||||
OUTPUT F_DESCR1 RAGSOC
|
||||
CHECKTYPE FORCED
|
||||
GROUP 1 5
|
||||
END
|
||||
|
||||
STRING F_DESCR1 50 39
|
||||
BEGIN
|
||||
PROMPT 41 6 ""
|
||||
FLAGS "D"
|
||||
GROUP 1 5
|
||||
END
|
||||
|
||||
STRING F_CATVEN 2
|
||||
BEGIN
|
||||
PROMPT 2 7 "Cat. vendita "
|
||||
FLAGS "U"
|
||||
KEY 1
|
||||
USE CVE
|
||||
INPUT CODTAB F_CATVEN
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CATVEN CODTAB
|
||||
OUTPUT F_DESCR2 S0
|
||||
CHECKTYPE FORCED
|
||||
GROUP 1 6
|
||||
END
|
||||
|
||||
STRING F_DESCR2 50 39
|
||||
BEGIN
|
||||
PROMPT 41 7 ""
|
||||
FLAGS "D"
|
||||
GROUP 1 6
|
||||
END
|
||||
|
||||
STRING F_CODAGE 5
|
||||
BEGIN
|
||||
PROMPT 2 8 "Cod. agente "
|
||||
FLAGS "UZ"
|
||||
KEY 1
|
||||
USE LF_AGENTI
|
||||
INPUT CODAGE F_CODAGE
|
||||
DISPLAY "Codice" CODAGE
|
||||
DISPLAY "Ragione sociale@50" RAGSOC
|
||||
OUTPUT F_CODAGE CODAGE
|
||||
OUTPUT F_DESCR3 RAGSOC
|
||||
CHECKTYPE FORCED
|
||||
GROUP 1 7
|
||||
END
|
||||
|
||||
STRING F_DESCR3 50 39
|
||||
BEGIN
|
||||
PROMPT 41 8 ""
|
||||
FLAGS "D"
|
||||
GROUP 1 7
|
||||
END
|
||||
|
||||
STRING F_CODPAG 4
|
||||
BEGIN
|
||||
PROMPT 2 9 "Cod. pagamento "
|
||||
FLAGS "UZ"
|
||||
KEY 1
|
||||
USE %CPG
|
||||
INPUT CODTAB F_CODPAG
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODPAG CODTAB
|
||||
OUTPUT F_DESCR4 S0
|
||||
CHECKTYPE FORCED
|
||||
GROUP 1 8
|
||||
END
|
||||
|
||||
STRING F_DESCR4 50 39
|
||||
BEGIN
|
||||
PROMPT 41 9 ""
|
||||
FLAGS "D"
|
||||
GROUP 1 8
|
||||
END
|
||||
|
||||
STRING F_CODSCONTO 2
|
||||
BEGIN
|
||||
PROMPT 2 10 "Cod. sconto "
|
||||
FLAGS "U"
|
||||
KEY 1
|
||||
USE %SCC
|
||||
INPUT CODTAB F_CODSCONTO
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODSCONTO CODTAB
|
||||
OUTPUT F_DESCR5 S0
|
||||
CHECKTYPE FORCED
|
||||
GROUP 1 9
|
||||
END
|
||||
|
||||
STRING F_DESCR5 50 39
|
||||
BEGIN
|
||||
PROMPT 41 10 ""
|
||||
FLAGS "D"
|
||||
GROUP 1 9
|
||||
END
|
||||
|
||||
STRING F_CODZONA 2
|
||||
BEGIN
|
||||
PROMPT 2 11 "Cod. zona "
|
||||
FLAGS "U"
|
||||
KEY 1
|
||||
USE ZON
|
||||
INPUT CODTAB F_CODZONA
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODZONA CODTAB
|
||||
OUTPUT F_DESCR6 S0
|
||||
CHECKTYPE FORCED
|
||||
GROUP 1 10
|
||||
END
|
||||
|
||||
STRING F_DESCR6 50 39
|
||||
BEGIN
|
||||
PROMPT 41 11 ""
|
||||
FLAGS "D"
|
||||
GROUP 1 10
|
||||
END
|
||||
|
||||
STRING F_CODART 20
|
||||
BEGIN
|
||||
PROMPT 2 12 "Cod. articolo "
|
||||
FLAGS "U"
|
||||
KEY 1
|
||||
USE LF_ANAMAG
|
||||
INPUT CODART F_CODART
|
||||
DISPLAY "Articolo@20" CODART
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_CODART CODART
|
||||
OUTPUT F_DESCR7 DESCR
|
||||
CHECKTYPE FORCED
|
||||
GROUP 1 11
|
||||
END
|
||||
|
||||
STRING F_DESCR7 50 39
|
||||
BEGIN
|
||||
PROMPT 41 12 ""
|
||||
FLAGS "D"
|
||||
GROUP 1 11
|
||||
END
|
||||
|
||||
STRING F_CODGMC 3
|
||||
BEGIN
|
||||
PROMPT 2 13 "Cat. merc. "
|
||||
FLAGS "U"
|
||||
KEY 1
|
||||
USE GMC SELECT CODTAB[4,5]==""
|
||||
INPUT CODTAB F_CODGMC
|
||||
DISPLAY "Codice" CODTAB[1,3]
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODGMC CODTAB[1,3]
|
||||
OUTPUT F_DESCR8 S0
|
||||
CHECKTYPE FORCED
|
||||
GROUP 1 12
|
||||
END
|
||||
|
||||
STRING F_DESCR8 50 39
|
||||
BEGIN
|
||||
PROMPT 41 13 ""
|
||||
FLAGS "D"
|
||||
GROUP 1 12
|
||||
END
|
||||
|
||||
STRING F_CODSMC 5
|
||||
BEGIN
|
||||
PROMPT 2 14 "Sottocat. merc. "
|
||||
FLAGS "U"
|
||||
KEY 1
|
||||
USE GMC
|
||||
INPUT CODTAB F_CODSMC
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODSMC CODTAB
|
||||
OUTPUT F_DESCR9 S0
|
||||
CHECKTYPE FORCED
|
||||
GROUP 1 13
|
||||
END
|
||||
|
||||
STRING F_DESCR9 50 39
|
||||
BEGIN
|
||||
PROMPT 41 14 ""
|
||||
FLAGS "D"
|
||||
GROUP 1 13
|
||||
END
|
||||
|
||||
STRING F_CODRFA 5
|
||||
BEGIN
|
||||
PROMPT 2 15 "Raggr. fiscale "
|
||||
FLAGS "U"
|
||||
KEY 1
|
||||
USE RFA SELECT CODTAB
|
||||
INPUT CODTAB F_CODRFA
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODRFA CODTAB
|
||||
OUTPUT F_DESCR10 S0
|
||||
CHECKTYPE FORCED
|
||||
GROUP 1 14
|
||||
END
|
||||
|
||||
STRING F_DESCR10 50 39
|
||||
BEGIN
|
||||
PROMPT 41 15 ""
|
||||
FLAGS "D"
|
||||
GROUP 1 14
|
||||
END
|
||||
|
||||
LISTBOX F_TIPO 20
|
||||
BEGIN
|
||||
PROMPT 2 18 "Tipo provvigione "
|
||||
FIELD TIPO
|
||||
ITEM "P|Percentuale"
|
||||
MESSAGE SHOW,F_PERCPROVV|HIDE,2@
|
||||
ITEM "I|Importo unitario"
|
||||
MESSAGE HIDE,F_PERCPROVV|SHOW,F_IMPORTO|SHOW,F_TIMPORTO|HIDE,F_TVALORE
|
||||
ITEM "V|Valore complessivo"
|
||||
MESSAGE HIDE,F_PERCPROVV|SHOW,F_IMPORTO|HIDE,F_TIMPORTO|SHOW,F_TVALORE
|
||||
END
|
||||
|
||||
NUMBER F_PERCPROVV 5 2
|
||||
BEGIN
|
||||
PROMPT 2 19 "% provvigione "
|
||||
FIELD PERCPROVV
|
||||
NUM_EXPR {(#F_PERCPROVV>=0.0)&&(#F_PERCPROVV<100.0)}
|
||||
WARNING "Inserire una percentuale tra 0 e 100"
|
||||
END
|
||||
|
||||
TEXT F_TIMPORTO
|
||||
BEGIN
|
||||
PROMPT 2 19 "Importo unitario"
|
||||
GROUP 2
|
||||
END
|
||||
|
||||
TEXT F_TVALORE
|
||||
BEGIN
|
||||
PROMPT 2 19 "Valore complessivo "
|
||||
GROUP 2
|
||||
END
|
||||
|
||||
NUMBER F_IMPORTO 18 2
|
||||
BEGIN
|
||||
PROMPT 38 19 ""
|
||||
FIELD IMPORTO
|
||||
PICTURE "###.###.###.###"
|
||||
GROUP 2
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
408
pr/pr0700.cpp
Executable file
408
pr/pr0700.cpp
Executable file
@ -0,0 +1,408 @@
|
||||
// Programma di gestione provvigioni
|
||||
#include <applicat.h>
|
||||
#include <msksheet.h>
|
||||
#include <urldefid.h>
|
||||
#include <colors.h>
|
||||
#include "prlib.h"
|
||||
#include "provv.h"
|
||||
#include "pr0700a.h"
|
||||
#include "pr0700b.h"
|
||||
#include "pr0.h"
|
||||
|
||||
class TGestione_provv_app:public TApplication
|
||||
{
|
||||
TMask *_msk;
|
||||
TLocalisamfile *_provv;
|
||||
TProvvigioni_agente *_prag;
|
||||
bool _dirty;
|
||||
|
||||
protected:
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
virtual bool menu(MENU_TAG) ;
|
||||
void load_provvigioni(TMask* m);
|
||||
void fill_sheet_doc();
|
||||
bool check_totals();
|
||||
static bool doc_sheet_notify(TSheet_field& ds, int r, KEY key);
|
||||
static bool rate_sheet_notify(TSheet_field& rs, int r, KEY key);
|
||||
static bool nrata_handler(TMask_field& f, KEY key);
|
||||
static bool ndoc_handler(TMask_field& f, KEY key);
|
||||
static bool datascad_handler(TMask_field& f, KEY key);
|
||||
static bool imprata_handler(TMask_field& f, KEY key);
|
||||
static bool improvv_handler(TMask_field& f, KEY key);
|
||||
static void fill_rate_doc(TRate_doc& rd, TSheet_field& sf);
|
||||
public:
|
||||
TGestione_provv_app() {};
|
||||
~TGestione_provv_app() {};
|
||||
};
|
||||
|
||||
static inline TGestione_provv_app& app() { return (TGestione_provv_app&) main_app(); }
|
||||
static TString16 __current_key;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Da fare :
|
||||
// - abilitazione colonne provvpag e pagato con pulsante
|
||||
// - Calcolo provvigioni in caso di selezione documento
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
bool TGestione_provv_app::nrata_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_ENTER)
|
||||
{ // Scorre tutte le righe dello spreadsheet esaminando il numero di rata
|
||||
// nel caso trovi un'altra riga con lo stesso numero, visualizza un errore
|
||||
const int nrata = atoi(f.get());
|
||||
TSheet_field& s = *f.mask().get_sheet();
|
||||
const int selected = s.selected();
|
||||
const int items = s.items(); // Numero di righe dello spreadsheet
|
||||
for (int i = 0; i < items; i++)
|
||||
if (i != selected)
|
||||
{
|
||||
int other_rata = s.row(i).get_int(0);
|
||||
if (nrata == other_rata)
|
||||
return f.error_box("Non e' possibile inserire due rate con lo stesso numero");
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_provv_app::ndoc_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_ENTER)
|
||||
{ // Scorre tutte le righe dello spreadsheet esaminando ANNO+CODNUM+NDOC
|
||||
// nel caso trovi un'altra riga con la stessa chiave, visualizza un errore
|
||||
TSheet_field& s = *f.mask().get_sheet();
|
||||
const int selected = s.selected();
|
||||
const int items = s.items(); // Numero di righe dello spreadsheet
|
||||
TToken_string& tt = s.row(selected);
|
||||
int anno = tt.get_int(0);
|
||||
TString codnum = tt.get(1);
|
||||
long ndoc = tt.get_long(2);
|
||||
TString key,other_key;
|
||||
|
||||
key.format("%4d%4s%7ld",anno,(const char*)codnum,ndoc);
|
||||
for (int i = 0; i < items; i++)
|
||||
if (i != selected)
|
||||
{
|
||||
TToken_string& ot = s.row(i);
|
||||
anno = ot.get_int(0);
|
||||
codnum = ot.get(1);
|
||||
ndoc = ot.get_long(2);
|
||||
other_key.format("%4d%4s%7ld",anno,(const char*)codnum,ndoc);
|
||||
if (key == other_key)
|
||||
return f.error_box("Non e' possibile inserire due documenti con lo stessa chiave");
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_provv_app::datascad_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_ENTER && __current_key.not_empty())
|
||||
{
|
||||
TProvvigioni_agente* pa = app()._prag;
|
||||
TRate_doc& rd = pa->rate(__current_key);
|
||||
TDate d(f.get());
|
||||
if (d < rd.datadoc())
|
||||
return f.error_box("La data di scadenza deve essere maggiore o uguale della data documento");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_provv_app::imprata_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_ENTER && __current_key.not_empty())
|
||||
{
|
||||
TProvvigioni_agente* pa = app()._prag;
|
||||
TRate_doc& rd = pa->rate(__current_key);
|
||||
real r(f.get());
|
||||
if (r > rd.impdoc())
|
||||
return f.error_box("L'importo della rata non puo' essere maggiore dell'importo del documento");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_provv_app::improvv_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_ENTER && __current_key.not_empty())
|
||||
{
|
||||
TProvvigioni_agente* pa = app()._prag;
|
||||
TRate_doc& rd = pa->rate(__current_key);
|
||||
real r(f.get());
|
||||
if (r > rd.impprdoc())
|
||||
return f.error_box("L'importo della provvigione non puo' essere maggiore dell'importo provvigione del documento");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TGestione_provv_app::fill_rate_doc(TRate_doc& rd, TSheet_field& sf)
|
||||
{
|
||||
// Righe delle rate
|
||||
const int items = sf.items();
|
||||
rd.remove_rata(); // cancella tutte le rate
|
||||
for (int i = 0; i < items; i++) // Aggiunge le rate presenti nello sheet
|
||||
{
|
||||
TToken_string& tt = sf.row(i);
|
||||
TRata* rt = new TRata;
|
||||
rt->set(tt);
|
||||
rd.add_rata(rt);
|
||||
}
|
||||
}
|
||||
|
||||
bool TGestione_provv_app::rate_sheet_notify(TSheet_field& ds, int r, KEY key)
|
||||
{
|
||||
if (__current_key.empty())
|
||||
return TRUE;
|
||||
|
||||
TProvvigioni_agente* pa = app()._prag;
|
||||
TRate_doc& rd = pa->rate(__current_key);
|
||||
|
||||
switch (key)
|
||||
{
|
||||
case K_INS: // Inserimento di una nuova rata vuota
|
||||
{
|
||||
TRata* rt = new TRata;
|
||||
rt->set_generata(); // Nuova rata: va segnalata come inserita
|
||||
rd.add_rata(rt);
|
||||
app()._dirty = TRUE;
|
||||
}
|
||||
break;
|
||||
case K_ENTER: // Notifica dell'avvenuta modifica di una rata
|
||||
{
|
||||
TRata& rt = rd[r]; // Sostituisce i valori della riga corrente
|
||||
rt.set(ds.row(r));
|
||||
app()._dirty = TRUE;
|
||||
}
|
||||
break;
|
||||
case K_DEL: // Notifica della cancellazione di una riga
|
||||
rd.remove_rata(r); // Effettua anche il pack degli elementi
|
||||
app()._dirty = TRUE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_provv_app::doc_sheet_notify(TSheet_field& ds, int r, KEY key)
|
||||
{
|
||||
TProvvigioni_agente* pa = app()._prag;
|
||||
|
||||
switch (key)
|
||||
{
|
||||
case K_INS: // Inserimento di un nuovo documento
|
||||
{
|
||||
TSheet_field& rs = (TSheet_field&) ds.mask().field(F_RATE_SHEET);
|
||||
if (rs.items() > 0) // Resetta lo spreadsheet se vi sono delle righe
|
||||
rs.reset();
|
||||
app()._dirty = TRUE;
|
||||
}
|
||||
break;
|
||||
case K_TAB: // Posizionamento sulla riga r
|
||||
// Visualizza le rate relative sull'apposito sheet
|
||||
{
|
||||
TMask& m = ds.mask();
|
||||
if (!m.is_running())
|
||||
break;
|
||||
|
||||
TToken_string& tt = ds.row(r);
|
||||
int anno = tt.get_int(0);
|
||||
TString codnum = tt.get(1);
|
||||
long ndoc = tt.get_long(2);
|
||||
|
||||
m.set(F_MANNO,anno);
|
||||
m.set(F_MCODNUM,codnum);
|
||||
m.set(F_MNDOC,ndoc);
|
||||
|
||||
__current_key.format("%4d%4s%7ld",anno,(const char*)codnum,ndoc);
|
||||
TSheet_field& rs = (TSheet_field&) ds.mask().field(F_RATE_SHEET);
|
||||
if (rs.items() > 0) // Resetta lo spreadsheet se vi sono delle righe precedenti
|
||||
rs.reset();
|
||||
TRate_doc& rd = pa->rate(__current_key,TRUE);
|
||||
const int items = rd.items();
|
||||
for (int i = 0; i < items; i++)
|
||||
{
|
||||
TRata& rt = rd[i];
|
||||
TToken_string& ttt = rs.row(i);
|
||||
ttt.add(rt.rata());
|
||||
ttt.add(rt.datascad()); ttt.add(rt.imprata().string());
|
||||
ttt.add(rt.impprovv().string()); ttt.add(rt.pagato().string());
|
||||
ttt.add(rt.provvpag().string()); ttt.add(rt.pagmat().string());
|
||||
ttt.add(rt.provvmat().string()); ttt.add(rt.saldata() ? "X" : " ");
|
||||
ttt.add(rt.tipopagpr());
|
||||
int i = 1;
|
||||
i++;
|
||||
}
|
||||
rs.force_update();
|
||||
}
|
||||
break;
|
||||
case K_ENTER: // Abbandono della riga r (modificata). Analogamente va fatto sullo sheet delle rate
|
||||
// Memorizza rate e documento
|
||||
// Confronta la chiave della riga attuale con quella ricavata quando ci si e'
|
||||
// posizionati sopra.
|
||||
// Se __current_key non e' vuota viene rimosso il vecchio TRate_doc
|
||||
// e aggiunto quello con la chiave nuova
|
||||
{
|
||||
TToken_string& tt = ds.row(r);
|
||||
int anno = tt.get_int(0);
|
||||
TString codnum = tt.get(1);
|
||||
long ndoc = tt.get_long(2);
|
||||
|
||||
TString k;
|
||||
k.format("%4d%4s%7ld",anno,(const char*)codnum,ndoc);
|
||||
bool flag = FALSE;
|
||||
|
||||
if (__current_key != k) // Se le chiavi sono diverse
|
||||
{
|
||||
if (__current_key.not_empty())
|
||||
pa->remove_rate(__current_key); // Cancella il vecchio
|
||||
__current_key = k;
|
||||
flag = TRUE;
|
||||
}
|
||||
TRate_doc& rd = pa->rate(k,flag); // Aggiunge il nuovo o prende lo stesso elemento
|
||||
// Schiaffa dentro rate e dati documento
|
||||
rd.set(tt);
|
||||
fill_rate_doc(rd,(TSheet_field&)ds.mask().field(F_RATE_SHEET));
|
||||
app()._dirty = TRUE;
|
||||
}
|
||||
break;
|
||||
case K_DEL: // Rimozione della riga r
|
||||
// Rimuove il documento e le rate
|
||||
pa->remove_rate(__current_key);
|
||||
app()._dirty = TRUE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_provv_app::create()
|
||||
{
|
||||
_msk = new TMask("pr0700b") ;
|
||||
_provv = new TLocalisamfile(LF_PROVV);
|
||||
_prag = new TProvvigioni_agente;
|
||||
TSheet_field & sf = (TSheet_field&)_msk->field(F_DOC_SHEET);
|
||||
sf.set_notify(doc_sheet_notify);
|
||||
sf.sheet_mask().set_handler(F_ANNO,ndoc_handler);
|
||||
TSheet_field & rs = (TSheet_field&)_msk->field(F_RATE_SHEET);
|
||||
rs.set_notify(rate_sheet_notify);
|
||||
TMask& sm = rs.sheet_mask();
|
||||
sm.set_handler(F_RATA,nrata_handler);
|
||||
sm.set_handler(F_DATASCAD,datascad_handler);
|
||||
sm.set_handler(F_IMPRATA,imprata_handler);
|
||||
sm.set_handler(F_IMPPROVV,improvv_handler);
|
||||
|
||||
dispatch_e_menu(MENU_ITEM(1));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestione_provv_app::destroy()
|
||||
{
|
||||
delete _msk;
|
||||
delete _provv;
|
||||
delete _prag;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TGestione_provv_app::fill_sheet_doc()
|
||||
{
|
||||
TString_array kl;
|
||||
const int items = _prag->documenti(kl);
|
||||
kl.sort(); // Cosi' i documenti sono in ordine
|
||||
TSheet_field & sf = (TSheet_field&)_msk->field(F_DOC_SHEET);
|
||||
TSheet_field & rs = (TSheet_field&)_msk->field(F_RATE_SHEET);
|
||||
|
||||
__current_key = "";
|
||||
rs.reset();
|
||||
sf.reset();
|
||||
for (int i = 0; i < items; i++)
|
||||
{
|
||||
TRate_doc& rd = _prag->rate(kl.row(i));
|
||||
TToken_string& tt = sf.row(i);
|
||||
tt.add(rd.anno()); tt.add(rd.codnum());
|
||||
tt.add(rd.ndoc()); tt.add(rd.datadoc());
|
||||
tt.add(rd.impdoc().string()); tt.add(rd.impprdoc().string());
|
||||
tt.add(rd.impnet().string()); tt.add(rd.codcf());
|
||||
tt.add(rd.tipo()); tt.add(rd.codval());
|
||||
tt.add(rd.cambio().string()); tt.add(rd.datacam());
|
||||
}
|
||||
}
|
||||
|
||||
bool TGestione_provv_app::check_totals()
|
||||
// Controlla che la somma delle provvigioni per ogni rata non sia superiore alla provvigione
|
||||
// totale del documento. Ritorna TRUE se tutti i documenti hanno le provvigioni ok
|
||||
{
|
||||
TString_array kl;
|
||||
const int items = _prag->documenti(kl);
|
||||
bool rt = TRUE;
|
||||
|
||||
for (int i = 0; rt && i < items ; i++)
|
||||
if (!_prag->rate(kl.row(i)).ok_provvigione())
|
||||
{
|
||||
rt = FALSE;
|
||||
error_box("La somma delle provvigioni supera l'importo della provvigione totale per il documento %s",
|
||||
(const char*)kl.row(i));
|
||||
}
|
||||
return rt;
|
||||
}
|
||||
|
||||
void TGestione_provv_app::load_provvigioni(TMask* m)
|
||||
{
|
||||
TString agente = m->get(F_CODAGE);
|
||||
_msk->set(F_CODAGE,agente);
|
||||
_msk->set(F_RAGSOC,m->get(F_RAGSOC));
|
||||
_msk->set(F_MANNO,"");
|
||||
_msk->set(F_MCODNUM,"");
|
||||
_msk->set(F_MNDOC,"");
|
||||
_prag->read(agente);
|
||||
|
||||
KEY k;
|
||||
bool repeat;
|
||||
const char* msg = _prag->rows() == 0 ? "Registrare i dati inseriti" : "Registrare le modifiche" ;
|
||||
fill_sheet_doc(); // Inizializza lo sheet dei documenti
|
||||
|
||||
_dirty = FALSE;
|
||||
do
|
||||
{
|
||||
k = _msk->run();
|
||||
bool to_write = k == K_ENTER;
|
||||
repeat = FALSE;
|
||||
if (k == K_ESC && _dirty)
|
||||
{
|
||||
k = yesnocancel_box(msg);
|
||||
if (k == K_ESC)
|
||||
repeat = TRUE;
|
||||
else if (k == K_YES)
|
||||
to_write = TRUE;
|
||||
}
|
||||
if (to_write)
|
||||
if (check_totals()) // Controlla i totali delle provvigioni per tutti i documenti
|
||||
_prag->write();
|
||||
else
|
||||
repeat = TRUE;
|
||||
} while (repeat);
|
||||
}
|
||||
|
||||
bool TGestione_provv_app::menu(MENU_TAG)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
TMask* m = new TMask("pr0700a");
|
||||
while (ok)
|
||||
{
|
||||
xvt_statbar_set("Ricerca", TRUE);
|
||||
m->reset();
|
||||
ok = m->run() == K_ENTER;
|
||||
if (ok)
|
||||
load_provvigioni(m);
|
||||
}
|
||||
delete m;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int pr0700(int argc, char** argv)
|
||||
{
|
||||
TGestione_provv_app a;
|
||||
a.run(argc,argv,"Gestione provvigioni");
|
||||
return 0;
|
||||
}
|
5
pr/pr0700a.h
Executable file
5
pr/pr0700a.h
Executable file
@ -0,0 +1,5 @@
|
||||
// campi maschera pr0700a.uml
|
||||
|
||||
#define F_CODAGE 201
|
||||
#define F_RAGSOC 202
|
||||
|
55
pr/pr0700a.uml
Executable file
55
pr/pr0700a.uml
Executable file
@ -0,0 +1,55 @@
|
||||
#include "pr0700a.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -11 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -11 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Gestione Provvigioni" -1 -1 78 8
|
||||
|
||||
GROUPBOX DLG_NULL 80 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "Agente"
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
STRING F_CODAGE 5
|
||||
BEGIN
|
||||
PROMPT 2 2 "Codice "
|
||||
FLAGS "UZ"
|
||||
USE LF_AGENTI
|
||||
INPUT CODAGE F_CODAGE
|
||||
DISPLAY "Codice@8R" CODAGE
|
||||
DISPLAY "Descrizione@50" RAGSOC
|
||||
OUTPUT F_CODAGE CODAGE
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
CHECKTYPE REQUIRED
|
||||
ADD RUN PR0 -4
|
||||
END
|
||||
|
||||
STRING F_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 2 3 "Ragione sociale "
|
||||
USE LF_AGENTI KEY 2
|
||||
INPUT RAGSOC F_RAGSOC
|
||||
DISPLAY "Descrizione@50" RAGSOC
|
||||
DISPLAY "Codice@8R" CODAGE
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
OUTPUT F_CODAGE CODAGE
|
||||
CHECKTYPE REQUIRED
|
||||
ADD RUN PR0 -4
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
38
pr/pr0700b.h
Executable file
38
pr/pr0700b.h
Executable file
@ -0,0 +1,38 @@
|
||||
// Campi maschera pr0700b.uml
|
||||
|
||||
#define F_CODAGE 201
|
||||
#define F_RAGSOC 202
|
||||
#define F_DOC_SHEET 203
|
||||
#define F_RATE_SHEET 204
|
||||
#define F_MANNO 205
|
||||
#define F_MCODNUM 206
|
||||
#define F_MNDOC 207
|
||||
|
||||
// Sheet documenti
|
||||
#define F_ANNO 101
|
||||
#define F_CODNUM 102
|
||||
#define F_NDOC 103
|
||||
#define F_DATADOC 104
|
||||
#define F_IMPDOC 105
|
||||
#define F_IMPPRDOC 106
|
||||
#define F_IMPNETDOC 107
|
||||
#define F_CLIENTE 108
|
||||
#define F_TIPOPAG 109
|
||||
#define F_CODVAL 110
|
||||
#define F_CAMBIO 111
|
||||
#define F_DATACAMBIO 112
|
||||
#define F_RAGCLI 113
|
||||
|
||||
|
||||
// Sheet rate
|
||||
#define F_RATA 101
|
||||
#define F_DATASCAD 102
|
||||
#define F_IMPRATA 103
|
||||
#define F_IMPPROVV 104
|
||||
#define F_PAGMAT 105
|
||||
#define F_PROVVMAT 106
|
||||
#define F_PAGATO 107
|
||||
#define F_PROVVPAG 108
|
||||
#define F_SALDATA 109
|
||||
#define F_TIPOPAGPR 110
|
||||
|
328
pr/pr0700b.uml
Executable file
328
pr/pr0700b.uml
Executable file
@ -0,0 +1,328 @@
|
||||
#include "pr0700b.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -11 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -11 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Provvigioni" -1 -1 78 8
|
||||
|
||||
STRING F_CODAGE 5
|
||||
BEGIN
|
||||
PROMPT 2 1 "Codice agente "
|
||||
FLAGS "DUZ"
|
||||
END
|
||||
|
||||
STRING F_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 23 1 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER F_MANNO 4
|
||||
BEGIN
|
||||
PROMPT 2 2 "Documento "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_MCODNUM 4
|
||||
BEGIN
|
||||
PROMPT 23 2 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER F_MNDOC 7
|
||||
BEGIN
|
||||
PROMPT 28 2 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
SPREADHSEET F_DOC_SHEET 0 8
|
||||
BEGIN
|
||||
PROMPT 2 3 ""
|
||||
ITEM "Anno"
|
||||
ITEM "Cod.\nNum."
|
||||
ITEM "Num.\nDoc.@7"
|
||||
ITEM "Data\nDoc.@10"
|
||||
ITEM "Importo\ndocumento@18"
|
||||
ITEM "Provvigione\ndocumento@18"
|
||||
ITEM "Base di calcolo@18"
|
||||
ITEM "Cliente"
|
||||
ITEM "Tipo\npag."
|
||||
ITEM "Valuta"
|
||||
ITEM "Cambio"
|
||||
ITEM "Data\ncambio@10"
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
SPREADHSEET F_RATE_SHEET 0 8
|
||||
BEGIN
|
||||
PROMPT 2 12 ""
|
||||
ITEM "Nr. rata"
|
||||
ITEM "Data scadenza"
|
||||
ITEM "Importo\nrata@18"
|
||||
ITEM "Importo\nprovvigione@18"
|
||||
ITEM "Pagamento\nmaturato@18"
|
||||
ITEM "Provvigione\nmaturata@18"
|
||||
ITEM "Importo\nrata pagata@18"
|
||||
ITEM "Importo\nprovvigione pagata@18"
|
||||
ITEM "Saldata"
|
||||
ITEM "Tipo\npag."
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
|
||||
// Maschera spreadsheet dei documenti
|
||||
|
||||
PAGE "" -1 -1 78 16
|
||||
|
||||
NUMBER F_ANNO 4
|
||||
BEGIN
|
||||
PROMPT 2 2 "Anno "
|
||||
END
|
||||
|
||||
STRING F_CODNUM 4
|
||||
BEGIN
|
||||
PROMPT 13 2 "Cod. num. "
|
||||
FLAGS "U"
|
||||
USE %NUM
|
||||
INPUT CODTAB F_CODNUM
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODNUM CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
NUMBER F_NDOC 7
|
||||
BEGIN
|
||||
PROMPT 32 2 "Num. doc. "
|
||||
USE LF_DOC
|
||||
JOIN %CPG TO LF_DOC ALIAS 401 INTO CODTAB==CODPAG
|
||||
INPUT PROVV "D"
|
||||
INPUT ANNO F_ANNO
|
||||
INPUT CODNUM F_CODNUM
|
||||
INPUT NDOC F_NDOC
|
||||
DISPLAY "Anno" ANNO
|
||||
DISPLAY "Codice numerazione" CODNUM
|
||||
DISPLAY "Numero documento" NDOC
|
||||
OUTPUT F_ANNO ANNO
|
||||
OUTPUT F_CODNUM CODNUM
|
||||
OUTPUT F_NDOC NDOC
|
||||
OUTPUT F_DATADOC DATADOC
|
||||
OUTPUT F_CLIENTE CODCF
|
||||
OUTPUT F_CODVAL CODVAL
|
||||
OUTPUT F_CAMBIO CAMBIO
|
||||
OUTPUT F_DATACAMBIO DATACAMBIO
|
||||
OUTPUT F_TIPOPAG -401->S4
|
||||
ADD RUN VE0 -1
|
||||
END
|
||||
|
||||
DATE F_DATADOC
|
||||
BEGIN
|
||||
PROMPT 54 2 "Data doc. "
|
||||
END
|
||||
|
||||
NUMBER F_IMPDOC 18 2
|
||||
BEGIN
|
||||
PROMPT 2 4 "Importo doc. "
|
||||
PICTURE "##.###.###.###.###"
|
||||
END
|
||||
|
||||
NUMBER F_IMPPRDOC 18 2
|
||||
BEGIN
|
||||
PROMPT 2 5 "Importo provv. doc. "
|
||||
PICTURE "##.###.###.###.###"
|
||||
NUM_EXPR {(#THIS_FIELD <= #F_IMPDOC)}
|
||||
WARNING "L'importo della provvigione deve essere minore dell'importo documento"
|
||||
END
|
||||
|
||||
NUMBER F_IMPNETDOC 18 2
|
||||
BEGIN
|
||||
PROMPT 2 6 "Base di calcolo "
|
||||
PICTURE "##.###.###.###.###"
|
||||
NUM_EXPR {(#THIS_FIELD <= #F_IMPDOC)}
|
||||
WARNING "L'importo della base di calcolo deve essere minore dell'importo documento"
|
||||
END
|
||||
|
||||
NUMBER F_CLIENTE 7
|
||||
BEGIN
|
||||
PROMPT 2 8 "Cod. cliente "
|
||||
USE LF_CLIFO KEY 1 SELECT TIPOCF=="C"
|
||||
INPUT TIPOCF "C"
|
||||
INPUT CODCF F_CLIENTE
|
||||
DISPLAY "Cod. cliente" CODCF
|
||||
DISPLAY "Ragione sociale@50" RAGSOC
|
||||
OUTPUT F_CLIENTE CODCF
|
||||
OUTPUT F_RAGCLI RAGSOC
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_RAGCLI 50
|
||||
BEGIN
|
||||
PROMPT 27 8 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
LISTBOX F_TIPOPAG 1 20
|
||||
BEGIN
|
||||
PROMPT 2 9 "Tipo pagamento "
|
||||
ITEM "1|Rimessa diretta"
|
||||
ITEM "2|Tratta"
|
||||
ITEM "3|Ri.Ba."
|
||||
ITEM "4|Cessione"
|
||||
ITEM "5|Paghero'"
|
||||
ITEM "6|Lettera di cred."
|
||||
ITEM "7|Tratta accettata"
|
||||
ITEM "8|Rapp. int. dir."
|
||||
ITEM "9|Bonifici"
|
||||
END
|
||||
|
||||
STRING F_CODVAL 3
|
||||
BEGIN
|
||||
PROMPT 2 11 "Codice valuta "
|
||||
FLAGS "U"
|
||||
USE %VAL
|
||||
INPUT CODTAB F_CODVAL
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODVAL CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
NUMBER F_CAMBIO 18 2
|
||||
BEGIN
|
||||
PROMPT 25 11 "Cambio "
|
||||
END
|
||||
|
||||
DATE F_DATACAMBIO
|
||||
BEGIN
|
||||
PROMPT 52 11 "Data cambio "
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 9 2
|
||||
BEGIN
|
||||
PROMPT -23 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 9 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
|
||||
// Maschera spreadsheet delle rate
|
||||
|
||||
PAGE "" -1 -1 76 14
|
||||
|
||||
NUMBER F_RATA 4
|
||||
BEGIN
|
||||
PROMPT 2 1 "Numero rata "
|
||||
END
|
||||
|
||||
DATE F_DATASCAD
|
||||
BEGIN
|
||||
PROMPT 2 2 "Data scadenza "
|
||||
END
|
||||
|
||||
NUMBER F_IMPRATA 18 2
|
||||
BEGIN
|
||||
PROMPT 2 3 "Importo rata "
|
||||
PICTURE "##.###.###.###.###"
|
||||
END
|
||||
|
||||
NUMBER F_IMPPROVV 18 2
|
||||
BEGIN
|
||||
PROMPT 2 4 "Importo provvigione "
|
||||
PICTURE "##.###.###.###.###"
|
||||
END
|
||||
|
||||
NUMBER F_PAGMAT 18 2
|
||||
BEGIN
|
||||
PROMPT 2 7 "Importo pagamento maturato "
|
||||
PICTURE "##.###.###.###.###"
|
||||
NUM_EXPR {(#THIS_FIELD <= #F_IMPRATA)}
|
||||
WARNING "L'importo pagamento maturato deve essere minore dell'importo della rata"
|
||||
END
|
||||
|
||||
NUMBER F_PROVVMAT 18 2
|
||||
BEGIN
|
||||
PROMPT 2 8 "Importo provvigione maturata "
|
||||
PICTURE "##.###.###.###.###"
|
||||
NUM_EXPR {(#THIS_FIELD <= #F_IMPPROVV)}
|
||||
WARNING "L'importo provvigione maturata deve essere minore dell'importo della provvigione"
|
||||
END
|
||||
|
||||
NUMBER F_PAGATO 18 2
|
||||
BEGIN
|
||||
PROMPT 2 5 "Importo rata pagata "
|
||||
PICTURE "##.###.###.###.###"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER F_PROVVPAG 18 2
|
||||
BEGIN
|
||||
PROMPT 2 6 "Importo provvigione pagata "
|
||||
PICTURE "##.###.###.###.###"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BOOLEAN F_SALDATA
|
||||
BEGIN
|
||||
PROMPT 2 9 "Rata saldata "
|
||||
END
|
||||
|
||||
LISTBOX F_TIPOPAGPR 1 20
|
||||
BEGIN
|
||||
PROMPT 2 10 "Tipo pagamento "
|
||||
ITEM "1|Rimessa diretta"
|
||||
ITEM "2|Tratta"
|
||||
ITEM "3|Ri.Ba."
|
||||
ITEM "4|Cessione"
|
||||
ITEM "5|Paghero'"
|
||||
ITEM "6|Lettera di cred."
|
||||
ITEM "7|Tratta accettata"
|
||||
ITEM "8|Rapp. int. dir."
|
||||
ITEM "9|Bonifici"
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 9 2
|
||||
BEGIN
|
||||
PROMPT -23 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 9 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
116
pr/prlib.h
Executable file
116
pr/prlib.h
Executable file
@ -0,0 +1,116 @@
|
||||
#ifndef __PRLIB_H
|
||||
#define __PRLIB_H
|
||||
|
||||
#ifndef __RELATION_H
|
||||
#include <relation.h>
|
||||
#endif
|
||||
|
||||
#ifndef __RECARRAY_H
|
||||
#include <recarray.h>
|
||||
#endif
|
||||
|
||||
class TRata : public TSortable
|
||||
{
|
||||
TDate _datascad;
|
||||
real _imprata, _impprovv, _pagato, _provvpag, _pagmat, _provvmat;
|
||||
bool _saldata;
|
||||
int _nrata,_tipopagpr;
|
||||
char _generata;
|
||||
|
||||
public:
|
||||
virtual TObject* dup() const { return new TRata(*this); }
|
||||
virtual int compare(const TSortable& s) const;
|
||||
const int rata() const { return _nrata;}
|
||||
const TDate datascad() const { return _datascad; }
|
||||
const real imprata() const { return _imprata;}
|
||||
const real impprovv() const { return _impprovv;}
|
||||
const real pagato() const { return _pagato;}
|
||||
const real provvpag() const { return _provvpag;}
|
||||
const real provvmat() const { return _pagmat;}
|
||||
const real pagmat() const { return _provvmat;}
|
||||
const bool saldata() const { return _saldata;}
|
||||
const char generata() const { return _generata;}
|
||||
const int tipopagpr()const { return _tipopagpr;}
|
||||
void set_saldata(bool b = TRUE) { _saldata = b; }
|
||||
void set_generata(char g = ' ') { _generata = g; }
|
||||
void set(TRectype& rec);
|
||||
void set(TToken_string& t);
|
||||
TRata(TRectype& rec);
|
||||
TRata() {}
|
||||
~TRata() {}
|
||||
};
|
||||
|
||||
class TRate_doc : public TObject
|
||||
{
|
||||
// Dati del documento
|
||||
int _anno;
|
||||
TString16 _codnum,_codval;
|
||||
long _ndoc,_codcf;
|
||||
TDate _datadoc,_datacambio;
|
||||
real _impdoc,_impprdoc,_impnetdoc,_cambio;
|
||||
char _tipopag;
|
||||
TArray _rows; // Rate del documento. La rata 0 corrisponde alla provvigione all'atto della fatturazione
|
||||
// Array di TRata
|
||||
public:
|
||||
virtual TObject* dup() const { return new TRate_doc(*this); }
|
||||
const int anno() const { return _anno; }
|
||||
const TString16& codnum() const { return _codnum; }
|
||||
const TString16& codval() const { return _codval; }
|
||||
const long ndoc() const { return _ndoc; }
|
||||
const long codcf() const { return _codcf; }
|
||||
const TDate datadoc() const { return _datadoc; }
|
||||
const TDate datacam() const { return _datacambio;}
|
||||
const char tipo() const { return _tipopag;}
|
||||
const real impdoc() const { return _impdoc;}
|
||||
const real impprdoc() const { return _impprdoc;}
|
||||
const real cambio() const { return _cambio;}
|
||||
const real impnet() const { return _impnetdoc;}
|
||||
const int items() { return _rows.items();}
|
||||
TRata& row(int i) { return (TRata&) _rows[i]; }
|
||||
TRata& operator[](int i) { return row(i); }
|
||||
void add_rata(TRata* r) {_rows.add(r);}
|
||||
void remove_rata(int i = -1) {_rows.destroy(i,TRUE);}
|
||||
// Ordina le rate
|
||||
void sort_rate() {_rows.sort();}
|
||||
// Controlla che la somma delle provvigioni delle singole rate sia <= della provvigione del documento
|
||||
bool ok_provvigione();
|
||||
void set(TRectype& rec);
|
||||
void set(TToken_string& t);
|
||||
TRate_doc(TRectype& rec);
|
||||
~TRate_doc() {}
|
||||
};
|
||||
|
||||
class TProvvigioni_agente : public TObject
|
||||
{
|
||||
TString16 _agente; // Codice agente
|
||||
TRecord_array *_rows; // Righe provvigionali (LF_PROVV) usato per leggere/scrivere
|
||||
TAssoc_array _rate; // Array associativo per ANNO+CODNUM+NDOC
|
||||
// contiene le informazioni del documento con le relative rate.
|
||||
protected:
|
||||
void rate2rows();
|
||||
public:
|
||||
const TString16& agente () const { return _agente;}
|
||||
// Per operare direttamente sulle righe
|
||||
const TRectype& operator [](int index) const
|
||||
{ return _rows->operator[](index);}
|
||||
TRectype& operator[] (int index) { return _rows->operator[](index);}
|
||||
const int rows() const { return _rows->rows();}
|
||||
// lettura, scrittura ecc...
|
||||
int read(const char* agente);
|
||||
int write(bool rows = FALSE); // Se rows == TRUE scrive le righe cosi' come sono, senza chiamare la rate2rows
|
||||
int rewrite(bool rows = FALSE);
|
||||
int remove(bool rows = FALSE);
|
||||
// Restituisce un elenco di documenti che hanno rate per le provvigioni di questo agente
|
||||
int documenti(TString_array& kl) { return _rate.get_keys(kl); }
|
||||
// Per accedere tramite singole rate...
|
||||
TRate_doc& rate(int anno, const char* codnum, long ndoc, bool create = FALSE) ;
|
||||
TRate_doc& rate(const char* key, bool create = FALSE) ;
|
||||
// Rimuove le rate del documento indicato
|
||||
void remove_rate(int anno, const char* codnum, long ndoc);
|
||||
void remove_rate(const char* key);
|
||||
TProvvigioni_agente(const char* agente);
|
||||
TProvvigioni_agente() ;
|
||||
~TProvvigioni_agente();
|
||||
};
|
||||
|
||||
#endif
|
289
pr/prlib01.cpp
Executable file
289
pr/prlib01.cpp
Executable file
@ -0,0 +1,289 @@
|
||||
#include "prlib.h"
|
||||
#include "provv.h"
|
||||
#include <doc.h>
|
||||
|
||||
// TProvvigioni_agente
|
||||
|
||||
|
||||
TProvvigioni_agente::TProvvigioni_agente()
|
||||
{
|
||||
_rows = new TRecord_array(LF_PROVV,PROV_NRIGA);
|
||||
}
|
||||
|
||||
TProvvigioni_agente::TProvvigioni_agente(const char* agente)
|
||||
{
|
||||
_rows = new TRecord_array(LF_PROVV,PROV_NRIGA);
|
||||
read(agente);
|
||||
}
|
||||
|
||||
TProvvigioni_agente::~TProvvigioni_agente()
|
||||
{
|
||||
delete _rows;
|
||||
}
|
||||
|
||||
int TProvvigioni_agente::read(const char* agente)
|
||||
{
|
||||
int err = NOERR;
|
||||
TRectype rec(LF_PROVV);
|
||||
|
||||
rec.put(PROV_CODAGE,agente);
|
||||
_agente = agente;
|
||||
_rate.destroy();
|
||||
_rows->destroy_rows();
|
||||
err = _rows->read(rec); // Legge tutte le righe provvigionali di codesto agente
|
||||
|
||||
if (err != NOERR)
|
||||
return err;
|
||||
|
||||
const int rows = _rows->rows();
|
||||
int anno;
|
||||
long ndoc;
|
||||
TString key,codnum;
|
||||
for (int i = 1; i <= rows; i++) // Compila l'assoc_array per documenti/rate
|
||||
{
|
||||
TRectype& r = _rows->row(i,FALSE);
|
||||
anno = r.get_int(DOC_ANNO);
|
||||
codnum = r.get(DOC_CODNUM);
|
||||
ndoc = r.get_long(DOC_NDOC);
|
||||
key.format("%4d%4s%7ld",anno,(const char*)codnum,ndoc); // Compone la chiave
|
||||
|
||||
const bool exist = _rate.is_key(key); // Guarda se esiste gia' questo documento
|
||||
TRate_doc com_rata(r);
|
||||
TRate_doc& rd = exist ? (TRate_doc&) _rate[key] : com_rata;
|
||||
TRata* rt = new TRata(r);
|
||||
rd.add_rata(rt);
|
||||
|
||||
_rate.add(key,rd,exist); // Sostituisce/aggiunge l'elemento
|
||||
}
|
||||
|
||||
// Dopo aver letto le righe, ordina le rate per ogni documento
|
||||
for (TRate_doc* rd = (TRate_doc*) _rate.first_item(); rd != NULL; rd = (TRate_doc*) _rate.succ_item())
|
||||
rd->sort_rate();
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
void TProvvigioni_agente::rate2rows()
|
||||
{
|
||||
_rows->destroy_rows();
|
||||
// Setta la chiave del TRecord_array
|
||||
TRectype* chiave = new TRectype(LF_PROVV);
|
||||
chiave->put(PROV_CODAGE, _agente);
|
||||
_rows->set_key(chiave);
|
||||
// Scorre gli elementi di _rate (TDoc_rate) uno ad uno
|
||||
// per settare le righe provvigionali
|
||||
TString_array kl;
|
||||
const int items = documenti(kl); // Prende l'elenco dei documenti
|
||||
kl.sort(); // ordina per documento
|
||||
int nrow = 1;
|
||||
for (int i = 0; i < items; i++)
|
||||
{
|
||||
TRate_doc& rd = (TRate_doc&)_rate[kl.row(i)];
|
||||
const int ritems = rd.items(); // Ciclo per rate di questo documento
|
||||
for (int j = 0; j < ritems; j++)
|
||||
{
|
||||
TRata& rt = rd[j];
|
||||
TRectype* record = new TRectype(LF_PROVV);
|
||||
record->put(PROV_CODAGE,_agente);
|
||||
record->put(PROV_NRIGA,nrow++);
|
||||
record->put(PROV_ANNO,rd.anno());
|
||||
record->put(PROV_CODNUM,rd.codnum());
|
||||
record->put(PROV_NDOC,rd.ndoc());
|
||||
record->put(PROV_NRATA,rt.rata());
|
||||
record->put(PROV_GENERATA,rt.generata());
|
||||
record->put(PROV_SALDATA,rt.saldata());
|
||||
record->put(PROV_TIPOPAGPR,rt.tipopagpr());
|
||||
record->put(PROV_DATADOC,rd.datadoc());
|
||||
record->put(PROV_IMPDOC,rd.impdoc());
|
||||
record->put(PROV_IMPPRDOC,rd.impprdoc());
|
||||
record->put(PROV_IMPNETDOC,rd.impnet());
|
||||
record->put(PROV_CODCLI,rd.codcf());
|
||||
record->put(PROV_TIPOPAG,rd.tipo());
|
||||
record->put(PROV_CODVAL,rd.codval());
|
||||
record->put(PROV_DATACAMBIO,rd.datacam());
|
||||
record->put(PROV_CAMBIO,rd.cambio());
|
||||
record->put(PROV_DATASCAD,rt.datascad());
|
||||
record->put(PROV_IMPRATA,rt.imprata());
|
||||
record->put(PROV_IMPPROVV,rt.impprovv());
|
||||
record->put(PROV_PAGATO,rt.pagato());
|
||||
record->put(PROV_PROVVPAG,rt.provvpag());
|
||||
record->put(PROV_PAGMAT,rt.pagmat());
|
||||
record->put(PROV_PROVVMAT,rt.provvmat());
|
||||
_rows->add_row(record);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int TProvvigioni_agente::write(bool rows)
|
||||
{
|
||||
if (!rows)
|
||||
rate2rows();
|
||||
return _rows->write();
|
||||
}
|
||||
|
||||
int TProvvigioni_agente::rewrite(bool rows)
|
||||
{
|
||||
if (!rows)
|
||||
rate2rows();
|
||||
return _rows->rewrite();
|
||||
}
|
||||
|
||||
int TProvvigioni_agente::remove(bool rows)
|
||||
{
|
||||
if (!rows)
|
||||
rate2rows();
|
||||
return _rows->remove();
|
||||
}
|
||||
|
||||
TRate_doc& TProvvigioni_agente::rate(int anno, const char* codnum, long ndoc, bool create)
|
||||
{
|
||||
TString k;
|
||||
|
||||
k.format("%4d%4s%7ld",anno,codnum,ndoc);
|
||||
return rate(k,create);
|
||||
}
|
||||
|
||||
TRate_doc& TProvvigioni_agente::rate(const char* key, bool create)
|
||||
{
|
||||
const bool exist = _rate.is_key(key);
|
||||
if (!exist)
|
||||
{
|
||||
if (create)
|
||||
{
|
||||
TRectype r(LF_PROVV);
|
||||
TString k(key);
|
||||
r.put(PROV_ANNO,k.sub(0,4));
|
||||
r.put(PROV_CODNUM,k.sub(4,8));
|
||||
r.put(PROV_NDOC,k.sub(8));
|
||||
TRate_doc* rd = new TRate_doc(r);
|
||||
_rate.add(key,rd);
|
||||
}
|
||||
else
|
||||
fatal_box("Impossibile trovare l'elemento %s tra le righe provvigionali",key);
|
||||
}
|
||||
return (TRate_doc&) _rate[key];
|
||||
}
|
||||
|
||||
void TProvvigioni_agente::remove_rate(int anno, const char* codnum, long ndoc)
|
||||
{
|
||||
TString k;
|
||||
|
||||
k.format("%4d%4s%7ld",anno,codnum,ndoc);
|
||||
remove_rate(k);
|
||||
}
|
||||
|
||||
void TProvvigioni_agente::remove_rate(const char* key)
|
||||
{
|
||||
const bool exist = _rate.is_key(key);
|
||||
if (exist)
|
||||
_rate.remove(key);
|
||||
else
|
||||
fatal_box("Impossibile trovare l'elemento %s tra le righe provvigionali", key);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// TRate_doc
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
TRate_doc::TRate_doc(TRectype& rec)
|
||||
{
|
||||
set(rec); // bleah!
|
||||
}
|
||||
|
||||
bool TRate_doc::ok_provvigione()
|
||||
{
|
||||
real totprov;
|
||||
const int its = items();
|
||||
|
||||
for (int i = 0; i < its; i++) // Somma le provvigioni di tutte le rate
|
||||
totprov += row(i).impprovv();
|
||||
|
||||
return totprov <= _impprdoc; // controlla che tale somma e' compresa nel totale provvigione del documento
|
||||
}
|
||||
|
||||
void TRate_doc::set(TRectype& rec)
|
||||
{
|
||||
CHECK(rec.num() == LF_PROVV,"Il record non ha il tracciato di LF_PROVV");
|
||||
_anno = rec.get_int(PROV_ANNO);
|
||||
_codnum = rec.get(PROV_CODNUM);
|
||||
_codval = rec.get(PROV_CODVAL);
|
||||
_ndoc = rec.get_long(PROV_NDOC);
|
||||
_codcf = rec.get_long(PROV_CODCLI);
|
||||
_datadoc = rec.get_date(PROV_DATADOC);
|
||||
_datacambio = rec.get_date(PROV_DATACAMBIO);
|
||||
_tipopag = rec.get_char(PROV_TIPOPAG);
|
||||
_impdoc = rec.get_real(PROV_IMPDOC);
|
||||
_impprdoc = rec.get_real(PROV_IMPPRDOC);
|
||||
_impnetdoc = rec.get_real(PROV_IMPNETDOC);
|
||||
_cambio = rec.get_real(PROV_CAMBIO);
|
||||
}
|
||||
|
||||
void TRate_doc::set(TToken_string& t)
|
||||
{
|
||||
CHECK(t.items() >= 12, "Numero di items non valido");
|
||||
_anno = t.get_int(0);
|
||||
_codnum = t.get(1);
|
||||
_ndoc = t.get_long(2);
|
||||
_datadoc = t.get(3);
|
||||
_impdoc = t.get(4);
|
||||
_impprdoc = t.get(5);
|
||||
_impnetdoc = t.get(6);
|
||||
_codcf = t.get_long(7);
|
||||
_tipopag = t.get_char(8);
|
||||
_codval = t.get(9);
|
||||
_cambio = t.get(10);
|
||||
_datacambio = t.get(11);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// TRata
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
int TRata::compare(const TSortable& s) const
|
||||
{
|
||||
const TRata& r = (const TRata&) s;
|
||||
|
||||
if (_nrata > r.rata())
|
||||
return 1; // Numero maggiore
|
||||
else
|
||||
if (_nrata < r.rata());
|
||||
return -1; // Numero minore
|
||||
|
||||
return 0; // Stesso numero di rata
|
||||
}
|
||||
|
||||
void TRata::set(TToken_string& t)
|
||||
{
|
||||
CHECK(t.items() == 10, "Troppi pochi elementi nella token string");
|
||||
_nrata = t.get_int(0);
|
||||
_datascad = t.get(1);
|
||||
_imprata = t.get(2);
|
||||
_impprovv = t.get(3);
|
||||
_pagmat = t.get(4);
|
||||
_provvmat = t.get(5);
|
||||
_pagato = t.get(6);
|
||||
_provvpag = t.get(7);
|
||||
_saldata = t.get(8)[0] == 'X' ? TRUE : FALSE;
|
||||
_tipopagpr = t.get_int(9);
|
||||
}
|
||||
|
||||
void TRata::set(TRectype& rec)
|
||||
{
|
||||
CHECK(rec.num() == LF_PROVV,"Il record non ha il tracciato di LF_PROVV");
|
||||
_datascad = rec.get_date(PROV_DATASCAD);
|
||||
_imprata = rec.get_real(PROV_IMPRATA);
|
||||
_impprovv = rec.get_real(PROV_IMPPROVV);
|
||||
_pagato = rec.get_real(PROV_PAGATO);
|
||||
_provvpag = rec.get_real(PROV_PROVVPAG);
|
||||
_pagmat = rec.get_real(PROV_PAGMAT);
|
||||
_provvmat = rec.get_real(PROV_PROVVMAT);
|
||||
_saldata = rec.get_bool(PROV_SALDATA);
|
||||
_nrata = rec.get_int(PROV_NRATA);
|
||||
_generata = rec.get_char(PROV_GENERATA);
|
||||
_tipopagpr = rec.get_int(PROV_TIPOPAGPR);
|
||||
}
|
||||
|
||||
TRata::TRata(TRectype& rec)
|
||||
{
|
||||
set(rec);
|
||||
}
|
||||
|
31
pr/provv.h
Executable file
31
pr/provv.h
Executable file
@ -0,0 +1,31 @@
|
||||
#ifndef __PROV_H
|
||||
#define __PROV_H
|
||||
|
||||
#define PROV_CODAGE "CODAGE"
|
||||
#define PROV_NRIGA "NRIGA"
|
||||
#define PROV_ANNO "ANNO"
|
||||
#define PROV_CODNUM "CODNUM"
|
||||
#define PROV_NDOC "NDOC"
|
||||
#define PROV_NRATA "NRATA"
|
||||
#define PROV_GENERATA "GENERATA"
|
||||
#define PROV_DATADOC "DATADOC"
|
||||
#define PROV_IMPDOC "IMPDOC"
|
||||
#define PROV_IMPPRDOC "IMPPRDOC"
|
||||
#define PROV_IMPNETDOC "IMPNETDOC"
|
||||
#define PROV_CODCLI "CODCLI"
|
||||
#define PROV_TIPOPAG "TIPOPAG"
|
||||
#define PROV_CODVAL "CODVAL"
|
||||
#define PROV_CAMBIO "CAMBIO"
|
||||
#define PROV_DATACAMBIO "DATACAMBIO"
|
||||
#define PROV_DATASCAD "DATASCAD"
|
||||
#define PROV_IMPRATA "IMPRATA"
|
||||
#define PROV_IMPPROVV "IMPPROVV"
|
||||
#define PROV_SALDATA "SALDATA"
|
||||
#define PROV_PAGATO "PAGATO"
|
||||
#define PROV_PROVVPAG "PROVVPAG"
|
||||
#define PROV_PAGMAT "PAGMAT"
|
||||
#define PROV_PROVVMAT "PROVVMAT"
|
||||
#define PROV_TIPOPAGPR "TIPOPAGPR"
|
||||
|
||||
#endif
|
||||
|
9
pr/prtbapr.h
Executable file
9
pr/prtbapr.h
Executable file
@ -0,0 +1,9 @@
|
||||
// campi maschera prtbapr.uml
|
||||
|
||||
#define F_CODAPR 101
|
||||
#define F_DESCR 102
|
||||
#define F_SEQRIC1 114
|
||||
#define F_SEQRIC2 115
|
||||
#define F_SEQRIC3 116
|
||||
#define F_SEQRIC4 117
|
||||
|
121
pr/prtbapr.uml
Executable file
121
pr/prtbapr.uml
Executable file
@ -0,0 +1,121 @@
|
||||
#include "prtbapr.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
#include <toolbar.h>
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Archivio provvigioni" -1 -1 78 8
|
||||
|
||||
GROUPBOX DLG_NULL 80 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "Archivio"
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
STRING F_CODAPR 2
|
||||
BEGIN
|
||||
PROMPT 2 2 "Codice "
|
||||
FIELD CODTAB
|
||||
FLAGS "UZ"
|
||||
KEY 1
|
||||
USE APR
|
||||
INPUT CODTAB F_CODAPR
|
||||
DISPLAY "Codice@6" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODAPR CODTAB
|
||||
OUTPUT F_DESCR S0
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_DESCR 50
|
||||
BEGIN
|
||||
PROMPT 2 3 "Descrizione "
|
||||
FIELD S0
|
||||
KEY 2
|
||||
USE APR KEY 2
|
||||
INPUT S0 F_DESCR
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice@6" CODTAB
|
||||
COPY OUTPUT F_CODAPR
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
LISTBOX F_SEQRIC1 22
|
||||
BEGIN
|
||||
PROMPT 1 6 "Chiave di ricerca archivio "
|
||||
FIELD S3[1,1]
|
||||
ITEM "C|Cliente"
|
||||
ITEM "V|Categoria di vendita"
|
||||
ITEM "A|Agente"
|
||||
ITEM "P|Cod. pagamento"
|
||||
ITEM "S|Sconto"
|
||||
ITEM "Z|Zona"
|
||||
ITEM "M|Articolo di magazzino"
|
||||
ITEM "E|Categoria merc."
|
||||
ITEM "R|Sottocategoria merc."
|
||||
ITEM "F|Raggruppamento fisc."
|
||||
STR_EXPR ((#THIS_FIELD!=#F_SEQRIC2)&&(#THIS_FIELD!=#F_SEQRIC3)&&(#THIS_FIELD!=#F_SEQRIC4))
|
||||
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
|
||||
END
|
||||
|
||||
LISTBOX F_SEQRIC2 22
|
||||
BEGIN
|
||||
PROMPT 32 7 ""
|
||||
FIELD S3[2,2]
|
||||
ITEM "-|Nessuno" MESSAGE CLEAR,5@
|
||||
ITEM "C|Cliente" MESSAGE ENABLE,F_SEQRIC3
|
||||
ITEM "V|Categoria di vendita" MESSAGE ENABLE,F_SEQRIC3
|
||||
ITEM "A|Agente" MESSAGE ENABLE,F_SEQRIC3
|
||||
ITEM "P|Cod. pagamento" MESSAGE ENABLE,F_SEQRIC3
|
||||
ITEM "S|Sconto" MESSAGE ENABLE,F_SEQRIC3
|
||||
ITEM "Z|Zona" MESSAGE ENABLE,F_SEQRIC3
|
||||
ITEM "M|Articolo di magazzino" MESSAGE ENABLE,F_SEQRIC3
|
||||
ITEM "E|Categoria merc." MESSAGE ENABLE,F_SEQRIC3
|
||||
ITEM "R|Sottocategoria merc." MESSAGE ENABLE,F_SEQRIC3
|
||||
ITEM "F|Raggruppamento fisc." MESSAGE ENABLE,F_SEQRIC3
|
||||
STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQRIC1)&&(#THIS_FIELD!=#F_SEQRIC3)&&(#THIS_FIELD!=#F_SEQRIC4))
|
||||
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
|
||||
END
|
||||
|
||||
LISTBOX F_SEQRIC3 22
|
||||
BEGIN
|
||||
PROMPT 32 8 ""
|
||||
FIELD S3[3,3]
|
||||
ITEM "-|Nessuno" MESSAGE CLEAR,F_SEQRIC4
|
||||
ITEM "C|Cliente" MESSAGE ENABLE,F_SEQRIC4
|
||||
ITEM "V|Categoria di vendita" MESSAGE ENABLE,F_SEQRIC4
|
||||
ITEM "A|Agente" MESSAGE ENABLE,F_SEQRIC4
|
||||
ITEM "P|Cod. pagamento" MESSAGE ENABLE,F_SEQRIC4
|
||||
ITEM "S|Sconto" MESSAGE ENABLE,F_SEQRIC4
|
||||
ITEM "Z|Zona" MESSAGE ENABLE,F_SEQRIC4
|
||||
ITEM "M|Articolo di magazzino" MESSAGE ENABLE,F_SEQRIC4
|
||||
ITEM "E|Categoria merc." MESSAGE ENABLE,F_SEQRIC4
|
||||
ITEM "R|Sottocategoria merc." MESSAGE ENABLE,F_SEQRIC4
|
||||
ITEM "F|Raggruppamento fisc." MESSAGE ENABLE,F_SEQRIC4
|
||||
STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQRIC1)&&(#THIS_FIELD!=#F_SEQRIC2)&&(#THIS_FIELD!=#F_SEQRIC4))
|
||||
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
|
||||
GROUP 5
|
||||
END
|
||||
|
||||
LISTBOX F_SEQRIC4 22
|
||||
BEGIN
|
||||
PROMPT 32 9 ""
|
||||
FIELD S3[4,4]
|
||||
ITEM "-|Nessuno"
|
||||
ITEM "C|Cliente"
|
||||
ITEM "V|Categoria di vendita"
|
||||
ITEM "A|Agente"
|
||||
ITEM "P|Cod. pagamento"
|
||||
ITEM "S|Sconto"
|
||||
ITEM "Z|Zona"
|
||||
ITEM "M|Articolo di magazzino"
|
||||
ITEM "E|Categoria merc."
|
||||
ITEM "R|Sottocategoria merc."
|
||||
ITEM "F|Raggruppamento fisc."
|
||||
STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQRIC1)&&(#THIS_FIELD!=#F_SEQRIC2)&&(#THIS_FIELD!=#F_SEQRIC3))
|
||||
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
|
||||
GROUP 5
|
||||
END
|
||||
|
Loading…
x
Reference in New Issue
Block a user