Patch level : 12.00

Files correlati     :

Bug                 :
Collegamento a fepa
This commit is contained in:
Alessandro Bonazzi 2025-04-28 01:10:22 +02:00
parent de6f7f9722
commit 676000859d
686 changed files with 358662 additions and 0 deletions

Binary file not shown.

22
src/cg01/Cg7 quadri.txt Normal file
View File

@ -0,0 +1,22 @@
cReport Quadro
cg7400a Intestazione
cg7400b A
cg7400c B
cg7500a C - D
cg7600a E
cg7700a F pag. 1
cg7700b F pag. 2
cg7800a J
cg7900a H - M - K
cg7900b N - Q
cg7a00a L
cg7b00a T
cg7c00a X
cg7d00a O pag.1
cg7d00b O pag.2
cg7e00a G
cg7f00a S pag.1
cg7f00b S pag.2
cg7g00a V - W
cg7h00a P
cg7i00a Y - Z

BIN
src/cg01/IVA_2023_istr.pdf Normal file

Binary file not shown.

BIN
src/cg01/IVA_2023_mod.docx Normal file

Binary file not shown.

BIN
src/cg01/IVA_2023_mod.pdf Normal file

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" ?>
<report name="ivacasnoninc" lpi="6">
<font face="Courier New" size="10" />
<section type="Head" pattern="1" />
<section type="Head" level="1" pattern="1">
<prescript description="H1 PRESCRIPT">0 #F1.102 !
0
#F1.103 !</prescript>
</section>
<section type="Head" level="2" pattern="1">
<groupby>NUMREG</groupby>
<postscript description="H2 POSTSCRIPT">0
#F2.102 !
0
#F2.103 !</postscript>
<field type="Testo" width="15" pattern="1" text="Registrazione" />
<field border="2" y="1" type="Linea" width="80" height="0" pattern="1" />
<field x="15" type="Stringa" width="10" id="101" pattern="1">
<source>NUMREG</source>
<postscript description="H2.101 POSTSCRIPT">#THIS @
#F2.101 !</postscript>
</field>
</section>
<section type="Body" pattern="1" />
<section type="Body" level="1" pattern="1">
<field type="Numero" align="right" width="10" pattern="1">
<source>NUMREG</source>
</field>
<field x="10.5" type="Numero" align="right" width="10" pattern="1">
<source>NUMREGP</source>
</field>
<field x="20.5" type="Data" width="10" pattern="1">
<source>DATAREG</source>
</field>
<field x="30.5" type="Data" width="10" pattern="1">
<source>DATAREGP</source>
</field>
<field x="41.5" type="Stringa" width="1" id="101" pattern="1">
<source>SEZIONE</source>
</field>
<field x="43.5" type="Valuta" align="right" width="10" id="102" pattern="1" text="#########,@@">
<source>IMPONIBILE</source>
<postscript description="B1.102 POSTSCRIPT">#102 @
#101 @
"D"
=
IF
#F2.102 @
+
#F2.102 !
ELSE
#F2.103 @
+
#F2.103 !
THEN
</postscript>
</field>
</section>
<section type="Foot" pattern="1" />
<section type="Foot" level="1" pattern="1">
<field x="43" type="Valuta" align="right" width="10" id="102" pattern="1" text="#########,@@" />
<field x="54" type="Valuta" align="right" width="10" id="103" pattern="1" text="#########,@@" />
<field x="66" type="Valuta" align="right" width="10" id="104" pattern="1" text="#########,@@">
<prescript description="F1.104 PRESCRIPT">#102 @
#103 @
-
#THIS !</prescript>
</field>
</section>
<section type="Foot" level="2" pattern="1">
<field border="2" y="1" type="Linea" width="80" height="0" pattern="1" />
<field y="2" type="Testo" width="10" pattern="1" text="Totale" />
<field x="9.5" y="2" type="Numero" align="right" width="10" id="101" pattern="1" />
<field x="43" y="2" type="Valuta" align="right" width="10" id="102" pattern="1" text="#########,@@">
<postscript description="F2.102 POSTSCRIPT">#102 @
#F1.102 @
+
#F1.102 !
</postscript>
</field>
<field x="54" y="2" type="Valuta" align="right" width="10" id="103" pattern="1" text="#########,@@">
<postscript description="F2.103 POSTSCRIPT">#103 @
#F1.103 @
+
#F1.103 !
</postscript>
</field>
<field x="66" y="2" type="Valuta" align="right" width="10" id="104" pattern="1" text="#########,@@">
<prescript>#102 @
#103 @
-
#THIS !</prescript>
</field>
</section>
<sql>USE IVADIFF SELECT (BETWEEN(DATAREG,#DADATA,#ADATA))&#26;&#26;((DATAREGP=="")||(BETWEEN(DATAREGP,#DADATA,#ADATA)))&#26;&#26;(TIPOIVA==1)&#26;&#26;(TIPODIFF==2)
</sql>
</report>

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
src/cg01/cb0000.zip Normal file

Binary file not shown.

10
src/cg01/cfban.h Normal file
View File

@ -0,0 +1,10 @@
#define CFBAN_TIPOCF "TIPOCF"
#define CFBAN_CODCF "CODCF"
#define CFBAN_TIPOBAN "TIPOBAN"
#define CFBAN_NRIGA "NRIGA"
#define CFBAN_ABI "ABI"
#define CFBAN_CAB "CAB"
#define CFBAN_PROGPR "PROGPR"
#define CFBAN_NUMCC "NUMCC"
#define CFBAN_IBAN "IBAN"

43
src/cg01/cg0.cpp Normal file
View File

@ -0,0 +1,43 @@
#include <xvt.h>
#include "cg0.h"
int main(int argc, char** argv)
{
const int op = argc < 2 ? 0 : argv[1][1]-'0';
switch (op)
{
case 1: cg0200(argc,argv); break; // Clienti/Fornitori
case 2: cg0300(argc,argv); break; // Progressivi allegati
case 3: cg0400(argc,argv); break; // Progressivi IVA
case 4: cg0500(argc,argv); break; // Causali contabili
case 5: cg0600(argc,argv); break; // Tabelle contabili
case 6: cg0700(argc, argv); break; // Clienti/Fornitori occasionali
case 7: cg0800(argc, argv); break; // Stampa progressivi IVA avanzata
case 8: cg0900(argc, argv); break; // Stampa progressivi IVA avanzata per attività
default: cg0100(argc,argv); break; // Piano dei conti
}
return 0;
}

27
src/cg01/cg0.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef __CG0_H
#define __CG0_H
int cg0100(int argc, char* argv[]);
int cg0200(int argc, char* argv[]);
int cg0300(int argc, char* argv[]);
int cg0400(int argc, char* argv[]);
int cg0500(int argc, char* argv[]);
int cg0600(int argc, char* argv[]);
int cg0700(int argc, char* argv[]);
int cg0800(int argc, char* argv[]);
int cg0900(int argc, char* argv[]);
#endif // __CG0_H

BIN
src/cg01/cg01.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

332
src/cg01/cg0100.cpp Normal file
View File

@ -0,0 +1,332 @@
#include <recarray.h>
#include <relapp.h>
#include "cg0.h"
#include "cg0100.h"
#include <pconti.h>
#include <saldi.h>
enum TIndicatore_bilancio { ATTIVITA=1, PASSIVITA, COSTI, RICAVI, ORDINE };
class TPianoconti_app : public TRelation_application
{
TMask* _msk;
TRelation *_rel;
bool user_create();
bool user_destroy();
virtual TMask* _get_mask(int mode) {return _msk;}
virtual bool changing_mask(int mode) {return FALSE;}
virtual bool protected_record(TRectype &rec);
virtual void init_query_mode(TMask& m);
virtual void init_insert_mode(TMask& m);
virtual void init_modify_mode(TMask& m) {init_insert_mode(m);}
virtual int write(const TMask& m);
virtual int rewrite(const TMask & m);
virtual int read(TMask& m);
public:
// @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
virtual bool check_autorization() const { return false; }
virtual TRelation* get_relation() const {return _rel;}
};
HIDDEN inline TPianoconti_app& app() { return (TPianoconti_app&) main_app();}
int TPianoconti_app::read(TMask& m)
{
const TRelation* r = get_relation();
m.autoload(*r);
if (m.get(FLD_CM1_LETTIVD).empty())
{
int sezivd = m.get_int(FLD_CM1_SEZIVD);
if (sezivd == 1 || sezivd == 2)
m.set(FLD_CM1_SEZIVD, sezivd + 5);
}
if (m.get(FLD_CM1_LETTIVDOPP).empty())
{
int sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
if (sezivd == 1 || sezivd == 2)
m.set(FLD_CM1_SEZIVDOPP, sezivd + 5);
}
return NOERR;
}
int TPianoconti_app::rewrite(const TMask& m)
{
TString16 sez;
TRelation *r = get_relation();
m.autosave(*r);
if (!m.field(FLD_CM1_CODTABANALISI).enabled())
r->curr().zero(PCN_CODCBL);
int sezivd = m.get_int(FLD_CM1_SEZIVD);
if (sezivd == 6 || sezivd == 7)
{
sez.format("%d", sezivd - 5);
r->lfile().put(PCN_SEZIVD, sez);
}
sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
if (sezivd == 6 || sezivd == 7)
{
sez.format("%d", sezivd - 5);
r->lfile().put(PCN_SEZIVDOPP, sez);
}
const int err = r->rewrite();
return err;
}
int TPianoconti_app::write(const TMask& m)
{
TString16 sez;
TRelation *r = get_relation();
m.autosave(*r);
if (!m.field(FLD_CM1_CODTABANALISI).enabled())
r->curr().zero(PCN_CODCBL);
int sezivd = m.get_int(FLD_CM1_SEZIVD);
if (sezivd == 6 || sezivd == 7)
{
sez.format("%d", sezivd - 5);
r->lfile().put(PCN_SEZIVD, sez);
}
sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
if (sezivd == 6 || sezivd == 7)
{
sez.format("%d", sezivd - 5);
r->lfile().put(PCN_SEZIVDOPP, sez);
}
return r->write();
}
bool TPianoconti_app::protected_record(TRectype &rec)
{
bool prot = false;
const int gruppo = rec.get_int(PCN_GRUPPO);
const int conto = rec.get_int(PCN_CONTO);
const long sottoc = rec.get_long(PCN_SOTTOCONTO);
// Se e' un sottoconto posso cancellarlo se non esistono saldi
if (sottoc != 0)
{
TLocalisamfile saldi(LF_SALDI);
saldi.setkey(2);
saldi.put(PCN_GRUPPO, gruppo);
saldi.put(PCN_CONTO, conto);
saldi.put(PCN_SOTTOCONTO, sottoc);
prot = saldi.read(_isgteq) == NOERR &&
gruppo == saldi.get_int(PCN_GRUPPO) && conto == saldi.get_int(PCN_CONTO) && sottoc == saldi.get_long(PCN_SOTTOCONTO) &&
(saldi.get_real(SLD_SALDO) != ZERO || saldi.get_real(SLD_PDARE) != ZERO ||
saldi.get_real(SLD_PAVERE) != ZERO || saldi.get_real(SLD_SALDOFIN) != ZERO ||
saldi.get_real(SLD_PDAREPRO) != ZERO || saldi.get_real(SLD_PAVEREPRO) != ZERO);
}
else
{
TLocalisamfile pconti(LF_PCON);
pconti.put(PCN_GRUPPO, gruppo);
// Se e' un conto controllo se ha dei sottoconti
if (conto != 0)
pconti.put(PCN_CONTO, conto);
const TRectype rec1(pconti.curr());
prot = pconti.read(_isgreat) == NOERR && pconti.curr().same_key(rec1, 1, 1);
}
return prot;
}
void TPianoconti_app::init_query_mode(TMask& m)
{
m.show_default();
m.hide(-3);
}
HIDDEN bool tmcf_handler(TMask_field& f, KEY key)
{
if (f.active() && key == K_SPACE)
{
TMask& m = f.mask();
const int conto = atoi(m.get(FLD_CM1_CONTO));
const long sottoc = atol(m.get(FLD_CM1_SOTTOCONTO));
const bool enable_sezsaldi = (sottoc != 0) || (sottoc == 0 && conto != 0 && m.get(FLD_CM1_TMCF).not_empty());
m.show(FLD_CM2_SEZSALDI, enable_sezsaldi);
}
return TRUE;
}
void TPianoconti_app::init_insert_mode(TMask& m)
{
const int gruppo = m.get_int(FLD_CM1_GRUPPO);
const int conto = m.get_int(FLD_CM1_CONTO);
const long sottoc = m.get_long(FLD_CM1_SOTTOCONTO);
bool ivd_enable = TRUE;
m.show_default();
if (conto == 0 && sottoc == 0)
m.hide(-1);
else
if (sottoc == 0)
m.hide(-2);
else
m.hide(-3);
TString s, s2, s5;
TString8 s3, s4;
int s1 = 0;
int indbil = 0;
if (sottoc != 0)
{
TToken_string key; key.add(gruppo); key.add(conto);
const TRectype& pconti = cache().get(LF_PCON, key);
if (!pconti.empty())
{
s = pconti.get(PCN_CODCBL);
s1 = pconti.get_int(PCN_SEZIVD);
s2 = pconti.get(PCN_LETTIVD);
s3 = pconti.get(PCN_NUMRIVD);
s4 = pconti.get(PCN_NUMIVD);
if (s3.empty())
s3.spaces(4);
key.format("%1d%1s%s%s", s1, (const char*) s2,(const char*) s3, (const char*) s4);
s5 = cache().get("%IVD", key, "S0");
indbil = pconti.get_int(PCN_INDBIL);
}
ivd_enable = (s1 == 0) && s2.blank() && s3.blank() && s4.blank();
m.show(FLD_CM1_IVACOMP, indbil == RICAVI);
m.show(FLD_CM1_DESCIVACOMP, indbil == RICAVI);
}
// m.show(FLD_CM1_RICSER, indbil == PASSIVITA || indbil == RICAVI); // Sempre visibile per spesometro dal 9-10-2013
if (conto != 0)
{
m.enable(FLD_CM1_SEZIVD, ivd_enable);
m.show(FLD_CM1_LETTIVD, ivd_enable);
m.show(FLD_CM1_NUMRIVD, ivd_enable);
m.show(FLD_CM1_NUMIVD, ivd_enable);
m.show(F_SUB, ivd_enable);
m.show(F_SOTSUB, ivd_enable);
m.show(FLD_CM1_DESCIVD, ivd_enable); //
if (!ivd_enable)
{
m.set(FLD_CM1_SEZIVD, s1);
m.set(FLD_CM1_LETTIVDH, s2);
m.set(FLD_CM1_NUMRIVDH, s3);
m.set(FLD_CM1_NUMIVDH, s4.left(2));
m.set(F_SUBH, s4.mid(2,2));
m.set(F_SOTSUBH, s4.mid(4,2));
m.set(FLD_CM1_DESCIVDH, s5); //
m.enable(FLD_CM1_SEZIVDOPP);
m.disable(FLD_CM1_LETTIVDH);
m.disable(FLD_CM1_NUMRIVDH);
m.disable(FLD_CM1_NUMIVDH);
m.disable(FLD_CM1_DESCIVDH); //
}
m.show(FLD_CM1_LETTIVDH, !ivd_enable);
m.show(FLD_CM1_NUMRIVDH, !ivd_enable);
m.show(FLD_CM1_NUMIVDH, !ivd_enable);
m.show(F_SUBH, !ivd_enable);
m.show(F_SOTSUBH, !ivd_enable);
m.show(FLD_CM1_DESCIVDH, !ivd_enable); //
if (s.empty())
{
TToken_string key; key.add(gruppo);
const TRectype& pconti = cache().get(LF_PCON, key);
s = pconti.get(PCN_CODCBL);
}
}
if (s.not_empty())
{
m.set(FLD_CM1_CODTABANALISI, s);
m.check_field(FLD_CM1_CODTABANALISI);
m.disable(FLD_CM1_CODTABANALISI);
m.disable(FLD_CM1_DESCRANALISI);
}
else
{
m.enable(FLD_CM1_CODTABANALISI);
m.enable(FLD_CM1_DESCRANALISI);
}
const bool enable_sezsaldi = (sottoc != 0) || (sottoc == 0 && conto != 0 && m.get(FLD_CM1_TMCF).not_empty());
m.show(FLD_CM2_SEZSALDI, enable_sezsaldi);
}
HIDDEN bool gruppo_handler(TMask_field& f, KEY key)
{
if (key == K_ENTER)
{
TMask& m = f.mask();
const int gruppo = m.get_int(FLD_CM1_GRUPPO);
const int conto = m.get_int(FLD_CM1_CONTO);
if (gruppo != 0 && conto != 0)
{
TLocalisamfile pconti(LF_PCON);
pconti.put(PCN_GRUPPO, gruppo) ;
if (pconti.read() != NOERR)
return f.error_box (TR("Il gruppo non esiste"));
}
}
return true;
}
HIDDEN bool conto_handler(TMask_field& f, KEY key)
{
if (key == K_ENTER)
{
TMask& m = f.mask();
const int gruppo = m.get_int(FLD_CM1_GRUPPO);
const int conto = m.get_int(FLD_CM1_CONTO);
const long sottoc = m.get_long(FLD_CM1_SOTTOCONTO);
if (gruppo != 0 && conto != 0 && sottoc != 0)
{
TLocalisamfile pconti(LF_PCON);
pconti.put(PCN_GRUPPO, gruppo) ;
pconti.put(PCN_CONTO, conto) ;
if (pconti.read() != NOERR)
return m.field(FLD_CM1_CONTO).error_box (TR("Il conto non esiste"));
else
{
if (pconti.get(PCN_TMCF).not_empty())
return m.field(FLD_CM1_SOTTOCONTO).error_box (TR("Non e' possibile inserire un sottoconto di un conto relativo ad un cliente/fornitore"));
}
}
}
return TRUE;
}
bool TPianoconti_app::user_create()
{
open_files(LF_PCON, LF_SALDI, LF_TABCOM, 0);
_msk = new TMask("cg0100a") ;
_msk->set_handler(FLD_CM1_GRUPPO, gruppo_handler);
_msk->set_handler(FLD_CM1_CONTO, conto_handler);
_msk->set_handler(FLD_CM1_TMCF, tmcf_handler);
_rel = new TRelation(LF_PCON);
// set_search_field(FH_SOTTOCONTO); // Ottima trovata, ma non funziona
set_search_field(FLD_CM1_SOTTOCONTO);
return TRUE;
}
bool TPianoconti_app::user_destroy()
{
delete _rel;
delete _msk;
return TRUE;
}
int cg0100(int argc, char* argv[])
{
TPianoconti_app a ;
a.run(argc, argv, TR("Piano dei conti"));
return 0;
}

65
src/cg01/cg0100.h Normal file
View File

@ -0,0 +1,65 @@
#ifndef __CG0100_H
#define __CG0100_H
//#define PZ_COMUNI 0
// posizione file comuni in _arrfiles
// campi maschera cg0100a.msk
#define FLD_CM1_GRUPPO 101
#define FLD_CM1_CONTO 102
#define FLD_CM1_SOTTOCONTO 103
#define FLD_CM1_DESC 104
#define FLD_CM1_CODTABANALISI 105
#define FLD_CM1_SEZIVD 106
#define FLD_CM1_LETTIVD 107
#define FLD_CM1_NUMRIVD 108
#define FLD_CM1_NUMIVD 109
#define FLD_CM1_INDBIL 110
#define FLD_CM1_TMCF 111
#define FLD_CM1_TIPOSPRIC 112
#define FLD_CM1_SEZIVDOPP 113
#define FLD_CM1_LETTIVDOPP 114
#define FLD_CM1_NUMRIVDOPP 115
#define FLD_CM1_NUMIVDOPP 116
#define FLD_CM1_DTIPOSPRIC 117
#define F_SUB 118
#define F_SUBOPP 119
#define F_SOTSUB 120
#define F_SOTSUBOPP 121
#define FLD_CM1_LETTIVDH 150
#define FLD_CM1_NUMRIVDH 151
#define FLD_CM1_NUMIVDH 152
#define FLD_CM1_RICSER 153
#define FLD_CM1_DESCRANALISI 154
#define FLD_CM1_IVACOMP 155
#define FLD_CM1_DESCIVACOMP 156
#define FLD_CM1_DESCIVD 157
#define FLD_CM1_DESCIVDOPP 158
#define FLD_CM1_DESCIVDH 159
#define F_SUBH 160
#define F_SOTSUBH 161
#define FLD_CM2_STSOTTBIL 200
#define FLD_CM2_STSOTTAB 201
#define FLD_CM2_SEZSALDI 202
#define FLD_CM2_SOSPESO 203
#define FLD_CM2_COMPENS 204
#define FLD_CM2_STSOTTABS 205
#define FLD_CM1_DESCG 206
#define FLD_CM1_DESCC 207
#define FH_SOTTOCONTO 208
#define FLD_CM2_CMSNEEDED 209
#define FLD_CM2_CODCMS 210
#define FLD_CM2_FASCMS 211
#define FLD_CM2_DESCMS 212
#define FLD_CM2_DESFAS 213
#endif // __CG0100_H

539
src/cg01/cg0100a.uml Normal file
View File

@ -0,0 +1,539 @@
#include "cg0100.h"
TOOLBAR "topbar" 0 0 0 2
#include <relapbar.h>
ENDPAGE
PAGE "Piano dei conti " 0 0 0 0
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 1 0 ""
FLAGS "R"
END
NUMBER FLD_CM1_GRUPPO 3
BEGIN
PROMPT 2 1 "Gruppo "
HELP "Codice del gruppo"
FIELD GRUPPO
KEY 1
USE LF_PCON SELECT CONTO=""
INPUT GRUPPO FLD_CM1_GRUPPO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT FLD_CM1_GRUPPO GRUPPO
OUTPUT FLD_CM1_DESCG DESCR
CHECKTYPE REQUIRED
END
STRING FLD_CM1_DESCG 50
BEGIN
PROMPT 24 1 ""
FLAGS "D"
END
NUMBER FLD_CM1_CONTO 3
BEGIN
PROMPT 2 2 "Conto "
HELP "Codice dell'eventuale conto"
FIELD CONTO
KEY 1
USE LF_PCON SELECT ((CONTO!="")&&(SOTTOCONTO=""))
COPY INPUT FLD_CM1_GRUPPO
INPUT CONTO FLD_CM1_CONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT FLD_CM1_GRUPPO GRUPPO
OUTPUT FLD_CM1_CONTO CONTO
OUTPUT FLD_CM1_DESCC DESCR
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 FLD_CM1_SOTTOCONTO
WARNING "Manca il conto"
END
STRING FLD_CM1_DESCC 50
BEGIN
PROMPT 24 2 ""
FLAGS "D"
END
NUMBER FLD_CM1_SOTTOCONTO 6
BEGIN
PROMPT 2 3 "Sottoconto "
HELP "Codice dell'eventuale sottoconto"
FIELD SOTTOCONTO
KEY 1
USE LF_PCON SELECT SOTTOCONTO!=""
COPY INPUT FLD_CM1_CONTO
INPUT SOTTOCONTO FLD_CM1_SOTTOCONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Sosp." SOSPESO
DISPLAY "Descrizione@50" DESCR
OUTPUT FLD_CM1_SOTTOCONTO SOTTOCONTO
OUTPUT FLD_CM1_GRUPPO GRUPPO
OUTPUT FLD_CM1_CONTO CONTO
OUTPUT FLD_CM1_DESC DESCR
CHECKTYPE NORMAL
END
NUMBER FH_SOTTOCONTO 6
BEGIN
PROMPT 60 1 ""
FLAGS "HG"
USE LF_PCON
COPY INPUT FLD_CM1_SOTTOCONTO
COPY DISPLAY FLD_CM1_SOTTOCONTO
COPY OUTPUT FLD_CM1_SOTTOCONTO
END
STRING FLD_CM1_DESC 50
BEGIN
PROMPT 24 3 ""
FIELD DESCR
KEY 2
USE LF_PCON KEY 2
INPUT DESCR FLD_CM1_DESC
DISPLAY "Descrizione@50" DESCR
DISPLAY "Sosp." SOSPESO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT FLD_CM1_SOTTOCONTO
CHECKTYPE REQUIRED
HELP "Descrizione del gruppo o del conto o del sottoconto"
WARNING "Descrizione mancante"
END
NUMBER FLD_CM1_CODTABANALISI 12
BEGIN
PROMPT 1 5 "Codice Tabella Analisi "
HELP "Codice di raggruppamento per l'analisi di bilancio"
FIELD CODCBL
USE LF_ABPCON
INPUT CODCBL FLD_CM1_CODTABANALISI
DISPLAY "Codice@12" CODCBL
DISPLAY "Descrizione@40" DESCRIZ[1,40]
DISPLAY "I.B." INDBIL
DISPLAY "Codice opp.@11" CODCONTR
OUTPUT FLD_CM1_CODTABANALISI CODCBL
OUTPUT FLD_CM1_DESCRANALISI DESCRIZ[1,40]
CHECKTYPE NORMAL
WARNING "Codice tabella non presente"
FLAGS "Z"
ADD RUN AB0 -1
END
STRING FLD_CM1_DESCRANALISI 40 34
BEGIN
PROMPT 40 5 ""
USE LF_ABPCON KEY 2
INPUT DESCRIZ FLD_CM1_DESCRANALISI
DISPLAY "Descrizione@40" DESCRIZ[1,40]
DISPLAY "Codice@11" CODCBL
DISPLAY "I.B." INDBIL
DISPLAY "Codice opp.@11" CODCONTR
OUTPUT FLD_CM1_CODTABANALISI CODCBL
OUTPUT FLD_CM1_DESCRANALISI DESCRIZ[1,40]
ADD RUN AB0 -1
END
LIST FLD_CM1_INDBIL 1 22
BEGIN
PROMPT 1 6 "Sezione di bilancio "
FIELD INDBIL
GROUP 1 3
HELP "Sezione di appartenenza del conto"
ITEM "1|1. Attivita'"
ITEM "2|2. Passivita'"
ITEM "3|3. Costi"
ITEM "4|4. Ricavi"
ITEM "5|5. Conti d'ordine"
END
LIST FLD_CM1_SEZIVD 1 22
BEGIN
PROMPT 1 7 "Sez. e classe IV dir. "
FIELD SEZIVD
ITEM "0|0. Nessuna" MESSAGE CLEAR,5@|CLEAR,6@
ITEM "1|1. Attivita'" MESSAGE ENABLE,5@|ENABLE,6@
ITEM "2|2. Passivita'" MESSAGE ENABLE,5@|ENABLE,6@
ITEM "5|5. Conto d'ordine" MESSAGE CLEAR,5@|ENABLE,6@
ITEM "6|6. C.ordine attivo" MESSAGE CLEAR,5@|ENABLE,6@
ITEM "7|7. C.ordine passivo" MESSAGE CLEAR,5@|ENABLE,6@
ITEM "9|9. Conto economico" MESSAGE ENABLE,5@|ENABLE,6@
HELP "Codice del conto secondo la IV direttiva CEE"
GROUP 1 4
END
STRING FLD_CM1_LETTIVD 1
BEGIN
PROMPT 49 7 ""
HELP "Codice del conto secondo la IV direttiva CEE"
FIELD LETTIVD
GROUP 1 5
FLAGS "U"
END
STRING FLD_CM1_LETTIVDH 1
BEGIN
PROMPT 49 7 ""
FLAGS "HDU"
GROUP 1 5
END
NUMBER FLD_CM1_NUMRIVD 8
BEGIN
PROMPT 51 7 ""
HELP "Codice del conto secondo la IV direttiva CEE"
FIELD NUMRIVD
GROUP 1 5
FLAGS "MZ"
END
NUMBER FLD_CM1_NUMRIVDH 8
BEGIN
PROMPT 51 7 ""
FLAGS "HDMZ"
GROUP 1 5
END
STRING FLD_CM1_NUMIVD 2
BEGIN
PROMPT 60 7 ""
FIELD NUMIVD[1,2]
GROUP 1 5
USE %IVD
INPUT CODTAB[1,1] FLD_CM1_SEZIVD
INPUT CODTAB[2,2] FLD_CM1_LETTIVD
INPUT CODTAB[3,6] FLD_CM1_NUMRIVD
INPUT CODTAB[7,8] FLD_CM1_NUMIVD
INPUT CODTAB[9,10] F_SUB
INPUT CODTAB[11,12] F_SOTSUB
DISPLAY "Sezione" CODTAB[1,1]
DISPLAY "Lettera" CODTAB[2,2]
DISPLAY "Classe @M" CODTAB[3,6]
DISPLAY "Numero" CODTAB[7,12]
DISPLAY "Descrizione@50" S0
OUTPUT FLD_CM1_SEZIVD CODTAB[1,1]
OUTPUT FLD_CM1_LETTIVD CODTAB[2,2]
OUTPUT FLD_CM1_NUMRIVD CODTAB[3,6]
OUTPUT FLD_CM1_NUMIVD CODTAB[7,8]
OUTPUT F_SUB CODTAB[9,10]
OUTPUT F_SOTSUB CODTAB[11,12]
OUTPUT FLD_CM1_DESCIVD S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
END
STRING FLD_CM1_NUMIVDH 2
BEGIN
PROMPT 60 7 ""
FLAGS "HD"
GROUP 1 5
END
LIST F_SUB 2 9
BEGIN
PROMPT 64 7 ""
GROUP 1 5
ITEM " |"
ITEM "02|Bis"
ITEM "03|Ter"
ITEM "04|Quater"
ITEM "05|Quinquies"
ITEM "06|Sexies"
FIELD NUMIVD[3,4]
END
LIST F_SUBH 2 9
BEGIN
PROMPT 64 7 ""
GROUP 1 5
ITEM " |"
ITEM "02|Bis"
ITEM "03|Ter"
ITEM "04|Quater"
ITEM "05|Quinquies"
ITEM "06|Sexies"
FLAGS "H"
END
STRING F_SOTSUB 2
BEGIN
PROMPT 76 7 ""
GROUP 1 5
COPY USE FLD_CM1_NUMIVD
COPY INPUT FLD_CM1_NUMIVD
COPY DISPLAY FLD_CM1_NUMIVD
COPY OUTPUT FLD_CM1_NUMIVD
FIELD NUMIVD[5,6]
END
STRING F_SOTSUBH 2
BEGIN
PROMPT 76 7 ""
GROUP 1 5
FLAGS "H"
END
STRING FLD_CM1_DESCIVD 70 50
BEGIN
PROMPT 24 8 ""
USE %IVD KEY 2
INPUT S0 FLD_CM1_DESCIVD
DISPLAY "Descrizione@50" S0
DISPLAY "Sezione" CODTAB[1,1]
DISPLAY "Lettera" CODTAB[2,2]
DISPLAY "Classe @M" CODTAB[3,6]
DISPLAY "Numero" CODTAB[7,10]
COPY OUTPUT FLD_CM1_NUMIVD
CHECKTYPE NORMAL
GROUP 1 5
END
STRING FLD_CM1_DESCIVDH 70 50
BEGIN
PROMPT 24 8 ""
FLAGS "HD"
GROUP 1 5
END
LIST FLD_CM1_SEZIVDOPP 1 22
BEGIN
PROMPT 1 9 "Classe segno opposto "
FIELD SEZIVDOPP
GROUP 1 2 4 6
ITEM "0|0. Nessuna" MESSAGE CLEAR,7@
ITEM "1|1. Attivita'" MESSAGE ENABLE,7@
ITEM "2|2. Passivita'" MESSAGE ENABLE,7@
ITEM "5|5. Conto d'ordine" MESSAGE CLEAR,7@
ITEM "6|6. C.ordine attivo" MESSAGE CLEAR,7@
ITEM "7|7. C.ordine passivo" MESSAGE CLEAR,7@
ITEM "9|9. Conto economico" MESSAGE ENABLE,7@
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
END
STRING FLD_CM1_LETTIVDOPP 1
BEGIN
PROMPT 49 9 ""
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
FIELD LETTIVDOPP
FLAGS "U"
GROUP 1 2 4 7
END
NUMBER FLD_CM1_NUMRIVDOPP 8 4
BEGIN
PROMPT 51 9 ""
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
FIELD NUMRIVDOPP
FLAGS "MZ"
GROUP 1 2 4 7
END
STRING FLD_CM1_NUMIVDOPP 2
BEGIN
PROMPT 60 9 ""
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
FIELD NUMIVDOPP[1,2]
GROUP 1 2 4 7
COPY USE FLD_CM1_NUMIVD
INPUT CODTAB[1,1] FLD_CM1_SEZIVDOPP
INPUT CODTAB[2,2] FLD_CM1_LETTIVDOPP
INPUT CODTAB[3,6] FLD_CM1_NUMRIVDOPP
INPUT CODTAB[7,8] FLD_CM1_NUMIVDOPP
INPUT CODTAB[9,10] F_SUBOPP
INPUT CODTAB[11,12] F_SOTSUBOPP
COPY DISPLAY FLD_CM1_NUMIVD
OUTPUT FLD_CM1_SEZIVDOPP CODTAB[1,1]
OUTPUT FLD_CM1_LETTIVDOPP CODTAB[2,2]
OUTPUT FLD_CM1_NUMRIVDOPP CODTAB[3,6]
OUTPUT FLD_CM1_NUMIVDOPP CODTAB[7,8]
OUTPUT F_SUBOPP CODTAB[9,10]
OUTPUT F_SOTSUBOPP CODTAB[11,12]
OUTPUT FLD_CM1_DESCIVDOPP S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
END
LIST F_SUBOPP 9
BEGIN
PROMPT 64 9 ""
GROUP 1 2 4 7
ITEM " |"
ITEM "02|Bis"
ITEM "03|Ter"
ITEM "04|Quater"
ITEM "05|Quinquies"
ITEM "06|Sexies"
FIELD NUMIVDOPP[3,4]
END
STRING F_SOTSUBOPP 2
BEGIN
PROMPT 76 9 ""
GROUP 1 2 4 7
COPY USE FLD_CM1_NUMIVDOPP
COPY INPUT FLD_CM1_NUMIVDOPP
COPY DISPLAY FLD_CM1_NUMIVDOPP
COPY OUTPUT FLD_CM1_NUMIVDOPP
FIELD NUMIVDOPP[5,6]
END
STRING FLD_CM1_DESCIVDOPP 70 50
BEGIN
PROMPT 24 10 ""
GROUP 1 2 4 7
USE %IVD KEY 2
INPUT S0 FLD_CM1_DESCIVDOPP
DISPLAY "Descrizione@50" S0
DISPLAY "Sezione" CODTAB[1,1]
DISPLAY "Lettera" CODTAB[2,2]
DISPLAY "Classe @M" CODTAB[3,6]
DISPLAY "Numero" CODTAB[7,10]
COPY OUTPUT FLD_CM1_NUMIVDOPP
CHECKTYPE NORMAL
END
LIST FLD_CM1_TIPOSPRIC 2 50
BEGIN
PROMPT 1 11 "Tipo Spesa/Ricavo "
FIELD TIPOSPRIC
GROUP 1 2
HELP "Specificare il tipo do conto"
ITEM "0|0. Acquisti o vendite in genere"
ITEM "1|1. Acquisti beni per rivendita"
ITEM "2|2. Acquisti beni ammortizzabili"
ITEM "3|3. Acquisti beni ammortizzabili con detr. 6%"
ITEM "4|4. Vendita beni strumentali art. 17"
ITEM "5|5. Beni per rivendita da non ventilare"
ITEM "8|8. Altri beni strumentali acquistati in leasing"
ITEM "9|9. Spese Generali"
ITEM "17|17. Operazioni nei confronti dei condominii"
ITEM "51|51. Acquisti materie prime per la produzione"
END
LIST FLD_CM1_RICSER 1 18
BEGIN
PROMPT 1 12 "Merce / Servizi "
FIELD RICSER
ITEM "0|"
ITEM "1|Servizi"
ITEM "2|Merce"
END
STRING FLD_CM1_IVACOMP 4
BEGIN
PROMPT 1 13 "Cod. IVA compensazione "
FIELD IVACOMP
GROUP 1 2
USE %IVA
FLAGS "U"
INPUT CODTAB FLD_CM1_IVACOMP
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "Tipo" S1
DISPLAY "%@5" R0
DISPLAY "Vent." S6
DISPLAY "Sospeso" B2
OUTPUT FLD_CM1_IVACOMP CODTAB
OUTPUT FLD_CM1_DESCIVACOMP S0
CHECKTYPE NORMAL
VALIDATE ZEROFILL_FUNC 2
END
STRING FLD_CM1_DESCIVACOMP 50 38
BEGIN
PROMPT 36 13 ""
GROUP 1 2
USE %IVA KEY 2
INPUT S0 FLD_CM1_DESCIVACOMP
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
DISPLAY "Tipo" S1
DISPLAY "%@5" R0
DISPLAY "Vent." S6
DISPLAY "Sospeso" B2
COPY OUTPUT FLD_CM1_IVACOMP
CHECKTYPE NORMAL
END
LIST FLD_CM1_TMCF 1 13
BEGIN
PROMPT 1 13 "Tipo sottoconti "
FIELD TMCF
GROUP 1 3
HELP "Tipo dei sottoconti (Normale o clienti/fornitori)"
ITEM " |Normali"
ITEM "C|Clienti"
ITEM "F|Fornitori"
END
LIST FLD_CM2_SEZSALDI 1 10
BEGIN
PROMPT 1 14 "Controllo saldo primanota "
HELP "Tipo di controllo del saldo in prima nota"
FIELD SEZSALDI
GROUP 1
ITEM " |Nessuno"
ITEM "A|Avere"
ITEM "D|Dare"
END
BOOLEAN FLD_CM2_STSOTTBIL
BEGIN
PROMPT 1 15 "Non stampare dett.sottoc. su bilanci a sezioni"
HELP "Indicare se stampare il dettaglio dei sottoconti nei bilanci a sezioni contrapposte"
FIELD STSOTTBIL
GROUP 1 3
END
BOOLEAN FLD_CM2_COMPENS
BEGIN
PROMPT 56 15 "Compensazione saldi"
HELP "Indicare se e' ammessa la compensazione dei saldi"
FIELD COMPENS
GROUP 1 3
END
BOOLEAN FLD_CM2_STSOTTAB
BEGIN
PROMPT 1 16 "Stampa dettaglio sottoconti su analisi"
HELP "Indicare se stampare il dettaglio dei sottoconti nell'analisi di bilancio"
FIELD STSOTTAB
GROUP 1 3
MESSAGE COPY,FLD_CM2_STSOTTABS
END
BOOLEAN FLD_CM2_STSOTTABS
BEGIN
PROMPT 1 16 "Stampa dettaglio movimenti su analisi "
FIELD STSOTTAB
GROUP 1 2
MESSAGE COPY,FLD_CM2_STSOTTAB
END
BOOLEAN FLD_CM2_SOSPESO
BEGIN
PROMPT 56 16 "Conto sospeso"
HELP "Indicare se sospendere il conto in prima nota"
FIELD SOSPESO
GROUP 1 2
END
BOOLEAN FLD_CM2_CMSNEEDED
BEGIN
PROMPT 1 17 "Conto attivo per contabilita' analitica"
FIELD ANALITICA
GROUP 8
END
ENDPAGE
ENDMASK

BIN
src/cg01/cg02.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

1763
src/cg01/cg0200.cpp Normal file

File diff suppressed because it is too large Load Diff

274
src/cg01/cg0200.h Normal file
View File

@ -0,0 +1,274 @@
#ifndef __CG0200_H
#define __CG0200_H
#define TCLI "C"
#define TFOR "F"
#define F_TIPOCF 101
#define F_CODCF 102
#define F_RAGSOC 103
#define F_INDCF 104
#define F_CIVCF 105
#define F_STATOCF 106
#define F_COMCF 107
#define F_CAPCF 108
#define F_COFI 109
#define F_STATOPAIV 110
#define F_STATOPAIVSTR 128
#define F_PAIV 111
#define F_TIPOPERS 112
#define F_ALLEG 113
#define F_GRUPPO 114
#define F_CONTO 115
#define F_DESCONTO 137
#define F_GRUPPORIC 116
#define F_CONTORIC 117
#define F_SOTTOCRIC 118
#define F_DESCRIC 138
#define F_TIPOAPER 119
#define F_CODANAGPER 120
#define F_PTEL 121
#define F_TEL 122
#define F_PFAX 123
#define F_FAX 124
#define F_PTELEX 125
#define F_TELEX 126
#define F_DATANASC 127
#define F_COMNASC 129
#define F_DENCOMNASC 135
#define F_CODSTAT 130
#define F_CODPAG 131
#define F_DESPAG 331
#define F_RAGSOC1 132
#define F_CODVAL 136
#define F_DESVAL 336
#define F_FIDO 139
#define F_LOCALITACF 144
#define F_CODAG 145
#define F_SOSPESO 146
#define F_CODALLEG 148
#define LST_TIPO_RFSO 500
#define F_COD_RFSO_G 501
#define F_COD_RFSO_F 502
#define F_OCCASIONALE 149
#define F_DENCOMCF 150
#define F_PROVCF 152
#define F_RICALT 151
#define F_PTEL2 153
#define F_TEL2 154
#define F_PTEL3 155
#define F_TEL3 156
#define F_CODLIN 157
#define F_DESLIN 158
#define F_CODINDDOC 160
#define F_CODNOTE 161
#define F_CODLEG 162
#define F_CODCATC 163
#define F_CODZONA 164
#define F_PROVV 165
#define F_LIQPAG 166
#define F_CODPRCF 167
#define F_CODINDSP 168
#define F_CODPORTO 169
#define F_RAGGDOC 170
#define F_NCOPIE 171
#define F_CODASS 172
#define F_ASSFIS 173
#define F_FATTSOSP 174
#define F_VSNRPROT 175
#define F_VSDATAREG 176
#define F_NSNRPROT 177
#define F_NSDATAREG 178
#define F_ADDBNS1500 179
#define F_CATFIN 180
#define F_CODABIPR 181
#define F_CODBANPR 182
#define F_CODINDEFF 183
#define F_EMEFFRICH 184
#define F_CODNOTESP1 185
#define F_CODNOTESP2 186
#define F_CODSPMEZZO 187
#define F_IMPMINEFF 188
#define F_NONACCEFF 189
#define F_NONSCADEFF 190
#define F_ADDBOLLI 191
#define F_PERCSPINC 193
#define F_IVARID 194
#define F_GESTCONTR 195
#define F_CATVEN 196
#define F_CODLIST 197
#define F_CODSCC 198
#define F_SCONTO 199
#define F_CODMAG 200
#define F_CODSP1 201
#define F_CODSP2 202
#define F_CODSP3 203
#define F_CODSP4 204
#define F_PROFSOLL 205
#define F_MAXSOLL 206
#define F_DATAESC 207
#define F_DATASOLL 208
#define F_NUMESC 209
#define F_TITOLO 210
#define F_RAGGOR 211
#define F_MINORD 212
#define F_MAXORD 213
#define F_PREVORD 214
#define F_TIPOEVORD 215
#define F_SHEET_G_VEN 216
#define F_CODVETT1 217
#define F_CODVETT2 218
#define F_CODVETT3 219
#define F_SHEET_CONT 220
#define F_DESTACF 224
#define F_CODSPED1 225
#define F_CODSPED2 226
#define F_RAGSOCALLEG 228
#define F_CODDEP 230
#define F_RAGGEFF 232
#define F_CODLIST1 234
#define F_ESACC 235
#define F_ESALL 236
#define F_ESCAR 237
#define F_ESPLA 238
#define F_ESLEG 239
#define F_ESVET 240
#define F_ADDCONAI 241
#define F_CONAIASS 242
#define F_REFERENTE 243
#define F_DESBANPR 244
#define F_TIPODOCFAT 245
#define F_CODCAUS 246
#define F_CODVALINTRA 247
#define F_DESVALINTRA 248
#define F_CODCAUSNC 249
#define F_DATAECONAI 250
#define F_DESCRASS 251
#define F_SESSO 252
#define F_CODAG1 253
#define F_PROVV1 254
#define F_CODCFFATT 255
#define F_DESCFFATT 256
#define F_IMPMINFAT 257
#define F_RIFDOC 258
#define F_CODCAUSINC 259
#define F_STATONASC 260
#define F_DESTANASC 261
#define DLG_ALTNEWCLI 262
#define F_PADESTIN 263
#define F_PARIFAMM 264
#define F_DISABLECUSTFP 265
#define F_CODCUSTFP 266
#define F_DATAICONAI 267
#define FLD_CODEORI 268
#define FLD_REGFISC 269
#define F_LORDO 270
#define F_ADDCAS 271
#define F_NUMFAT 272
#define F_HEADDESC 273
#define F_EDI 274
#define F_TPDESTEDI 275
#define F_DESTEDI 276
#define F_PRODACC 271
#define F_PRODALL 272
#define F_PRODCAR 273
#define F_PRODPLA 274
#define F_PRODLEG 275
#define F_PRODVET 276
#define DLG_RIC 300
#define DLG_CST 301
#define F_RAGSOCA 302
#define F_MAIL 303
#define F_BYMAIL 306
#define F_DOCMAIL 307
#define F_PEC 324
#define DLG_ANAG 308
#define DLG_CONTRLAV 309
#define F_BANA 310
#define F_BANP 311
#define F_DIPPUBB 312
#define F_ENTE 313
#define F_DESENTE 314
#define F_INDENTE 315
#define F_SPLITPAY 316
#define DLG_PERC 317
#define DLG_INIFATTEL 318
#define DLG_INIREVCHG 319
#define F_ADDRAGSOC 327
#define F_SPEDPRI 320
#define F_SPEDDATA 321
#define F_SPEDRISP 322
#define F_SPEDDATARISP 323
#define F_TPIMBALLO 401
#define F_DIMENSIONE 402
#define F_RIEMPIMENTO 403
#define F_ARTSEP 404
#define F_IBAN_STATO 101
#define F_IBAN_CHECK 102
#define F_BBAN_CIN 103
#define F_BBAN_ABI 104
#define F_BBAN_CAB 105
#define F_BBAN_CONTO 106
#define F_BBAN 107
#define F_PROGPR 108
#define F_DESBAN 109
#define F_IBAN 110
//////////////////////////////////////
// Identificatori indirizzi //
//////////////////////////////////////
#define F_RAGSOCI 101
#define F_INDIRI 102
#define F_CIVI 103
#define F_LOCALI 104
#define F_CAPI 105
#define F_STATOI 106
#define F_COMI 107
#define F_PTELI 108
#define F_TELI 109
#define F_PFAXI 110
#define F_FAXI 111
#define F_IVARIDI 112
#define F_DENCOMI 113
#define F_INDIR2 114
#define F_CODDEST 115
#define F_PADESTINI 116
#define F_PARIFAMMI 117
#define F_CODIND 118
#define F_DESDEST 250
//////////////////////////////////////
// Identificatori contatti //
//////////////////////////////////////
#define F_CONTACT 101
#define F_NOME 102
#define F_COGNOME 103
#define F_TIPO1 104
#define F_TIPO2 105
#define F_TIPO3 106
#define F_TIPO4 107
#define F_TIPO5 108
#define F_TIPO6 109
#define F_TIPO7 110
#define F_TIPO8 111
#define F_TIPO9 112
#define F_TIPO10 113
#define F_TIPO11 114
#define F_TIPO12 115
#define F_TIPO13 116
#define F_TIPO14 117
#define F_TIPO15 118
#endif // __CG0200_H

2790
src/cg01/cg0200a.uml Normal file

File diff suppressed because it is too large Load Diff

347
src/cg01/cg0200b.uml Normal file
View File

@ -0,0 +1,347 @@
#include "cg0200.h"
TOOLBAR "bottombar" 0 0 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT 1 1 ""
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT 2 1 "Elimina"
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT 3 1 ""
END
ENDPAGE
PAGE "" 0 0 0 0
STRING F_RAGSOCI 50
BEGIN
PROMPT 1 2 "Rag. soc. "
HELP "Ragione sociale del cliente/fornitore"
GROUP 1
END
STRING F_INDIRI 35
BEGIN
PROMPT 1 4 "Indirizzo "
HELP "Indirizzo del cliente/fornitore"
GROUP 1
END
STRING F_CIVI 10
BEGIN
PROMPT 54 4 "N. "
HELP "Numero civico del cliente/fornitore"
GROUP 1
END
STRING F_LOCALI 35
BEGIN
PROMPT 1 5 "Localita "
HELP "Localita' di residenza del C/F"
GROUP 1
END
STRING F_CAPI 5
BEGIN
PROMPT 54 5 "CAP "
HELP "Codice di Avviamento Postale del C/F"
FLAGS "RZ"
GROUP 1
END
NUMBER F_STATOI 3
BEGIN
PROMPT 1 6 "Stato "
FLAGS "Z"
USE %STA
INPUT CODTAB F_STATOI
DISPLAY "Codice" CODTAB
DISPLAY "Stato@50" S0
OUTPUT F_STATOI CODTAB
CHECKTYPE NORMAL
WARNING "Stato assente"
HELP "Codice dello stato del cliente/fornitore"
GROUP 1
END
STRING F_COMI 4
BEGIN
PROMPT 18 6 "Comune "
FLAGS "U"
USE LF_COMUNI
INPUT STATO F_STATOI
INPUT COM F_COMI
DISPLAY "Stato" STATO
DISPLAY "Codice" COM
DISPLAY "Comune@50" DENCOM
OUTPUT F_STATOI STATO
OUTPUT F_COMI COM
OUTPUT F_DENCOMI DENCOM
CHECKTYPE NORMAL
WARNING "Comune assente"
ADD RUN ba4 -0
HELP "Codice del comune del cliente/fornitore"
GROUP 1
END
STRING F_DENCOMI 40
BEGIN
PROMPT 33 6 ""
HELP "Nome del comune del cliente/fornitore"
USE LF_COMUNI KEY 2
INPUT DENCOM F_DENCOMI
DISPLAY "Comune@50" DENCOM
DISPLAY "Stato" STATO
DISPLAY "Codice" COM
COPY OUTPUT F_COMI
CHECKTYPE NORMAL
ADD RUN ba4 -0
GROUP 1
END
STRING F_INDIR2 35
BEGIN
PROMPT 1 7 "Ind.agg. "
HELP "Indirizzo aggiuntivo del cliente/fornitore"
GROUP 1
END
GROUPBOX DLG_NULL 72 4
BEGIN
PROMPT 1 8 "Numeri Telefonici"
END
STRING F_PTELI 10
BEGIN
PROMPT 2 9 "Telefono "
HELP "Prefisso del numero di telefono"
GROUP 1
END
STRING F_TELI 30
BEGIN
PROMPT 40 9 ""
HELP "Numero di telefono del cliente/fornitore"
GROUP 1
END
STRING F_PFAXI 10
BEGIN
PROMPT 2 10 "Fax "
HELP "Prefisso del numero di fax"
GROUP 1
END
STRING F_FAXI 30
BEGIN
PROMPT 40 10 ""
HELP "Numero di fax del cliente/fornitore"
GROUP 1
END
BOOLEAN F_IVARIDI
BEGIN
PROMPT 2 13 "Riduzione IVA"
HELP "Indicare se e' soggetto a riduzione IVA"
GROUP 1
END
STRING F_CODDEST 10
BEGIN
PROMPT 2 14 "Luogo di destinazione "
USE DST
JOIN LF_COMUNI INTO STATO=S8 COM=S9
INPUT CODTAB F_CODDEST
DISPLAY "Luogo di destinazione" CODTAB
DISPLAY "Ragione sociale@50" S0
DISPLAY "Indirizzo@35" S1[1,35]
DISPLAY "N.@9" S1[36,45]
DISPLAY "Localita'@24" S1[46,70]
DISPLAY "C.A.P." S7
DISPLAY "Comune" S9
DISPLAY "@50" LF_COMUNI->DENCOM
OUTPUT F_CODDEST CODTAB
OUTPUT F_DESDEST S0
CHECKTYPE NORMAL
HELP "Codice del luogo di destinazione"
END
STRING F_DESDEST 50
BEGIN
PROMPT 2 15 "Ragione soc.destinazione "
USE DST KEY 2
JOIN LF_COMUNI INTO STATO=S8 COM=S9
INPUT CODTAB F_DESDEST
DISPLAY "Ragione sociale@50" S0
DISPLAY "Luogo di destinazione" CODTAB
DISPLAY "Indirizzo@35" S1[1,35]
DISPLAY "N.@9" S1[36,45]
DISPLAY "Localita'@24" S1[46,70]
DISPLAY "C.A.P." S7
DISPLAY "Comune" S9
DISPLAY "@50" LF_COMUNI->DENCOM
COPY OUTPUT F_CODDEST
CHECKTYPE NORMAL
END
STRING F_PADESTINI 7
BEGIN
PROMPT 2 16 "Codice Destinatario (SdI)"
FLAGS ""
MODULES PA,FP
HELP "Codice ufficio dell destinatario della fattura elettronica"
END
STRING F_PARIFAMMI 20
BEGIN
PROMPT 2 17 "Codice riferimento amministrazione"
FLAGS "U"
MODULES PA,FP
HELP "Codice del cedente presso l'amministrazione"
END
ENDPAGE
ENDMASK
PAGE "Contatti" -1 -1 68 10
NUMBER F_CONTACT 6
BEGIN
PROMPT 1 0 "Contatto "
USE LF_CONTACT KEY 3
INPUT TIPOCF -F_TIPOCF SELECT
INPUT CODCF -F_CODCF SELECT
INPUT CONTACT F_CONTACT
DISPLAY "Codice" CONTACT
DISPLAY "Nome@50" NOME
DISPLAY "Cognome@50" COGNOME
OUTPUT F_CONTACT CONTACT
OUTPUT F_NOME NOME
OUTPUT F_COGNOME COGNOME
CHECKTYPE REQUIRED
ADD RUN ba4 -6
END
STRING F_NOME 50
BEGIN
PROMPT 1 1 "Nome "
FLAGS "D"
END
STRING F_COGNOME 50
BEGIN
PROMPT 1 2 "Cognome "
FLAGS "D"
END
GROUPBOX DLG_NULL 65 7
BEGIN
PROMPT 1 3 "Documenti / Profili"
END
STRING F_TIPO1 8
BEGIN
PROMPT 2 4 "Tipo 1 "
CHECKTYPE REQUIRED
END
STRING F_TIPO2 8
BEGIN
PROMPT 24 4 "Tipo 2 "
END
STRING F_TIPO3 8
BEGIN
PROMPT 46 4 "Tipo 3 "
END
STRING F_TIPO4 8
BEGIN
PROMPT 2 5 "Tipo 4 "
END
STRING F_TIPO5 8
BEGIN
PROMPT 24 5 "Tipo 5 "
END
STRING F_TIPO6 8
BEGIN
PROMPT 46 5 "Tipo 6 "
END
STRING F_TIPO7 8
BEGIN
PROMPT 2 6 "Tipo 7 "
END
STRING F_TIPO8 8
BEGIN
PROMPT 24 6 "Tipo 8 "
END
STRING F_TIPO9 8
BEGIN
PROMPT 46 6 "Tipo 9 "
END
STRING F_TIPO10 8
BEGIN
PROMPT 2 7 "Tipo 10"
END
STRING F_TIPO11 8
BEGIN
PROMPT 24 7 "Tipo 11"
END
STRING F_TIPO12 8
BEGIN
PROMPT 46 7 "Tipo 12"
END
STRING F_TIPO13 8
BEGIN
PROMPT 2 8 "Tipo 13"
END
STRING F_TIPO14 8
BEGIN
PROMPT 24 8 "Tipo 14"
END
STRING F_TIPO15 8
BEGIN
PROMPT 46 8 "Tipo 15"
END
ENDPAGE
TOOLBAR "bottombar" 0 0 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT 1 1 ""
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT 2 1 "Elimina"
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT 3 1 ""
END
ENDPAGE
ENDMASK

264
src/cg01/cg0201.cpp Normal file
View File

@ -0,0 +1,264 @@
#include "cg0201.h"
#include <recset.h>
#include <clifo.h>
#include <modaut.h>
#include <indsp.h>
// Definizione dei metodi relativi alla classe TClifoVI
TClifoVI::TClifoVI() : TRelation(LF_CLIFO), _oldindirizzi(0), _gesven(FALSE)
{
add(LF_CFVEN,"TIPOCF==TIPOCF|CODCF==CODCF");
add(LF_INDSP,"TIPOCF==TIPOCF|CODCF==CODCF");
add(LF_CFPRI,"TIPOCF==TIPOCF|CODCF==CODCF");
}
void TClifoVI::destroy_rows()
{
_indirizzi.destroy();
_contatti.destroy();
}
TRectype& TClifoVI::indirizzo(int i)
{
TRectype *r=(TRectype*)_indirizzi.objptr(i);
if (r == NULL)
{
r = new TRectype(LF_INDSP);
_indirizzi.add(r,i);
}
return *r;
}
TRectype& TClifoVI::contatto(int i)
{
TRectype* r= (TRectype*)_contatti.objptr(i);
if (r == NULL)
{
r = new TRectype(LF_MULTIREL);
_contatti.add(r,i);
}
return *r;
}
int TClifoVI::read_indirizzi()
{
destroy_rows();
if (_gesven)
{
const TRectype& rind = curr(LF_INDSP);
rind.put(IND_TIPOCF, tipocf);
rind.put(IND_CODCF, codcf);
_indirizzi.read(rind);
// Read contatti
TLocalisamfile cont(LF_MULTIREL);
const char tipocf = curr().get_char(CLI_TIPOCF);
const long codcf = curr().get_long(CLI_CODCF);
TString8 first; first.format("%C%06ld", tipocf, codcf);
cont.put("COD", "BACON");
cont.put("FIRST", first);
for (int err = cont.read(_isgteq);
err == NOERR && cont.get("COD") == "BACON" && cont.get("FIRST") == first;
err = cont.next())
_contatti.add(cont.curr());
}
return 0;
}
int TClifoVI::write_contatti()
{
TAssoc_array old_ones;
TLocalisamfile cont(LF_MULTIREL);
const char tipocf = curr().get_char(CLI_TIPOCF);
const long codcf = curr().get_long(CLI_CODCF);
TString8 first; first.format("%C%06ld", tipocf, codcf);
cont.put("COD", "BACON");
cont.put("FIRST", first);
for (int err = cont.read(_isgteq);
err == NOERR && cont.get("COD") == "BACON" && cont.get("FIRST") == first;
err = cont.next())
old_ones.add(cont.curr().get("SECOND"));
FOR_EACH_ASSOC_OBJECT(old_ones, h, k, r)
{
bool trovato = false;
for (int i = _contatti.last(); i >= 0 && !trovato; i--)
{
const TRectype& c = (const TRectype&)_contatti[i];
trovato = c.get_long("SECOND") == atol(k);
}
if (!trovato)
{
cont.zero();
cont.put("COD", "BACON");
cont.put("FIRST", first);
cont.put("SECOND", k);
cont.remove();
}
}
FOR_EACH_ARRAY_ITEM(_contatti, i, obj)
{
TRectype& rec = *(TRectype*)obj;
if (rec.get("DATA").full())
{
TString8 second;
second.format("%06ld", rec.get_long("SECOND"));
rec.put("COD", "BACON");
rec.put("FIRST", first);
rec.put("SECOND", second);
rec.write_rewrite(cont);
}
}
return 0;
}
int TClifoVI::read(TIsamop op, TReclock lockop)
{
const int err = file().read(op,lockop);
position_rels();
if (err == NOERR)
read_indirizzi();
return err;
}
int TClifoVI::write_rec(bool re, const TRectype& rec, TLocalisamfile& f)
{
if (re)
{
const bool scrivi= f.rewrite(rec) != NOERR;
if (scrivi) f.write(rec);
}
else
f.write(rec);
return f.status();
}
int TClifoVI::cancella(TLocalisamfile& f, int da, int a)
{
const char tipocf=lfile().get(IND_TIPOCF)[0];
const long codcf=lfile().get_long(IND_CODCF);
for (int i=da; i<=a;i++)
{
f.zero();
f.put(IND_TIPOCF,tipocf);
f.put(IND_CODCF,codcf);
f.put(IND_CODIND,i);
if (f.read(_isequal,_lock)==NOERR)
f.remove();
}
return f.status();
}
int TClifoVI::registra(bool re, bool force)
{
TLocalisamfile& c=lfile(LF_CLIFO);
int err = write_rec(re,c.curr(),c);
if (err == NOERR)
{
TLocalisamfile& v = lfile(LF_CFVEN);
err = write_rec(TRUE, v.curr(), v);
if (err == NOERR)
{
TLocalisamfile& p = lfile(LF_CFPRI);
p.put("TIPOCF", c.get(CLI_TIPOCF)[0]);
p.put("CODCF", c.get_long(CLI_CODCF));
err = write_rec(TRUE, p.curr(), p);
if (err == NOERR)
{
// Put here gest_vend() discrimination
if (_gesven)
{
TLocalisamfile& rind = lfile(LF_INDSP);
const char tipocf = c.get(CLI_TIPOCF)[0];
const long codcf = c.get_long(CLI_CODCF);
int i = 0;
for (i = 0; i < indirizzi(); i++)
{
if (!re)
{
indirizzo(i).put(IND_TIPOCF, tipocf);
indirizzo(i).put(IND_CODCF, codcf);
}
err = write_rec(TRUE, indirizzo(i), rind);
}
if (i < _oldindirizzi)
cancella(rind, i + 1, _oldindirizzi);
_oldindirizzi = indirizzi();
write_contatti();
}
if (_geslv)
{
TLocalisamfile& lv = lfile(-LVAUT);
const char tipocf = c.get(CLI_TIPOCF)[0];
const long codcf = c.get_long(CLI_CODCF);
TString8 codtab; codtab << tipocf << codcf;
TRectype& rec = lv.curr();
rec.put("CODTAB", codtab);
err = write_rec(TRUE, rec, lv);
}
}
}
}
// END of gest_vend() discrimination
return err;
}
int TClifoVI::write(bool force)
{
_oldindirizzi = 0;
return registra(FALSE,force);
}
int TClifoVI::rewrite(bool force)
{
return registra(true,force);
}
int TClifoVI::remove()
{
const int err = lfile(LF_CLIFO).remove();
lfile(LF_CFPRI).remove();
// Put here gest_vend() discrimination
if (_gesven)
{
lfile(LF_CFVEN).remove();
TLocalisamfile& rind = lfile(LF_INDSP);
cancella(rind, 1, _oldindirizzi);
_contatti.destroy();
write_contatti();
}
_oldindirizzi = 0;
return err;
}

47
src/cg01/cg0201.h Normal file
View File

@ -0,0 +1,47 @@
#ifndef __RELATION_H
#include <relation.h>
#endif
#ifndef __RECARRAY_H
#include <recarray.h>
#endif
class TClifoVI : public TRelation
{
// @DPRIV
TRecord_array _indirizzi;
TRecord_array _cfspra;
TTrimmed_record_array _contatti;
bool _gesven, _geslv;
// @END
protected:
// @FPROT
int write_rec(bool re, const TRectype& r);
int registra(bool re, bool force);
int read_indirizzi();
// @END
public:
virtual int next(TReclock lockop=_nolock) {return (lfile().next(lockop) || read_indirizzi());}
virtual int prev(TReclock lockop=_nolock) {return (lfile().prev(lockop) || read_indirizzi());}
virtual int first(TReclock lockop=_nolock) {return (lfile().first(lockop) || read_indirizzi());}
virtual int last(TReclock lockop=_nolock) {return (lfile().last(lockop) || read_indirizzi());}
virtual int skip(TReclock lockop=_nolock) {return (lfile().skip(lockop) || read_indirizzi());}
virtual int read(TIsamop = _isgteq, TReclock lockop = _nolock);
virtual int write(bool force=TRUE);
virtual int rewrite(bool force=TRUE);
virtual int remove();
TRecord_array & indirizzi() { return _indirizzi; }
TRecord_array & cfspra() { return _cfspra; }
TRecord_array & contatti() { return _contatti; }
void destroy_rows();
void gestione_vendite(bool gv) { _gesven = gv; }
void gestione_lavanderie(bool glv) { _geslv = glv; }
TClifoVI();
virtual ~TClifoVI() {}
};

BIN
src/cg01/cg03.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

78
src/cg01/cg0300.cpp Normal file
View File

@ -0,0 +1,78 @@
#include <relapp.h>
#include <recarray.h>
#include "cg0.h"
#include "cg0300.h"
class CG0300_application : public TRelation_application
{
TMask* _msk;
TRelation *_rel;
bool user_create();
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);
virtual void init_modify_mode(TMask& m);
virtual void init_insert_mode(TMask& m) { init_modify_mode(m); }
public:
CG0300_application() {}
};
void CG0300_application::init_query_mode(TMask& m)
{
disable_menu_item(M_FILE_NEW);
m.show(-1);
m.hide(-2);
}
void CG0300_application::init_query_insert_mode(TMask& m)
{
disable_menu_item(M_FILE_NEW);
m.hide(-1);
m.show(-2);
m.enable(-3);
}
void CG0300_application::init_modify_mode(TMask& m)
{
m.disable(-3);
}
bool CG0300_application::user_create()
{
open_files(LF_ALLEG, LF_NDITTE, LF_ATTIV, LF_CLIFO, 0);
_msk = new TMask("cg0300a") ;
_rel = new TRelation(LF_ALLEG);
const long codditta = get_firm();
TString16 key ; key << codditta;
const TRectype & ditta = cache().get(LF_NDITTE, key);
_msk->set(F_CODDITTA, codditta);
if (!ditta.empty())
_msk->set(F_CODATT, ditta.get(N_CODATTPREV));
return TRUE;
}
bool CG0300_application::user_destroy()
{
delete _msk;
delete _rel;
return TRUE;
}
int cg0300(int argc, char* argv[])
{
CG0300_application a;
a.run(argc, argv, TR("Immissione progressivi allegati"));
return 0;
}

51
src/cg01/cg0300.h Normal file
View File

@ -0,0 +1,51 @@
#ifndef __CG0300_H
#define __CG0300_H
#define TCLI "C"
#define N_CODDITTA "CODDITTA"
#define N_CODATTPREV "CODATTPREV"
#define N_CODATT "CODATT"
#define N_CODCF "CODCF"
#define F_ANNO 101
#define F_CODATT 102
#define F_TIPOCF 103
#define F_CODCF 104
#define F_IMMESSO 105
#define F_IMPESC 106
#define F_IVAESC 107
#define F_NIESC 108
#define F_E8ESC 109
#define F_NDOCESC 110
#define F_IMPESP 111
#define F_IVAESP 112
#define F_NIESP 113
#define F_E8ESP 114
#define F_NDOCESP 115
#define F_PROG101102 116
#define F_CODDITTA 117
#define F_RAGSOC 118
#define F_COFI 119
#define F_PAIV 120
#define F_TOTALE 121
#define F_TOTALE1 122
#define F_TOTALE2 123
#define F_TOTALE3 124
#define F_TOTALE4 125
#define F_TOTALE5 126
#define F_TOTALE6 127
#define F_PROMPT 128
#define F_RAGSOC_D 129
#define F_DENATT 130
#define F_CODATTH 131
#define F_CODCFH 132
#define F_T1 133
#define F_T2 134
#define F_T3 135
#define F_T4 136
#define F_T5 137
#define F_T6 138
#define F_T7 139
#endif // __CG0300_H

446
src/cg01/cg0300a.uml Normal file
View File

@ -0,0 +1,446 @@
#include "cg0300.h"
TOOLBAR "topbar" 0 0 0 2
#include <relapbar.h>
ENDPAGE
PAGE "Immissione progressivi allegati" 0 0 0 2
GROUPBOX DLG_NULL 77 8
BEGIN
PROMPT 0 0 ""
FLAGS "R"
END
NUMBER F_ANNO 4
BEGIN
PROMPT 2 1 "Anno "
HELP "Anno di cui si vogliono visualizzare i saldi"
FIELD LF_ALLEG->ANNO
FLAGS "PRZA"
KEY 1
USE LF_ALLEG KEY 1
JOIN %AIS TO LF_ALLEG INTO CODTAB=CODATT
INPUT ANNO F_ANNO SELECT
INPUT CODATT F_CODATT
INPUT TIPOCF F_TIPOCF
INPUT CODCF F_CODCF
INPUT IMMESSO F_IMMESSO
DISPLAY "Anno" ANNO
DISPLAY "Codice att." CODATT
DISPLAY "Descrizione @40" LF_TABCOM->S0
DISPLAY "Tipo" TIPOCF
DISPLAY "Codice" CODCF
DISPLAY "Immesso" IMMESSO
OUTPUT F_ANNO ANNO
OUTPUT F_CODATT CODATT
OUTPUT F_CODATTH CODATT
OUTPUT F_TIPOCF TIPOCF
OUTPUT F_CODCF CODCF
OUTPUT F_IMMESSO IMMESSO
WARNING "Registrazione assente"
CHECKTYPE REQUIRED
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 2 "Ditta "
HELP "Ditta di cui si vogliono visualizzare i saldi"
FLAGS "RPDG"
KEY 1
CHECKTYPE REQUIRED
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT F_CODDITTA CODDITTA
WARNING "Ditta assente"
END
STRING F_RAGSOC_D 50 50
BEGIN
PROMPT 24 2 ""
FLAGS "DP"
END
STRING F_CODATT 5
BEGIN
PROMPT 2 3 "Cod.attivita' "
HELP "Codice dell'attivita' della ditta"
FIELD LF_ALLEG->CODATT
FLAGS "PRZ"
KEY 1
COPY ALL F_ANNO
CHECKTYPE REQUIRED
WARNING "Registrazione assente"
MESSAGE COPY,F_CODATTH
GROUP 1
END
STRING F_CODATTH 5
BEGIN
PROMPT 2 3 "Cod.attivita' "
FIELD LF_ALLEG->CODATT
FLAGS "HPRZ"
KEY 1
USE LF_ATTIV
JOIN LF_NDITTE TO LF_ATTIV INTO CODDITTA=CODDITTA
INPUT CODDITTA F_CODDITTA SELECT
INPUT CODATT F_CODATT
DISPLAY "Codice" LF_ATTIV->CODDITTA
DISPLAY "Ragione sociale @50" LF_NDITTE->RAGSOC
DISPLAY "Codice attivita'" LF_ATTIV->CODATT
DISPLAY "Descrizione @40" LF_ATTIV->DESCR
OUTPUT F_CODATT CODATT
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_DENATT LF_ATTIV->DESCR
HELP "Inserire il codice dell'attivita'"
MESSAGE COPY,F_CODATTH
MESSAGE COPY,3@
WARNING "Attivita' assente"
GROUP 2
END
STRING F_DENATT 50
BEGIN
PROMPT 24 3 ""
FLAGS "D"
END
LIST F_TIPOCF 16
BEGIN
PROMPT 2 4 "Tipo "
FIELD LF_ALLEG->TIPOCF
KEY 1
HELP "Indicare se cliente, fornitore oppure bolletta doganale"
ITEM "C|Clienti"
MESSAGE SHOW,F_T1|HIDE,F_T2|HIDE,F_T3|SHOW,F_T5|HIDE,F_T6
ITEM "F|Fornitori"
MESSAGE HIDE,F_T1|SHOW,F_T2|HIDE,F_T3|HIDE,F_T5|SHOW,F_T6|ENABLE,F_CODCF|SHOW,6@
ITEM "B|Boll.doganali"
MESSAGE HIDE,F_T1|HIDE,F_T2|SHOW,F_T3|HIDE,F_T5|SHOW,F_T6|DISABLE,F_CODCF|SHOW,6@
END
NUMBER F_CODCF 6
BEGIN
PROMPT 36 4 "Codice "
FIELD LF_ALLEG->CODCF
FLAGS "R"
KEY 1
COPY ALL F_ANNO
HELP "Codice relativo al cliente o fornitore"
ADD RUN cg0 -1
WARNING "Registrazione assente"
GROUP 1
CHECKTYPE REQUIRED
MESSAGE COPY,F_CODCFH
END
NUMBER F_CODCFH 6
BEGIN
PROMPT 36 4 "Codice "
FIELD LF_ALLEG->CODCF
FLAGS "HR"
KEY 1
USE LF_CLIFO
INPUT TIPOCF F_TIPOCF SELECT
INPUT CODCF F_CODCF
DISPLAY "Tipo" TIPOCF
DISPLAY "Codice" CODCF
DISPLAY "Descrizione@50" RAGSOC
OUTPUT F_TIPOCF TIPOCF
OUTPUT F_CODCFH CODCF
OUTPUT F_RAGSOC RAGSOC
OUTPUT F_COFI COFI
OUTPUT F_PAIV PAIV
HELP "Codice relativo al cliente o fornitore"
ADD RUN cg0 -1
WARNING "Cliente assente"
GROUP 2
MESSAGE COPY,F_CODCF
CHECKTYPE NORMAL
END
BOOLEAN F_IMMESSO
BEGIN
PROMPT 64 4 "Immesso"
HELP "Indicare se il saldo e' stato immesso da utente"
FIELD LF_ALLEG->IMMESSO
KEY 1
END
STRING F_RAGSOC 50
BEGIN
PROMPT 2 5 "Rag.sociale "
FLAGS "U"
KEY 2
USE LF_CLIFO KEY 2
INPUT TIPOCF F_TIPOCF SELECT
INPUT RAGSOC F_RAGSOC
DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Tipo" TIPOCF
DISPLAY "Codice" CODCF
COPY OUTPUT F_CODCFH
HELP "Ragione sociale del cliente o fornitore"
WARNING "Ragione sociale assente"
GROUP 3
END
STRING F_COFI 16
BEGIN
PROMPT 2 6 "Cod.fiscale "
KEY 3
USE LF_CLIFO KEY 4
INPUT TIPOCF F_TIPOCF SELECT
INPUT COFI F_COFI
DISPLAY "Codice fiscale " COFI
DISPLAY "Tipo" TIPOCF
DISPLAY "Codice" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
COPY OUTPUT F_CODCFH
HELP "Codice fiscale del cliente o fornitore"
CHECKTYPE NORMAL
WARNING "Codice fiscale assente"
GROUP 3
END
STRING F_PAIV 12
BEGIN
PROMPT 36 6 "Partita IVA "
KEY 4
USE LF_CLIFO KEY 5
INPUT TIPOCF F_TIPOCF SELECT
INPUT PAIV F_PAIV
DISPLAY "Partita IVA" PAIV
DISPLAY "Tipo" TIPOCF
DISPLAY "Codice" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Codice fiscale " COFI
COPY OUTPUT F_CODCFH
HELP "Partita IVA del cliente o fornitore"
CHECKTYPE NORMAL
WARNING "Partita IVA assente"
GROUP 3
END
TEXT DLG_NULL
BEGIN
PROMPT 27 8 "Anno corrente"
END
TEXT DLG_NULL
BEGIN
PROMPT 43 8 "Anno precedente"
END
TEXT DLG_NULL
BEGIN
PROMPT 66 8 "Totale"
END
TEXT DLG_NULL
BEGIN
PROMPT 2 9 "Operazioni imponibili "
END
CURRENCY F_IMPESC 15
BEGIN
PROMPT 25 9 ""
HELP "Totale operazioni imponibili anno corrente"
FIELD LF_ALLEG->IMPESC
MESSAGE K_TAB,F_TOTALE1|K_TAB,F_TOTALE5
END
CURRENCY F_IMPESP 15
BEGIN
PROMPT 42 9 ""
HELP "Totale operazioni imponibili anno corrente"
FIELD LF_ALLEG->IMPESP
MESSAGE K_TAB,F_TOTALE1|K_TAB,F_TOTALE6
END
CURRENCY F_TOTALE1 15
BEGIN
PROMPT 60 9 ""
FLAGS "D"
NUM_CALC {#F_IMPESP+#F_IMPESC}
END
TEXT DLG_NULL
BEGIN
PROMPT 2 10 "Imposte addebitate "
END
CURRENCY F_IVAESC 15
BEGIN
PROMPT 25 10 ""
HELP "Totale imposte addebitate dell'anno corrente"
FIELD LF_ALLEG->IVAESC
MESSAGE K_TAB,F_TOTALE2|K_TAB,F_TOTALE5
END
CURRENCY F_IVAESP 15
BEGIN
PROMPT 42 10 ""
HELP "Totale imposte addebitate dell'anno precedente"
FIELD LF_ALLEG->IVAESP
MESSAGE K_TAB,F_TOTALE2|K_TAB,F_TOTALE6
END
CURRENCY F_TOTALE2 15
BEGIN
PROMPT 60 10 ""
FLAGS "D"
NUM_CALC {#F_IVAESP+#F_IVAESC}
END
TEXT F_T1
BEGIN
PROMPT 2 11 "Op. non imp. ed esenti "
FLAGS "H"
END
TEXT F_T2
BEGIN
PROMPT 2 11 "Op. senza appl. d'imp. "
FLAGS "H"
END
TEXT F_T3
BEGIN
PROMPT 2 11 "Operazioni senza appl. d'imposta "
FLAGS "H"
END
CURRENCY F_NIESC 15
BEGIN
PROMPT 25 11 ""
FIELD LF_ALLEG->NIESC
HELP "Totale operazioni non imponibili ed esenti dell'anno corrente"
MESSAGE K_TAB,F_TOTALE3|K_TAB,F_TOTALE5
END
CURRENCY F_NIESP 15
BEGIN
PROMPT 42 11 ""
FIELD LF_ALLEG->NIESP
HELP "Totale operazioni non imponibili ed esenti dell'anno precedente"
MESSAGE K_TAB,F_TOTALE3|K_TAB,F_TOTALE6
END
CURRENCY F_TOTALE3 15
BEGIN
PROMPT 60 11 ""
FLAGS "D"
NUM_CALC {#F_NIESP+#F_NIESC}
END
TEXT F_T4
BEGIN
PROMPT 2 12 "Op. non imp.(Art.8 2^c)"
GROUP 6
END
CURRENCY F_E8ESC 15
BEGIN
PROMPT 25 12 ""
FIELD LF_ALLEG->E8ESC
GROUP 6
HELP "Totale operazioni non imponibili (Art. 8 2^c) dell'anno corrente"
MESSAGE K_TAB,F_TOTALE4|K_TAB,F_TOTALE5
END
CURRENCY F_E8ESP 15
BEGIN
PROMPT 42 12 ""
FIELD LF_ALLEG->E8ESP
GROUP 6
HELP "Totale operazioni non imponibili (Art. 8 2^c) dell'anno precedente"
MESSAGE K_TAB,F_TOTALE4|K_TAB,F_TOTALE6
END
CURRENCY F_TOTALE4 15
BEGIN
PROMPT 60 12 ""
FLAGS "D"
GROUP 6
NUM_CALC {#F_E8ESP+#F_E8ESC}
END
TEXT DLG_NULL
BEGIN
PROMPT 2 13 "Totale "
END
CURRENCY F_TOTALE5 15
BEGIN
PROMPT 25 13 ""
FLAGS "D"
NUM_CALC {#F_IMPESC+#F_IVAESC+#F_NIESC+#F_E8ESC}
END
CURRENCY F_TOTALE6 15
BEGIN
PROMPT 42 13 ""
FLAGS "D"
NUM_CALC {#F_IMPESP+#F_IVAESP+#F_NIESP+#F_E8ESP}
END
TEXT F_T7
BEGIN
PROMPT 2 15 "Numero fatture "
GROUP 6
END
NUMBER F_NDOCESC 4
BEGIN
PROMPT 25 15 ""
HELP "Numero di fatture ricevute nell'anno in corso dal fornitore"
FIELD LF_ALLEG->NDOCESC
FLAGS "R"
GROUP 6
MESSAGE K_TAB,F_TOTALE
END
NUMBER F_NDOCESP 4
BEGIN
PROMPT 42 15 ""
HELP "Numero di fatture ricevute nell'anno precedente dal fornitore"
FIELD LF_ALLEG->NDOCESP
FLAGS "R"
GROUP 6
MESSAGE K_TAB,F_TOTALE
END
NUMBER F_TOTALE 5
BEGIN
PROMPT 60 15 ""
FLAGS "RD"
GROUP 6
NUM_CALC {#F_NDOCESP+#F_NDOCESC}
END
TEXT F_T5
BEGIN
PROMPT 2 17 "Operazioni non imponibili (mod 101) "
FLAGS "H"
END
TEXT F_T6
BEGIN
PROMPT 2 17 "Operazioni non imponibili (mod 102) "
FLAGS "H"
END
CURRENCY F_PROG101102 15
BEGIN
PROMPT 42 17 ""
FIELD LF_ALLEG->PROG101102
HELP "Totale operazioni non imponibili Art. 8 1^c, Artt. 8 bis, 9 e 72"
END
ENDPAGE
ENDMASK

BIN
src/cg01/cg04.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

1355
src/cg01/cg0400.cpp Normal file

File diff suppressed because it is too large Load Diff

40
src/cg01/cg0400.h Normal file
View File

@ -0,0 +1,40 @@
#ifndef __CG0400_H
#define __CG0400_H
#define TAB_REG "REG"
#define TAB_PIM "PIM"
#define F_CODDITTA 101
#define F_ANNO 102
#define F_TIPO 103
#define F_LIVELLO 104
#define F_CODIVA 105
#define F_TIPOTAB 106
#define F_TIPOTABE 107
#define F_ATTIVITA 108
#define F_TIPOTABEL 109
#define F_RAGSOC 110
#define F_DATASTAMPA 112
#define F_MESE 113
#define F_STAMPA 114
#define F_SELECTION 115
#define F_TIPOPROGREG 116
#define F_TRIMESTRE 117
#endif // __CG0400_H

207
src/cg01/cg0400a.uml Normal file
View File

@ -0,0 +1,207 @@
#include "cg0400.h"
TOOLBAR "topbar" 0 0 0 2
#include <stdbar.h>
ENDPAGE
PAGE "Riepilogo progressivi IVA" -1 -1 76 19
GROUPBOX DLG_NULL 74 3
BEGIN
PROMPT 1 0 ""
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Ditta "
FLAGS "ZFR"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
DISPLAY "Ditta" CODDITTA
DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
OUTPUT F_ATTIVITA CODATTPREV
CHECKTYPE REQUIRED
WARNING "Ditta assente"
END
STRING F_RAGSOC 50 46
BEGIN
PROMPT 17 1 "Rag.Soc."
USE LF_NDITTE KEY 2
INPUT RAGSOC F_RAGSOC
DISPLAY "Ragione Sociale@60" RAGSOC
DISPLAY "Codice" CODDITTA
COPY OUTPUT F_CODDITTA
END
NUMBER F_ANNO 4
BEGIN
PROMPT 2 3 "Anno liquidazione "
HELP "Anno di cui si effettua la liquidazione"
FLAGS "A"
VALIDATE FIXLEN_FUNC 4
CHECKTYPE REQUIRED
END
RADIOBUTTON F_SELECTION 40
BEGIN
PROMPT 2 5 "Tipo di stampa "
ITEM "1|Riepilogo progressivi per aliquota"
MESSAGE HIDE,2@|SHOW,3@
ITEM "2|Riepilogo progressivi per periodo"
MESSAGE HIDE,1@
END
RADIOBUTTON F_LIVELLO 24
BEGIN
PROMPT 2 9 "Livello progressivi"
HELP "Tipo di raggruppamento dei riepiloghi"
ITEM "1|Per aliquota"
MESSAGE HIDE,F_ATTIVITA|SHOW,F_CODIVA|K_SPACE,F_TIPO
ITEM "2|Per attivita'"
MESSAGE SHOW,F_ATTIVITA|HIDE,F_CODIVA|K_SPACE,F_TIPO
GROUP 1 3
END
RADIOBUTTON F_TIPO 24
BEGIN
PROMPT 40 9 "Tipo progressivi "
HELP "Tipo di riepilogo da effettuare"
ITEM "1|Vendite"
ITEM "2|Acquisti"
GROUP 1 3
END
STRING F_CODIVA 4
BEGIN
PROMPT 2 13 "Codice IVA "
HELP "Aliquota IVA da riepilogare"
FLAGS "U"
USE %IVA
INPUT CODTAB F_CODIVA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "%@6" R0
DISPLAY "Tipo" S1
OUTPUT F_CODIVA CODTAB
CHECKTYPE REQUIRED
VALIDATE ZEROFILL_FUNC 2
WARNING "Codice IVA assente"
GROUP 1
END
RADIOBUTTON F_TIPOTAB 38
BEGIN
PROMPT 2 14 "Tipo tabella "
HELP "Tipo di tabella da visualizzare"
ITEM "1|Vendite in genere"
ITEM "2|Vendite in sospensione d'imposta"
GROUP 1
END
STRING F_ATTIVITA 5
BEGIN
PROMPT 2 13 "Codice attivita' "
HELP "Codice dell'attivita' di cui si vuole il riepilogo"
USE LF_ATTIV
JOIN %AIS TO LF_ATTIV INTO CODTAB=CODATT
CHECKTYPE REQUIRED
INPUT CODDITTA F_CODDITTA SELECT
INPUT CODATT F_ATTIVITA
DISPLAY "Codice attivita'" LF_TABCOM->CODTAB
DISPLAY "Descrizione@50" LF_TABCOM->S0
OUTPUT F_ATTIVITA CODATT
WARNING "Codice attivita' non presente"
GROUP 1
END
NUMBER F_TIPOTABEL 1
BEGIN
PROMPT 2 14 "Tipo tabella "
HELP "Tipo di tabella da visualizzare"
SHEET "Tipo|Descrizione@50"
ITEM "1|Acquisti beni per rivendita"
ITEM "2|Acquisti beni da ammortizzare detraibili"
ITEM "3|Acquisti beni da ammortizzare non detraibili"
ITEM "4|Altri beni strumentali acquisiti in leasing"
ITEM "5|Acquisti beni da ammortizzare ult.detr. 6%"
INPUT F_TIPOTABEL
OUTPUT F_TIPOTABEL
GROUP 1
END
NUMBER F_TIPOTABE 1
BEGIN
PROMPT 2 14 "Tipo tabella "
HELP "Tipo di tabella da visualizzare"
SHEET "Tipo|Descrizione@50"
ITEM "1|Acquisti in genere"
ITEM "2|Acquisti indetraibili su operazioni esenti"
ITEM "3|Acquisti indetraibili passaggi interni"
ITEM "4|Acquisti indetraibili art. 19"
ITEM "5|Acquisti base di calcolo per la ventilazione"
ITEM "6|Bolle doganali"
ITEM "7|Acquisti in sospensione d'imposta"
INPUT F_TIPOTABE
OUTPUT F_TIPOTABE
GROUP 1
END
DATE F_DATASTAMPA
BEGIN
PROMPT 2 9 "Data stampa "
HELP "Data in cui viene effettuata la stampa"
FLAGS "A"
GROUP 2
END
LISTBOX F_MESE 12
BEGIN
PROMPT 2 11 "Periodo riepilogo "
ITEM "1|Gennaio" MESSAGE ENABLE,F_STAMPA
ITEM "2|Febbraio" MESSAGE ENABLE,F_STAMPA
ITEM "3|Marzo" MESSAGE ENABLE,F_STAMPA
ITEM "4|Aprile" MESSAGE ENABLE,F_STAMPA
ITEM "5|Maggio" MESSAGE ENABLE,F_STAMPA
ITEM "6|Giugno" MESSAGE ENABLE,F_STAMPA
ITEM "7|Luglio" MESSAGE ENABLE,F_STAMPA
ITEM "8|Agosto" MESSAGE ENABLE,F_STAMPA
ITEM "9|Settembre" MESSAGE ENABLE,F_STAMPA
ITEM "10|Ottobre" MESSAGE ENABLE,F_STAMPA
ITEM "11|Novembre" MESSAGE ENABLE,F_STAMPA
ITEM "12|Dicembre" MESSAGE ENABLE,F_STAMPA
ITEM "13|Annuale" MESSAGE "X", F_STAMPA|DISABLE,F_STAMPA
GROUP 2
END
LISTBOX F_TRIMESTRE 12
BEGIN
PROMPT 2 11 "Periodo riepilogo "
ITEM "3|1 Trimestre" MESSAGE ENABLE,F_STAMPA
ITEM "6|2 Trimestre" MESSAGE ENABLE,F_STAMPA
ITEM "9|3 Trimestre" MESSAGE ENABLE,F_STAMPA
ITEM "12|4 Trimestre" MESSAGE ENABLE,F_STAMPA
ITEM "13|Annuale" MESSAGE "X", F_STAMPA|DISABLE,F_STAMPA
GROUP 2
END
LISTBOX F_TIPOPROGREG 18
BEGIN
PROMPT 35 11 "Tipo progressivi "
ITEM "L|Solo Liquidazione"
ITEM "V|Solo Volume Affari"
GROUP 2
END
BOOLEAN F_STAMPA
BEGIN
PROMPT 2 13 "Stampa progressivi da inizio anno "
GROUP 2
END
ENDPAGE
ENDMASK

91
src/cg01/cg0400b.uml Normal file
View File

@ -0,0 +1,91 @@
#include "cg0400.h"
PAGE "Stampa riepilogo progressivi IVA" -1 -1 80 16
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 0 ""
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Ditta "
FLAGS "ZFR"
USE LF_NDITTE KEY 1
INPUT CODDITTA F_CODDITTA
DISPLAY "Ditta" CODDITTA
DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
WARNING "Ditta assente"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 17 1 "Rag.Soc."
USE LF_NDITTE KEY 2
INPUT RAGSOC F_RAGSOC
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODDITTA
COPY OUTPUT F_CODDITTA
END
DATE F_DATASTAMPA
BEGIN
PROMPT 2 4 "Data stampa "
HELP "Data in cui viene effettuata la stampa"
FLAGS "A"
END
NUMBER F_ANNO 4
BEGIN
PROMPT 2 6 "Anno riepilogo "
FLAGS "A"
VALIDATE FIXLEN_FUNC 4
CHECKTYPE REQUIRED
END
LISTBOX F_MESE 11
BEGIN
PROMPT 2 7 "Mese riepilogo "
ITEM "1|Gennaio" MESSAGE ENABLE,F_STAMPA
ITEM "2|Febbraio" MESSAGE ENABLE,F_STAMPA
ITEM "3|Marzo" MESSAGE ENABLE,F_STAMPA
ITEM "4|Aprile" MESSAGE ENABLE,F_STAMPA
ITEM "5|Maggio" MESSAGE ENABLE,F_STAMPA
ITEM "6|Giugno" MESSAGE ENABLE,F_STAMPA
ITEM "7|Luglio" MESSAGE ENABLE,F_STAMPA
ITEM "8|Agosto" MESSAGE ENABLE,F_STAMPA
ITEM "9|Settembre" MESSAGE ENABLE,F_STAMPA
ITEM "10|Ottobre" MESSAGE ENABLE,F_STAMPA
ITEM "11|Novembre" MESSAGE ENABLE,F_STAMPA
ITEM "12|Dicembre" MESSAGE ENABLE,F_STAMPA
ITEM "13|Annuale" MESSAGE "X", F_STAMPA|DISABLE,F_STAMPA
END
BOOLEAN F_STAMPA
BEGIN
PROMPT 2 9 "Stampa progressivi da inizio anno "
END
/*
BUTTON DLG_PRINT 10 2
BEGIN
PROMPT -12 -1 "~Stampa"
END
*/
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

BIN
src/cg01/cg05.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

934
src/cg01/cg0500.cpp Normal file
View File

@ -0,0 +1,934 @@
// cg0500.cpp - Tabella causali
#include <applicat.h>
#include <msksheet.h>
#include <recarray.h>
#include <relapp.h>
#include <tabutil.h>
#include <causali.h>
#include <rcausali.h>
#include <clifo.h>
#include <pconti.h>
#include "cglib01.h"
#include "cg0500.h"
typedef enum { no_descr, acquisto, vendita, incasso_pagamento, ritenuta_occas } tipo_descr;
class TCaus_app : public TRelation_application
{
TRelation* _rel; // Relazione principale
TMask* _msk; // Maschera principale
int _filtro; // tipo di filtro su tab. reg.
// 1 vendite senza corrisp
// 2 vendite con corrisp
// 3 acquisti
// 4 sia acquisti che vendite
TSheet_field* _sheet;
TRecord_array * _rcaus_rec;
// Parametri ditta
bool _valuta, _saldaconto;
int _anno_iva;
tipo_descr _last_descr;
protected:
static bool filtra_reg(const TRelation * r);
int calc_filter(const TString& tpd);
void set_reg_filter(int filtro);
static bool tipocf_hndl (TMask_field& f, KEY k);
static bool cod_reg_hndl (TMask_field& f, KEY k);
static bool tipodoc_hndl (TMask_field& f, KEY k);
static bool tipomov_hndl (TMask_field& f, KEY k);
static bool sezione_hndl (TMask_field& f, KEY k);
static bool conto_hndl (TMask_field& f, KEY k);
static bool sottoconto_hndl (TMask_field& f, KEY k);
static bool m770_hndl (TMask_field& f, KEY k);
static bool ss_notify (TSheet_field& s, int r, KEY k);
bool fill_sheet(TMask&);
void set_descr (int numrig, const char* descr);
void clear(int riga);
void clear_descr();
void carica_righe_libere(int from = -1);
void causale_inc_pag();
void causale_ritenute ();
void causale_vendite ();
void causale_acquisti();
virtual bool user_create();
virtual bool user_destroy();
virtual TRelation* get_relation() const { return _rel; }
virtual TMask* _get_mask(int mode) { return _msk; }
virtual bool changing_mask(int mode) {return false; }
virtual bool remove();
void init_mask(TMask&);
virtual void on_config_change();
virtual void init_query_mode(TMask&);
virtual void init_insert_mode(TMask& m) { init_query_mode(m); }
virtual void init_modify_mode(TMask& m) { init_query_mode(m); }
virtual int rewrite(const TMask& m);
virtual int write(const TMask& m);
virtual int read(TMask& m);
virtual void ini2sheet(TConfig& ini, TSheet_field &sheet);
virtual void sheet2ini(TSheet_field &sheet,TConfig& ini);
void load_rcaus(TMask& m);
int re_write(const TMask& m, bool re);
public:
// @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
virtual bool check_autorization() const { return false; }
tipo_descr _tipo_des; // Il tipo di causale corrente
void compila_array (const TString&, int, int, int);
TSheet_field& ss() const { return *_sheet; }
TMask& ss_mask() const { return _sheet->sheet_mask(); }
void add_riga (int numrig, char sz, const TBill& tc, const TString& d, const TString& da);
bool mostra_campi();
bool valuta() const { return _valuta; }
bool saldaconto() const { return _saldaconto; }
int anno_iva() const { return _anno_iva; }
TCaus_app() : _last_descr(no_descr) {}
};
HIDDEN TCaus_app& app() { return (TCaus_app&) main_app(); }
bool TCaus_app::filtra_reg(const TRelation * r)
{
const TRectype& rec = r->curr();
const int anno = atoi(rec.get("CODTAB").sleft(4));
bool ok = anno == app().anno_iva();
if (ok)
{
const TipoIVA tiporeg = (TipoIVA)rec.get_int("I0");
const bool corrisp = rec.get_bool("B0");
switch (app()._filtro)
{
case 1:
ok = tiporeg == iva_vendite; break;
case 2:
ok = (tiporeg == iva_vendite && corrisp); break;
case 3:
ok = tiporeg == iva_acquisti; break;
case 4: // tiporeg 1 senza corrisp OPPURE 2 (NC ST ND AF)
ok = tiporeg == iva_acquisti || (tiporeg == iva_vendite && !corrisp) ; break;
default:
break;
}
}
return ok;
}
////////////////////////////////////////////////////////////////////////////
// Funzioni che caricano le varie descrizioni fisse nell'array
////////////////////////////////////////////////////////////////////////////
// Cancella tutta la riga tranne la descrizione
void TCaus_app::clear(int riga)
{
TToken_string& r = ss().row(riga);
r = r.get(0);
ss().force_update(riga);
}
// Setta la descrizione di una riga senza cmbiare il resto
void TCaus_app::set_descr(int i, const char * dfi)
{
TToken_string& r = ss().row(i);
r.add(dfi, 0);
}
void TCaus_app::carica_righe_libere(int from)
{
if (from < 0) from = ss().items();
for (int i = from; i < 20; i++)
set_descr(i, "");
if (_last_descr != _tipo_des)
{
if (curr_mask().is_running())
ss().force_update();
ss().select(0);
_last_descr = _tipo_des;
}
}
// Cancella tutte le descrizioni delle righe
void TCaus_app::clear_descr()
{
if (_tipo_des != no_descr)
{
TString_array& a = ss().rows_array();
for (int i = 0; i < a.items(); i++)
{
TToken_string& r = a.row(i);
r.add("", 0);
}
_tipo_des = no_descr;
carica_righe_libere();
}
}
void TCaus_app::causale_vendite()
{
if (_tipo_des != vendita)
{
int i = 0;
set_descr(i++, TR("C Clienti"));
set_descr(i++, TR("C Di ricavo"));
set_descr(i++, TR("C IVA vendite"));
set_descr(i++, TR("C IVA non detraibile"));
set_descr(i++, TR("C Imp. esenti")); // 5
set_descr(i++, TR("C Imp. non imponibili"));
set_descr(i++, TR("C Imp. non soggetti"));
set_descr(i++, TR("C Ritenute fiscali"));
set_descr(i++, TR("C Ritenute sociali"));
set_descr(i++, TR("C IVA ad esig.diff.")); // 10
set_descr(i++, TR("C IVA per cassa"));
set_descr(i++, TR("C IVA in rev. charge"));
_tipo_des = vendita;
carica_righe_libere(i);
}
}
void TCaus_app::causale_acquisti()
{
if (_tipo_des != acquisto)
{
int i = 0;
set_descr(i++, TR("C Fornitori"));
set_descr(i++, TR("C Di costo"));
set_descr(i++, TR("C IVA acquisti"));
set_descr(i++, TR("C IVA non detraibile"));
set_descr(i++, TR("C Imp. esenti")); // 5
set_descr(i++, TR("C Imp. non imponibili"));
set_descr(i++, TR("C Imp. non soggetti"));
set_descr(i++, TR("C Ritenute fiscali"));
set_descr(i++, TR("C Ritenute sociali"));
set_descr(i++, TR("C IVA ad esig.diff.")); // 10
set_descr(i++, TR("C IVA per cassa"));
set_descr(i++, TR("C IVA in rev. charge"));
_tipo_des = acquisto;
carica_righe_libere(i);
}
}
void TCaus_app::causale_ritenute()
{
if (_tipo_des != ritenuta_occas)
{
int i = 0;
set_descr (i++, TR("Costo"));
set_descr (i++, TR("Cassa/banca"));
set_descr (i++, TR("Erario"));
_tipo_des = ritenuta_occas;
carica_righe_libere(i);
}
}
void TCaus_app::causale_inc_pag()
{
if (_tipo_des != incasso_pagamento)
{
int i = 0;
set_descr(i++, TR("C Clienti/Fornitori")); // 2
set_descr(i++, TR("C Cassa o banca"));
set_descr(i++, TR("C Tratta")); // 4
set_descr(i++, TR("C Ricevuta bancaria"));
set_descr(i++, TR("C Cessione")); // 6
set_descr(i++, TR("C Paghero'"));
set_descr(i++, TR("C Lettera di credito"));// 8
set_descr(i++, TR("C Tratta accettata"));
set_descr(i++, TR("C Abbuoni pass./sc."));
set_descr(i++, TR("C Abbuoni att./sc.")); // 10
set_descr(i++, TR("C Spese e rimborsi"));
set_descr(i++, TR("C Ritenute fiscali")); // 12
set_descr(i++, TR("C Differenza cambio"));
set_descr(i++, TR("C Ritenute sociali")); // 14
_tipo_des = incasso_pagamento;
carica_righe_libere(i);
}
}
////////////////////////////////////////////////////////////////////////////
// Handler della maschera principale
////////////////////////////////////////////////////////////////////////////
/************
se m770==6 le descrizioni devono essere
1. conto
2. cassa/banca
3. erario
************/
bool TCaus_app::m770_hndl (TMask_field& f, KEY k)
{
if (k == K_TAB && f.focusdirty())
app().fill_sheet(f.mask());
return true;
}
void TCaus_app::set_reg_filter(int f)
{
_filtro = f;
TEdit_field& reg = _msk->efield(F_COD_REG);
reg.browse()->cursor()->set_filterfunction(filtra_reg);
TEdit_field& des = _msk->efield(F_DES_REG);
des.browse()->cursor()->set_filterfunction(filtra_reg);
}
int TCaus_app::calc_filter(const TString& tpd)
{
int filtro = 0;
if (tpd.full())
{
const TRectype& tpd_rec = cache().get("%TPD", tpd);
if (!tpd_rec.empty())
{
const TipoIVA i = (TipoIVA)tpd_rec.get_int("I0"); // IVA acquisti, vendite, generica
if (i == iva_vendite) // vendite
{
const bool corrisp = tpd_rec.get_bool("B0"); // vendite con corrispettivi?
filtro = corrisp ? 2 : 1;
}
else
{
if (i == iva_acquisti) // acquisti
filtro = 3; else
if (i == iva_generica) // sia acquisti sia vendite
filtro = 4;
}
}
}
set_reg_filter(filtro);
return filtro;
}
bool TCaus_app::tipodoc_hndl (TMask_field& f, KEY k)
{
// Testo K_TAB perche' il controllo deve scattare anche all'inizio
// per vedere, per es., se il registro scritto nella causale esiste ancora
if (k == K_TAB)
{
const TString& val = f.get();
TMask& m = f.mask();
TEdit_field& field_reg = m.efield(F_COD_REG);
if (val.not_empty() && val != "IN" && val != "PG" && val != "AN")
{
m.hide(F_TIPO_MOV_2);
m.show(F_TIPO_MOV_1);
m.enable(F_TIPO_MOV_1, app().saldaconto());
field_reg.enable();
m.enable(F_DES_REG);
app().calc_filter(val);
}
else // TIPODOC vuoto || IN || PG || AN
{
field_reg.reset();
field_reg.enable(m.query_mode());
m.reset(F_DES_REG);
m.enable(F_DES_REG, m.query_mode());
m.hide(F_TIPO_MOV_1);
m.show(F_TIPO_MOV_2);
m.enable(F_TIPO_MOV_2, app().saldaconto());
}
// Ma davvero esiste il registro ?
const TString& codreg = field_reg.get();
if (codreg.full())
{
TRegistro registro(codreg, app().anno_iva());
if (registro.name().empty())
{
TRegistro registro_prec(codreg, app().anno_iva() - 1);
if (registro_prec.name().empty())
return f.error_box(FR("Non esiste il registro %s per l'anno %d"),
(const char*)codreg, app().anno_iva());
}
}
app().mostra_campi();
app().fill_sheet(m);
}
return true;
}
bool TCaus_app::tipomov_hndl (TMask_field& f, KEY k)
{
if (k == K_TAB && f.mask().is_running())
{
app().mostra_campi();
if (f.focusdirty())
app().fill_sheet(f.mask());
}
return true;
}
bool TCaus_app::mostra_campi()
{
TMask& m = curr_mask();
const TString& codreg = m.get(F_COD_REG);
if (codreg.blank())
{
m.hide(F_AUTO_FAT);
m.hide(F_ALLEGAT);
m.hide(F_FAT_RITARDO);
m.hide(F_OP_INTRACOM);
m.hide(F_VALINTRA);
// m.hide(F_COD_CAUS_IM);
m.hide(F_CODCAUREG);
const int tpm = m.get_int(F_TIPO_MOV);
switch (tpm)
{
case 0:
m.enable(F_OP_FINE_ANNO, m.insert_mode());
m.enable(F_MOV_VALU, valuta());
m.show(F_M_770);
m.show(F_OP_FINE_ANNO);
m.show(F_COLL_CESP);
break;
case 3:
case 5:
case 6:
m.enable(F_MOV_VALU, valuta());
m.show(F_M_770);
m.hide(F_OP_FINE_ANNO);
m.hide(F_COLL_CESP);
break;
default:
break;
}
}
else
{ // codreg non vuoto
m.hide(F_OP_FINE_ANNO);
m.enable(F_MOV_VALU, valuta());
// m.show(F_COD_CAUS_IM);
// m.enable(F_COD_CAUS_IM, !saldaconto());
m.show(F_CODCAUREG);
m.show(F_AUTO_FAT);
m.show(F_ALLEGAT);
m.show(F_FAT_RITARDO);
m.show(F_COLL_CESP);
m.show(F_OP_INTRACOM);
m.show(F_VALINTRA);
}
return true;
}
bool TCaus_app::cod_reg_hndl (TMask_field& f, KEY k)
{
if (k == K_TAB)
{
app().mostra_campi();
if (f.focusdirty())
app().fill_sheet(f.mask());
return true;
}
// controllo di consistenza tra codice (tipo) registro e tipo documento
if (k == K_ENTER)
{
const TMask& m = f.mask();
const TString& tpd = m.get(F_TIPO_DOC);
if (tpd.not_empty())
{
const TRectype& tabtpd = cache().get("%TPD", tpd);
if (!tabtpd.empty())
{
const TipoIVA i = (TipoIVA)tabtpd.get_int("I0"); // IVA acquisti, vendite, generica
if (i != iva_generica) // iva_generica = 9
{
const TString& codreg = m.get(F_COD_REG);
const TRegistro grog(codreg, app().anno_iva());
const TipoIVA ri = grog.iva();
if (i != ri)
return f.error_box(TR("Tipo documento incompatibile con tipo registro"));
}
}
}
}
return true;
}
////////////////////////////////////////////////////////////////////////////
// Handler della maschera dello spreadsheet
////////////////////////////////////////////////////////////////////////////
bool TCaus_app::ss_notify(TSheet_field& s, int r, KEY k)
{
static bool selecting = false;
switch(k)
{
case K_TAB:
if (!selecting && s.row(r).get_char(1) <= ' ') // riga azzerata
{
selecting = true;
s.select(r, 1, false); // Vado alla prima colonna delle righe vuote
selecting = false;
}
break;
case K_ENTER:
if (s.row(r).get_int(3) == 0 && s.row(r).get_char(1) <= ' ') // riga azzerata
app().clear(r); // pulisco la riga anche nell'array
break;
default:
break;
}
return true;
}
// Handler della sezione D/A: e' obbligatoria se si specifica un gruppo sulla riga
bool TCaus_app::sezione_hndl(TMask_field& f, KEY k)
{
if (k == K_ENTER)
{
if (f.mask().get(SS_GRUPPO).not_empty())
{
const char sez = f.get()[0];
if (sez != 'A' && sez != 'D')
return f.error_box(TR("E' necessario specificare la sezione D/A"));
}
// else
// f.reset();
}
return true;
}
bool TCaus_app::conto_hndl (TMask_field& f, KEY k)
{
if (k == K_ENTER)
{
char scarta = 'Z';
int ultima = 8;
const TipoIVA tpr = (TipoIVA)app().curr_mask().get_int(F_TIPO_REG);
switch (tpr)
{
case iva_vendite:
scarta = 'F'; break; // Scarta vendite a fornitori
case iva_acquisti:
scarta = 'C'; break; // Scarta acquisti da clienti
default:
scarta = 'Z'; // Accetta tutto
switch (app()._tipo_des)
{
case incasso_pagamento:
ultima = 12; break;
default:
ultima = 8; break;
}
}
TMask_field& sez = f.mask().field(SS_SEZIONE);
char sezione = toupper(sez.get()[0]);
if (sezione != 'A' && sezione != 'D') sezione = ' ';
char sezione_consigliata = ' ';
const bool full = f.mask().get(SS_GRUPPO).not_empty();
const int riga = app().ss().selected();
if (tpr != nessuna_iva && riga <= ultima)
{
TMask_field& cfld = f.mask().field(SS_TIPOCF);
const char cf = toupper(cfld.get()[0]);
bool ok = true;
if (riga == 0 || riga == 8)
{
ok = cf != scarta;
if (full && sezione == ' ')
{
if (riga == 0)
sezione_consigliata = cf == 'C' ? 'D' : 'A';
else
sezione_consigliata = app().ss().row(0).get_char(1);
}
}
else
{
ok = cf != 'C' && cf != 'F';
if (full && sezione == ' ')
sezione_consigliata = app().ss().row(0).get_char(1) == 'D' ? 'A' : 'D';
}
const bool solaIVA = (TipoIVA)app().curr_mask().get_bool(F_SOLAIVA);
if (!ok && solaIVA && cf == 'F')
ok = true; // le regolarizzazioni possono avere un fornitore sulla vendita fittizia
if (!ok)
return cfld.error_box(
FR("%s non valido con registro %s"), cf == 'C' ? TR("Cliente") : TR("Fornitore"), iva2name(tpr));
}
if (sezione == ' ' && sezione_consigliata != ' ')
{
const char sc[2] = { sezione_consigliata, '\0' };
sez.set(sc);
}
}
return true;
}
// 1. Se specifico il sottoconto devono essere non vuoti gruppo e conto
// 2. g-c-s devono esistere
bool TCaus_app::sottoconto_hndl(TMask_field& f, KEY k)
{
if (k == K_ENTER && f.get().not_empty())
{
const TMask& m = f.mask();
const bool ok = m.get(SS_GRUPPO).not_empty() && m.get(SS_CONTO).not_empty();
if (!ok) return f.error_box(TR("Conto incompleto"));
}
return true;
}
void TCaus_app::compila_array(const TString& tpd, int tpm, int tpr, int m770)
{
if (tpd.empty() || tpd == "IN" || tpd == "AN" || tpd == "PG")
{
bool canc = true;
switch (tpm)
{
case 0:
if (m770 == 6)
{
causale_ritenute();
canc = false;
}
break;
case 3:
case 5:
case 6:
if (saldaconto())
{
causale_inc_pag();
canc = false;
};
break;
default:
break;
}
if (canc)
clear_descr();
}
else // C'e' il tipodoc.
{
switch (tpr)
{
case 1:
causale_vendite(); break;
case 2:
causale_acquisti(); break;
default:
clear_descr(); break;
}
}
}
///////////////////////////////////////////////////////////
// Relapp functions
///////////////////////////////////////////////////////////
int TCaus_app::read(TMask& m)
{
int err = TRelation_application::read(m);
if (err == NOERR)
{
TRectype r(LF_RCAUSALI);
r.put(RCA_CODCAUS, m.get(F_COD_CAUS));
_rcaus_rec->read(r);
load_rcaus(m);
_tipo_des = no_descr; //assegnazione necessaria per forzare il ricaricamento delle descrizioni
fill_sheet(m);
const TString& tpd = m.get(F_TIPO_DOC);
calc_filter(tpd);
}
return err;
}
void TCaus_app::add_riga(int numrig, char sz, const TBill& tc, const TString& d, const TString& da)
{
TToken_string& riga = ss().row(numrig);
riga = riga.get(0); // Lascia invariata la descrizione ...
if (riga.empty()) riga = " "; // ... se esiste gia'
riga.add(sz);
riga.add(tc.string(0x3));
riga.add(d);
riga.add(da);
}
void TCaus_app::load_rcaus(TMask& m)
{
const TString4 cod(_rel->curr().get(RCA_CODCAUS));
TString d, da(50);
ss().reset_sheet();
const int last = _rcaus_rec->last_row();
for (int i = 1; i <= last; i++)
{
const TRectype & r = _rcaus_rec->row(i, true);
const char sz = r.get_char(RCA_SEZIONE);
const char cf = r.get_char(RCA_TIPOCF);
const int g = r.get_int(RCA_GRUPPO);
const int c = r.get_int(RCA_CONTO);
const long s = r.get_long(RCA_SOTTOCONTO);
d = r.get(RCA_CODDESC);
da = cache().get("%DPN", d, "S0");
const TBill tc(g,c,s,cf);
add_riga(i-1, sz, tc, d, da);
}
}
bool TCaus_app::fill_sheet(TMask& m)
{
const TString& codreg = m.get(F_COD_REG);
const TString& tpd = m.get(F_TIPO_DOC);
const int tpm = m.get_int(F_TIPO_MOV);
const int m770 = m.get_int(F_M_770);
int tpr = m.get_int(F_TIPO_REG);
if (!m.is_running() && codreg.full())
{
TString8 chiave; chiave << anno_iva() << codreg;
const TRectype& reg = cache().get("REG", chiave);
tpr = reg.get_int("I0");
}
// carico le descrizioni fisse nell'array Righe_rcaus
compila_array(tpd,tpm,tpr,m770);
return true;
}
int TCaus_app::write(const TMask& m)
{
int err = TRelation_application::write(m);
if (err == NOERR)
err = re_write(m, false);
return err;
}
int TCaus_app::rewrite(const TMask& m)
{
int err = re_write(m, true);
int err1 = TRelation_application::rewrite(m);
return err == NOERR ? err1 : err;
}
int TCaus_app::re_write(const TMask& m, bool re)
{
_rcaus_rec->destroy_rows();
if (m.insert_mode())
_rcaus_rec->renum_key(RCA_CODCAUS, m.get(F_COD_CAUS));
for (int i = 0; i < ss().items(); i++)
{
TToken_string &riga = ss().row(i);
const int g = riga.get_int(3);
const char sezione = riga.get_char(1);
if (g > 0 || sezione > ' ')
{
TRectype & r = _rcaus_rec->row(i+1, true);
const char sezione = riga.get_char(1);
const char tipo_cf = riga.get_char();
const int c = riga.get_int(4);
const long s = riga.get_long();
riga.get(); // Salta descrizione conto
const TString80 coddesc(riga.get());
r.put (RCA_CODDESC, coddesc);
r.put (RCA_SEZIONE, sezione);
r.put (RCA_TIPOCF, tipo_cf);
r.put (RCA_GRUPPO, g);
r.put (RCA_CONTO, c);
r.put (RCA_SOTTOCONTO, s);
}
}
return _rcaus_rec->write(re);
}
bool TCaus_app::remove()
{
return TRelation_application::remove() && _rcaus_rec->remove() == NOERR;
}
void TCaus_app::ini2sheet(TConfig& ini, TSheet_field& sheet)
{
TMask& m = sheet.mask();
fill_sheet(m);
const TString& tpd = m.get(F_TIPO_DOC);
calc_filter(tpd);
TString16 defpar, d;
TString da;
for (int i = 0; i < ss().items(); i++)
{
defpar.format("%d,%d", LF_RCAUSALI, i+1);
if (ini.set_paragraph(defpar))
{
const char sz = ini.get(RCA_SEZIONE)[0];
const char cf = ini.get(RCA_TIPOCF)[0];
const int g = ini.get_int(RCA_GRUPPO);
const int c = ini.get_int(RCA_CONTO);
const long s = ini.get_long(RCA_SOTTOCONTO);
d = ini.get(RCA_CODDESC);
da = cache().get("%DPN", d, "S0");
TBill tc(g,c,s,cf);
add_riga(i, sz, tc, d, da);
}
}
}
void TCaus_app::sheet2ini(TSheet_field& sheet,TConfig& ini)
{
TString16 defpar;
for (int i = 0; i < ss().items(); i++)
{
defpar.format("%d,%d", LF_RCAUSALI, i+1);
ini.set_paragraph(defpar);
TToken_string &riga = ss().row(i);
const int g = riga.get_int(3);
if (g > 0)
{
const TString4 sezione = riga.get_char(1);
const TString4 tipo_cf = riga.get_char();
const int c = riga.get_int(4); // Salta al conto
const long s = riga.get_long();
const char* coddesc = riga.get(7); // Salta alla descrizione conto
ini.set(RCA_CODDESC, coddesc);
ini.set(RCA_SEZIONE, sezione);
ini.set(RCA_TIPOCF, tipo_cf);
ini.set(RCA_GRUPPO, g);
ini.set(RCA_CONTO, c);
ini.set(RCA_SOTTOCONTO, s);
}
else
ini.remove_all();
}
}
void TCaus_app::init_mask(TMask& m)
{
m.set(F_ANNOES, anno_iva());
carica_righe_libere();
}
void TCaus_app::init_query_mode(TMask& m)
{
init_mask(m);
}
void TCaus_app::on_config_change()
{
TConfig conf(CONFIG_DITTA, "cg");
_saldaconto = conf.get_bool("GesSal");
_valuta = conf.get_bool("GesVal");
_anno_iva = TDate(TODAY).year();
_msk->show(F_TIPO_MOV_1, saldaconto());
_msk->show(F_TIPO_MOV_2, saldaconto());
// _msk->enable(F_COD_CAUS_IM, !saldaconto());
_msk->enable(F_MOV_VALU, valuta());
if (saldaconto())
{
_msk->set_handler(F_TIPO_MOV_1, tipomov_hndl);
_msk->set_handler(F_TIPO_MOV_2, tipomov_hndl);
}
else
{
_msk->set_handler(F_TIPO_MOV_1, NULL);
_msk->set_handler(F_TIPO_MOV_2, NULL);
}
}
bool TCaus_app::user_create()
{
open_files(LF_CAUSALI, LF_RCAUSALI, LF_TABCOM, LF_TAB, 0);
_rel = new TRelation (LF_CAUSALI);
_rcaus_rec = new TRecord_array(LF_RCAUSALI, RCA_NRIGA);
_msk = new TMask("cg0500a");
_sheet = &_msk->sfield(F_SHEET_GCS);
_msk->set_handler(F_TIPO_DOC, tipodoc_hndl);
_msk->set_handler(F_COD_REG, cod_reg_hndl);
_msk->set_handler(F_M_770, m770_hndl);
TSheet_field& cs = ss();
cs.set_notify(ss_notify);
cs.sheet_mask().set_handler(SS_SEZIONE, sezione_hndl);
cs.sheet_mask().set_handler(SS_CONTO, conto_hndl);
cs.sheet_mask().set_handler(SS_SOTTOCONTO, sottoconto_hndl);
cs.sheet_mask().set_handler(SS_SOTTOCONTO+100, sottoconto_hndl);
cs.sheet_mask().set_handler(SS_SOTTOCONTO+200, sottoconto_hndl);
return true;
}
bool TCaus_app::user_destroy()
{
delete _msk;
delete _rcaus_rec;
delete _rel;
return true;
}
int cg0500(int argc, char* argv[])
{
TCaus_app a;
a.run(argc, argv, TR("Tabella causali"));
return 0;
}

51
src/cg01/cg0500.h Normal file
View File

@ -0,0 +1,51 @@
// cg0500.h
#define F_COD_CAUS 200
#define F_DESCR 201
#define F_TIPO_DOC 202
#define F_COD_REG 203
#define F_DATA_DOC 204
#define F_NUM_DOC 205
#define F_MOV_SEZ 206
#define F_TIPO_MOV_1 207
#define F_TIPO_MOV_2 208
#define F_AUTO_FAT 209
#define F_MOV_VALU 210
#define F_COD_CAUS_IM 211
#define F_FAT_RITARDO 212
#define F_OP_INTRACOM 213
#define F_ALLEGAT 214
#define F_VAL_INTRACOM 215
#define F_COLL_CESP 216
#define F_M_770 217
#define F_COLL_PRIMANOTA 218
#define F_SHEET_GCS 219
#define F_TIPO_REG 220
#define F_ANNOES 221
#define F_TIPO_MOV 222
#define F_OP_FINE_ANNO 223
#define F_VALINTRA 224
#define F_CORRISP 225
#define F_COD_CAUS2 226
#define F_DESCR2 227
#define F_DES_DOC 228
#define F_DES_REG 229
#define F_MOVIND 230
#define F_SOLAIVA 231
#define F_PROVV 232
#define F_CODCAUREG 233
#define F_REGSPIVA 234
#define F_MOVCGIND 235
#define F_RIL_FT_EM_RI 236
#define F_DATAREG_PREC 237
#define F_TIPO_SDI 238
#define F_ESCULDIARC 239
#define SS_TIPO 101
#define SS_SEZIONE 102
#define SS_TIPOCF 103
#define SS_GRUPPO 104
#define SS_CONTO 105
#define SS_SOTTOCONTO 106
#define SS_DESCAGG 108
#define SS_DESCRIPTION 109

452
src/cg01/cg0500a.uml Normal file
View File

@ -0,0 +1,452 @@
#include "cg0500.h"
TOOLBAR "topbar" 0 0 0 2
#include <relapbar.h>
ENDPAGE
PAGE "Righe" 0 0 0 2
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 0 ""
END
STRING F_COD_CAUS 3
BEGIN
PROMPT 2 1 "Codice "
FIELD CODCAUS
KEY 1
FLAGS "UZG"
USE LF_CAUSALI
INPUT CODCAUS F_COD_CAUS
DISPLAY "Cod." CODCAUS
DISPLAY "Descrizione@50" DESCR
DISPLAY "Documento" TIPODOC
DISPLAY "Registro" REG
DISPLAY "Tipo movimento" TIPOMOV
DISPLAY "Colleg." CODCAUSIM
DISPLAY "770" M770
DISPLAY "Cespiti" COLLCESP
OUTPUT F_COD_CAUS CODCAUS
OUTPUT F_DESCR DESCR
CHECKTYPE REQUIRED
MESSAGE COPY,F_COD_CAUS2
END
STRING F_DESCR 50
BEGIN
PROMPT 16 1 "Descriz."
FIELD DESCR
USE LF_CAUSALI KEY 2
INPUT DESCR F_DESCR
DISPLAY "Descrizione @50" DESCR
DISPLAY "Cod." CODCAUS
DISPLAY "Documento" TIPODOC
DISPLAY "Registro" REG
DISPLAY "Movimento" TIPOMOV
DISPLAY "Colleg." CODCAUSIM
DISPLAY "770" M770
DISPLAY "Cespiti" COLLCESP
COPY OUTPUT F_COD_CAUS
CHECKTYPE REQUIRED
KEY 2
WARNING "Descrizione assente"
MESSAGE COPY,F_DESCR2
FLAGS "G"
END
STRING F_TIPO_DOC 2
BEGIN
PROMPT 2 3 "Tipo documento "
FIELD TIPODOC
USE %TPD
INPUT CODTAB F_TIPO_DOC
DISPLAY "Tipo " CODTAB
DISPLAY "Descrizione @50" S0
OUTPUT F_TIPO_DOC CODTAB
OUTPUT F_DES_DOC S0
WARNING "Tipo documento errato"
CHECKTYPE NORMAL
FLAGS "U"
ADD NONE
MESSAGE EMPTY CLEAR,F_SOLAIVA|ENABLE,F_PROVV|ENABLE,9@
MESSAGE ENABLE,F_SOLAIVA|CLEAR,F_PROVV|CLEAR,9@
END
STRING F_DES_DOC 50
BEGIN
PROMPT 24 3 ""
USE %TPD KEY 2
INPUT S0 F_DES_DOC
DISPLAY "Descrizione @50" S0
DISPLAY "Tipo " CODTAB
COPY OUTPUT F_TIPO_DOC
WARNING "Tipo documento errato"
CHECKTYPE NORMAL
ADD NONE
END
STRING F_COD_REG 3
BEGIN
PROMPT 2 4 "Registro "
FIELD REG
USE REG
INPUT CODTAB[1,4] F_ANNOES
INPUT CODTAB[5,7] F_COD_REG
DISPLAY "Anno" CODTAB[1,4]
DISPLAY "Registro" CODTAB[5,7]
DISPLAY "Tipo" I0
DISPLAY "Corrispettivi" B0
DISPLAY "Descrizione@50" S0
OUTPUT F_COD_REG CODTAB[5,7]
OUTPUT F_TIPO_REG I0
OUTPUT F_CORRISP B0
OUTPUT F_DES_REG S0
WARNING "Registro assente o non compatibile col tipo documento"
CHECKTYPE SEARCH
FLAGS "UZ"
END
STRING F_DES_REG 50
BEGIN
PROMPT 24 4 ""
USE REG KEY 2
INPUT S0 F_DES_REG
DISPLAY "Descrizione @50" S0
DISPLAY "Anno" CODTAB[1,4]
DISPLAY "Codice registro " CODTAB[5,7]
DISPLAY "Tipo" I0
DISPLAY "Corrispettivi" B0
COPY OUTPUT F_COD_REG
CHECKTYPE REQUIRED
END
NUMBER F_ANNOES 4
BEGIN
PROMPT 2 5 "Anno liquidaz. "
FLAGS "HA"
END
NUMBER F_TIPO_REG 1
BEGIN
PROMPT 25 5 "Tipo "
FLAGS "H"
END
// Questo rimane quasi sempre nascosto
STRING F_TIPO_MOV 1
BEGIN
PROMPT 2 5 ""
FIELD TIPOMOV
FLAGS "H"
END
// Viene mostrato questo se TPD non vuoto e diverso da IN AN PG
LISTBOX F_TIPO_MOV_1 1 20
BEGIN
PROMPT 2 5 "Tipo movimento "
FIELD TIPOMOV
ITEM " |Nessuno" MESSAGE COPY,F_TIPO_MOV
ITEM "1|Fattura" MESSAGE COPY,F_TIPO_MOV
ITEM "2|Nota credito" MESSAGE COPY,F_TIPO_MOV
// GROUP 2
END
// Viene mostrato questo se TPD vuoto o uguale a IN AN PG
LISTBOX F_TIPO_MOV_2 1 20
BEGIN
PROMPT 2 5 "Tipo movimento "
FIELD TIPOMOV
ITEM " |Nessuno" MESSAGE COPY,F_TIPO_MOV|ENABLE,F_PROVV
ITEM "1|Fattura" MESSAGE COPY,F_TIPO_MOV|CLEAR,F_PROVV
ITEM "3|Incasso/pagamento " MESSAGE COPY,F_TIPO_MOV|CLEAR,F_PROVV
ITEM "5|Insoluto" MESSAGE COPY,F_TIPO_MOV|CLEAR,F_PROVV
ITEM "6|Pagamento insoluto" MESSAGE COPY,F_TIPO_MOV|CLEAR,F_PROVV
FLAGS "H"
END
BOOLEAN F_CORRISP
BEGIN
PROMPT 33 5 ""
FLAGS "H"
END
LIST F_TIPO_SDI 40
BEGIN
PROMPT 2 6 "Tipo documento SDI "
FIELD TIPODOCSDI
ITEM "|"
ITEM "TD16|TD16 Integraz. fatt. rev.ch. interno"
ITEM "TD17|TD17 Integ./autof. acq. servizi estero"
ITEM "TD18|TD18 Integ. acq. beni intracomunitari"
ITEM "TD19|TD19 Integ./autof. acq. beni ex art. 17"
ITEM "TD20|TD20 Autofattura"
ITEM "TD28|TD28 Fattura cartacea S.Marino"
END
BOOLEAN F_SOLAIVA
BEGIN
PROMPT 2 7 "Movimento di sola IVA"
FIELD SOLOIVA
END
BOOLEAN F_ESCULDIARC
BEGIN
PROMPT 30 7 "Escludi causale dall'archiviazione sostitutiva"
FILED ESCLUDIARC
END
SPREADSHEET F_SHEET_GCS
BEGIN
PROMPT 0 8 "Righe"
ITEM "Tipo conto@21F"
ITEM "D/A@3"
ITEM "C/F@3"
ITEM "Gr."
ITEM "Co."
ITEM "Sottoc."
ITEM "Descrizione Conto@50"
ITEM "Desc. agg."
ITEM "Descrizione Aggiuntiva@50"
END
ENDPAGE
PAGE "Parametri" -1 -1 77 20
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 0 ""
END
STRING F_COD_CAUS2 3
BEGIN
PROMPT 2 1 "Codice "
FLAGS "D"
END
STRING F_DESCR2 50
BEGIN
PROMPT 16 1 "Descriz."
FLAGS "D"
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 3 "@BCampi obbligatori in immissione documenti"
END
BOOLEAN F_DATA_DOC
BEGIN
PROMPT 2 4 "Data documento"
FIELD DATADOC
END
BOOLEAN F_NUM_DOC
BEGIN
PROMPT 34 4 "Numero documento"
FIELD NUMDOC
END
BOOLEAN F_AUTO_FAT
BEGIN
PROMPT 2 6 "Autofattura art.34"
FIELD AUTOFATT
GROUP 2
END
BOOLEAN F_ALLEGAT
BEGIN
PROMPT 34 6 "Doc. non va in allegati fine anno"
FIELD ALLEG
GROUP 2
END
BOOLEAN F_FAT_RITARDO
BEGIN
PROMPT 2 8 "Fattura in ritardo"
FIELD RITFATT
GROUP 2
END
STRING F_COD_CAUS_IM 3
BEGIN
PROMPT 34 9 "Codice causale collegata "
FLAGS "UZ"
FIELD CODCAUSIM
USE LF_CAUSALI
INPUT CODCAUS F_COD_CAUS_IM
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
DISPLAY "Documento" TIPODOC
OUTPUT F_COD_CAUS_IM CODCAUS
CHECKTYPE NORMAL
GROUP 2
END
BOOLEAN F_OP_INTRACOM
BEGIN
PROMPT 2 10 "Operazione intracomunitaria"
FIELD INTRACOM
GROUP 2
END
BOOLEAN F_VALINTRA
BEGIN
PROMPT 34 10 "Gestione valuta per operazioni intrac."
FIELD VALINTRA
GROUP 2
END
BOOLEAN F_MOV_VALU
BEGIN
PROMPT 2 11 "Movimento in valuta"
FIELD MOVVAL
GROUP 2
END
BOOLEAN F_MOV_SEZ
BEGIN
PROMPT 34 11 "Movimento solo sezionale"
FIELD MOVSEZ
FLAGS "H"
END
BOOLEAN F_RIL_FT_EM_RI
BEGIN
PROMPT 2 12 "Rilevazione fatt.da ric./em."
FIELD RILFTEMRI
GROUP 9
END
BOOLEAN F_DATAREG_PREC
BEGIN
PROMPT 34 12 "Regis.ril. fatt.da ric./em.a fine esercizio"
FIELD DATAREGPR
GROUP 9
END
LIST F_PROVV 1 26
BEGIN
PROMPT 2 13 "Movimento provvisorio "
FIELD PROVV
ITEM " |No (movimento normale)"
ITEM "P|Si (cancellabile)"
ITEM "C|Cespiti"
END
LIST F_OP_FINE_ANNO 1 11
BEGIN
PROMPT 2 14 "Operazioni di fine anno "
ITEM " | "
ITEM "C|Chiusura"
ITEM "A|Apertura"
FIELD MOVAP
FLAGS "H"
END
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 1 15 "@bCollegamenti"
END
LISTBOX F_M_770 1 48
BEGIN
PROMPT 2 16 "Modello 770 "
FIELD M770
ITEM " |Nessuno"
ITEM "1|Ricevuta e/o pagamento fattura percipiente"
ITEM "2|Versamento ritenute percipiente"
ITEM "3|Versamento ritenute dipendente"
ITEM "4|Versamento contributi dipendente"
ITEM "5|Compensi non soggetti"
ITEM "6|Ritenute per prestazioni occasionali"
MODULE 77
END
LIST F_COLL_CESP 1 40
BEGIN
PROMPT 2 17 "Cespiti "
FIELD COLLCESP
ITEM " |Nessuno"
ITEM "A|Acquisto cespite"
ITEM "B|Rettifica acquisto"
ITEM "C|Sostenimento costi"
ITEM "E|Eliminazione dal processo produttivo"
ITEM "M|Rivalutazione monetaria"
ITEM "P|Reinvestimento plusvalenze"
ITEM "R|Rivalutazione economica"
ITEM "T|Trasferimento"
ITEM "V|Vendita cespite"
ITEM "Z|Rettifica vendita"
MODULE ce
END
BOOLEAN F_MOVIND
BEGIN
PROMPT 2 18 "Contabilità analitica"
FIELD MOVIND
MODULE ca,cm
MESSAGE FALSE CLEAR,F_MOVCGIND
MESSAGE TRUE ENABLE,F_MOVCGIND
END
BOOLEAN F_MOVCGIND
BEGIN
PROMPT 34 18 "Contabilità industriale"
FIELD MOVCGIND
MODULE CI
END
NUMBER F_REGSPIVA 2
BEGIN
PROMPT 2 19 "Regimi speciali IVA "
INPUT F_REGSPIVA
SHEET "Codice|Descrizione@75"
ITEM "|Nessuno"
ITEM "1|Acquisti beni dallo Stato del Vaticano e dalla Repubblica di San Marino"
ITEM "2|Estrazione beni da depositi Iva"
ITEM "3|Acquisti beni e servizi da soggetti non residenti"
ITEM "4|Operazioni di cui all'art.74,c.1,lett.e)"
ITEM "5|Provvigioni corrisposte dalle agenzie di viaggio ai loro intermediari"
ITEM "6|Acquisti di rottami e mat.di di recupero art. 74, commi 7 e 8"
ITEM "7|Acquisti di oro industriale e argento puro (art. 17, comma 5)"
ITEM "8|Acquisti di oro da investimento imp.per opzione (art. 17, comma 5)"
ITEM "9|Acquisti intrac. di CPU,PC, tablet,cellulari,console,microproc."
item "10|Importazioni rottami e altri mat.di recupero imposta non è versata"
ITEM "12|Acquisti di tartufi (art.1,c.109,legge 311/2004)"
ITEM "13|Subappalti in edilizia (Reverse charge)"
ITEM "14|Acquisti di fabbricati (art. 17, comma 6, lett. a-bis)"
ITEM "15|Acquisti di telefoni cellulari (art. 17, comma 6, lett. b)"
ITEM "16|Acquisti di prodotti elettronici (art. 17, comma 6, lett. c)"
ITEM "17|Acquisti di servizi del comp.edile e sett.connessi art. 17, comma 6, lett. a-ter "
ITEM "18|Acquisti di beni e servizi del sett.energetico art. 17, c.6 d-bis,ter,d-quater"
ITEM "19|Acquisti delle P.A., titolari di partita IVA art. 17-ter"
ITEM "50|Importazione di oro o argento (Reverse charge)"
ITEM "51|Rottami (Reverse charge)"
ITEM "52|Operazioni effettuate nei confronti di condominii"
OUTPUT F_REGSPIVA
FIELD REGSPIVA
END
STRING F_CODCAUREG 3
BEGIN
PROMPT 34 19 "Codice causale regolarizzazione IVA "
FLAGS "UZ"
FIELD CODCAUREG
USE LF_CAUSALI SELECT (SOLOIVA="X")&&(CODCAUS!=#F_COD_CAUS)&&((REGSPIVA=="")||(REGSPIVA==#F_REGSPIVA))
INPUT CODCAUS F_CODCAUREG
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
DISPLAY "Registro" REG
DISPLAY "Documento" TIPODOC
OUTPUT F_CODCAUREG CODCAUS
CHECKTYPE NORMAL
END
ENDPAGE
ENDMASK
#include "cg0500b.uml"

261
src/cg01/cg0500b.uml Normal file
View File

@ -0,0 +1,261 @@
#include "cg0500.h"
PAGE "" -1 -1 68 11
STRING SS_TIPO 21
BEGIN
PROMPT 1 1 "Tipo "
FLAGS "D"
END
LISTBOX SS_TIPOCF 11
BEGIN
PROMPT 33 1 "C/F "
ITEM " |Conto" MESSAGE SHOW,106|HIDE,206|HIDE,306|SHOW,107|HIDE,207|HIDE,307
ITEM "C|Cliente" MESSAGE SHOW,206|HIDE,106|HIDE,306|SHOW,207|HIDE,107|HIDE,307
ITEM "F|Fornitore" MESSAGE SHOW,306|HIDE,106|HIDE,206|SHOW,307|HIDE,107|HIDE,207
FLAGS "DGU"
GROUP 1
END
NUMBER SS_GRUPPO 3
BEGIN
PROMPT 1 3 "Gruppo "
HELP "Codice del gruppo"
FIELD LF_RCAUSALI->GRUPPO
USE LF_PCON KEY 1 SELECT (CONTO="")
INPUT GRUPPO SS_GRUPPO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Tipo C/F" TMCF
CHECKTYPE NORMAL
OUTPUT SS_GRUPPO GRUPPO
OUTPUT 107 DESCR
WARNING "Gruppo assente"
CHECKTYPE NORMAL
GROUP 1
ADD RUN CG0 -0
END
NUMBER SS_CONTO 3
BEGIN
PROMPT 15 3 "Conto "
HELP "Codice del conto"
FIELD LF_RCAUSALI->CONTO
USE LF_PCON KEY 1 SELECT SOTTOCONTO=""
INPUT GRUPPO SS_GRUPPO
INPUT CONTO SS_CONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Tipo C/F" TMCF
CHECKTYPE NORMAL
OUTPUT SS_TIPOCF TMCF
OUTPUT SS_CONTO CONTO
OUTPUT SS_GRUPPO GRUPPO
OUTPUT 107 DESCR
OUTPUT 207 DESCR
OUTPUT 307 DESCR
MESSAGE DIRTY,106|DIRTY,206|DIRTY,306
WARNING "Conto assente"
ADD RUN CG0 -0
GROUP 1
END
// Sottoconto NORMALE
NUMBER SS_SOTTOCONTO 6
BEGIN
PROMPT 29 3 "Sottoconto "
HELP "Codice del sottoconto"
FIELD LF_RCAUSALI->SOTTOCONTO
USE LF_PCON
INPUT GRUPPO SS_GRUPPO
INPUT CONTO SS_CONTO
INPUT SOTTOCONTO SS_SOTTOCONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
DISPLAY "C/R" TIPOSPRIC
OUTPUT SS_SOTTOCONTO SOTTOCONTO
OUTPUT 206 SOTTOCONTO
OUTPUT 306 SOTTOCONTO
OUTPUT SS_GRUPPO GRUPPO
OUTPUT SS_CONTO CONTO
OUTPUT 107 DESCR
ADD RUN CG0 -0
CHECKTYPE NORMAL
WARNING "Sottoconto assente"
GROUP 1
END
// Sottoconto CLIENTI
NUMBER 206 6
BEGIN
PROMPT 29 3 "Cliente "
HELP "Codice sottoconto del cliente"
FIELD LF_RCAUSALI->SOTTOCONTO
USE LF_CLIFO KEY 1
INPUT TIPOCF "C"
INPUT CODCF 206
DISPLAY "Sottoconto" CODCF
DISPLAY "Ragione sociale cliente@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
OUTPUT 206 CODCF
OUTPUT 106 CODCF
OUTPUT 306 CODCF
OUTPUT 207 RAGSOC
CHECKTYPE NORMAL
WARNING "Cliente assente"
ADD RUN CG0 -1
GROUP 1
END
// Sottoconto FORNITORI
NUMBER 306 6
BEGIN
PROMPT 29 3 "Fornitore "
HELP "Codice sottoconto del cliente"
FIELD LF_RCAUSALI->SOTTOCONTO
USE LF_CLIFO KEY 1
INPUT TIPOCF "F"
INPUT CODCF 306
DISPLAY "Sottoconto" CODCF
DISPLAY "Ragione sociale fornitore@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
OUTPUT 306 CODCF
OUTPUT 106 CODCF
OUTPUT 206 CODCF
OUTPUT 307 RAGSOC
CHECKTYPE NORMAL
WARNING "Fornitore assente"
ADD RUN CG0 -1
GROUP 1
END
LISTBOX SS_SEZIONE 5
BEGIN
PROMPT 51 3 "Sezione "
HELP "Indicare la sezione del conto"
ITEM " | "
ITEM "D|Dare"
ITEM "A|Avere"
FIELD LF_RCAUSALI->SEZIONE
FLAGS "U"
GROUP 1
END
// Descrizione normale
STRING 107 50
BEGIN
PROMPT 1 5 "Descrizione "
HELP "Indicare la descrizione della riga"
FIELD LF_RCAUSALI->DESC
USE LF_PCON KEY 2
INPUT DESCR 107
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "C/R" TIPOSPRIC
OUTPUT SS_SOTTOCONTO SOTTOCONTO
OUTPUT SS_CONTO CONTO
OUTPUT SS_GRUPPO GRUPPO
OUTPUT 107 DESCR
ADD RUN CG0 -0
GROUP 1
END
// Descrizione CLIENTE
STRING 207 50
BEGIN
PROMPT 1 5 "Rag. Soc. "
HELP "Ragione sociale del cliente"
FIELD LF_RCAUSALI->DESC
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC 207
DISPLAY "Tipo C/F" TIPOCF
DISPLAY "Ragione sociale Cliente@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" CODCF
OUTPUT 206 CODCF
OUTPUT 207 RAGSOC
GROUP 1
ADD RUN CG0 -1 C
END
// Descrizione FORNITORE
STRING 307 50
BEGIN
PROMPT 1 5 "Rag. Soc. "
HELP "Ragione sociale del fornitore"
FIELD LF_RCAUSALI->DESC
USE LF_CLIFO KEY 2
INPUT TIPOCF "F"
INPUT RAGSOC 307
DISPLAY "Tipo C/F" TIPOCF
DISPLAY "Ragione sociale Fornitore@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" CODCF
OUTPUT 306 CODCF
OUTPUT 307 RAGSOC
GROUP 1
ADD RUN CG0 -1 F
END
STRING SS_DESCAGG 5
BEGIN
PROMPT 1 7 "Descrizione aggiuntiva"
HELP "Codice della descrizione aggiuntiva"
FIELD LF_RCAUSALI->CODDESC
FLAGS "UZ"
USE %DPN
INPUT CODTAB SS_DESCAGG
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione @50" S0
OUTPUT SS_DESCAGG CODTAB
OUTPUT SS_DESCRIPTION S0
CHECKTYPE NORMAL
WARNING "Codice descrizione aggiuntiva errato"
GROUP 1
END
STRING SS_DESCRIPTION 50
BEGIN
PROMPT 1 8 ""
USE %DPN KEY 2
INPUT S0 SS_DESCRIPTION
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT SS_DESCAGG
CHECKTYPE NORMAL
WARNING "Descrizione aggiuntiva errata"
GROUP 1
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_USER 10 2
BEGIN
PROMPT -33 -1 "A~zzera"
MESSAGE RESET,1@
MESSAGE EXIT,K_ENTER
END
ENDPAGE
ENDMASK

BIN
src/cg01/cg06.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

404
src/cg01/cg0600.cpp Normal file
View File

@ -0,0 +1,404 @@
// --------------------------------------------------------------
// fv: cg0 -5 <tab>: gestione maschere contabilita'
// --------------------------------------------------------------
#include <saldi.h>
#include <sheet.h>
#include <tabapp.h>
#include "cgtbbnp.h"
#include "cgtbesc.h"
#include "cgtbnot.h"
#include "cgtbvet.h"
#include "cglib01.h"
#define TAB_NOTECLI "%NOT"
class CGTTable_application : public TTable_application
{
// ------------- specifiche tabella esercizi ----
static bool dataini_handler(TMask_field& f, KEY k);
static bool checkbut_handler(TMask_field& f, KEY k);
void check_sheet();
bool check_esercizio(TString& cod, TDate s1, TDate f1);
static bool desnot_handler(TMask_field& f, KEY k);
void fragment_string();
void glue_string();
// --------------------------------------------
protected:
virtual void init_query_insert_mode(TMask& m) ;
virtual void init_insert_mode(TMask& m) ;
virtual void init_modify_mode(TMask& m) ;
virtual void init_query_mode (TMask&);
virtual bool protected_record(TRectype & rec);
virtual bool user_create();
virtual bool user_destroy();
virtual int read(TMask& m);
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
static bool iban_handler(TMask_field& f, KEY k);
public:
// @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
virtual bool check_autorization() const
{return false;}
static CGTTable_application& app() { return (CGTTable_application&)main_app(); }
CGTTable_application() : TTable_application() {}
virtual ~CGTTable_application() {}
};
bool CGTTable_application::protected_record(TRectype &rec)
{
if (get_tabname() == "ESC")
{
// cerca saldo con questo esercizio
const TString16 cod(rec.get("CODTAB"));
TLocalisamfile saldi(LF_SALDI);
saldi.put(SLD_ANNOES, cod);
// se ce n'e' uno non si puo' cancellare
if (saldi.read(_isgteq) == NOERR && cod == rec.get("CODTAB"))
return TRUE;
}
return TTable_application::protected_record(rec);
}
void CGTTable_application::init_query_insert_mode(TMask& m)
{
if (get_tabname() == "BNP")
{
m.show(F_CODICEABI);
m.show(F_CODICECAB);
m.field(F_CODICEABI).check_type(CHECK_REQUIRED);
m.field(F_CODICECAB).check_type(CHECK_REQUIRED);
m.hide(F_ABI);
m.hide(F_CAB);
m.field(F_ABI).check_type(CHECK_NONE);
m.field(F_CAB).check_type(CHECK_NONE);
}
}
void CGTTable_application::init_insert_mode(TMask& m)
{
if (get_tabname() == "BNP")
{
m.show(F_CODICEABI);
m.show(F_CODICECAB);
m.field(F_CODICEABI).check_type(CHECK_REQUIRED);
m.field(F_CODICECAB).check_type(CHECK_REQUIRED);
m.hide(F_ABI);
m.hide(F_CAB);
m.field(F_ABI).check_type(CHECK_NONE);
m.field(F_CAB).check_type(CHECK_NONE);
}
}
void CGTTable_application::init_modify_mode(TMask& m)
{
if (get_tabname() == "BNP")
m.efield(F_IBAN_STATO).validate(K_TAB);
}
void CGTTable_application::init_query_mode(TMask& m)
{
TTable_application::init_query_mode(m);
if (get_tabname() == "BNP")
{
m.show(F_ABI);
m.show(F_CAB);
m.field(F_ABI).check_type(CHECK_REQUIRED);
m.field(F_CAB).check_type(CHECK_REQUIRED);
m.hide(F_CODICEABI);
m.hide(F_CODICECAB);
m.field(F_CODICECAB).check_type(CHECK_NONE);
}
}
bool CGTTable_application::iban_handler(TMask_field& f, KEY k)
{
if (f.initial_check(k))
{
const TString & iban = f.get();
set_iban_fields(iban, f.mask(), F_BBAN, F_IBAN_STATO, F_IBAN_CHECK, F_BBAN_CIN, F_BBAN_ABI, F_BBAN_CAB, F_BBAN_CONTO, 0, false);
}
return true;
}
bool CGTTable_application::user_create()
{
bool ok = TTable_application::user_create();
if (ok)
{
if (get_tabname() == "ESC")
{
get_mask(MODE_QUERY)->set_handler(F_DATAINI, dataini_handler);
get_mask(MODE_QUERY)->set_handler(BUT_CHECK, checkbut_handler);
}
if (get_tabname() == TAB_NOTECLI)
get_mask(MODE_QUERY)->set_handler(F_NOT_DESC, desnot_handler);
if (get_tabname() == "BNP")
get_mask(MODE_QUERY)->set_handler(F_IBAN, iban_handler);
}
return ok;
}
bool CGTTable_application::user_destroy()
{
return TTable_application::user_destroy();
}
int CGTTable_application::read(TMask& m)
{
int err = Tab_application::read(m);
const TString & table_name = get_tabname();
if (table_name == TAB_NOTECLI)
glue_string();
else if (table_name == "%VET" && err == NOERR)
{
// Il campo Albo è stato unito alla p.iva, verifico se vanno separati
// Il campo eori è diventato obbligatorio con le nuove modifiche
if(m.field(F_EORI).required() && m.get(F_EORI).empty())
{
// Prendo il vecchio campo dell'albo e metto in quello nuovo
TString piva = m.get(F_PAIV);
if(piva.len() > 11)
{
m.set(F_ALBO, piva.smid(12));
m.set(F_PAIV, piva.sleft(11));
}
}
}
return err;
}
int CGTTable_application::write(const TMask& m)
{
const TString & table_name = get_tabname();
if (table_name == TAB_NOTECLI)
fragment_string();
return Tab_application::write(m);
}
int CGTTable_application::rewrite(const TMask& m)
{
const TString & table_name = get_tabname();
if (table_name == TAB_NOTECLI)
fragment_string();
return Tab_application::rewrite(m);
}
// - note cliente-specific --------------------------------------------------------
//folle metodo per suddividere una stringa lunga in piu' stringhe corte da mettere nei campi
//stringa delle tabelle (per ora solo tabella %NOT)
void CGTTable_application::fragment_string()
{
TMask& mask = *get_mask(MODE_QUERY);
TString stringone = mask.get(F_NOT_DESC);
TRectype& rec = get_relation()->curr();
TString4 fieldname;
int tot_length = 0;
stringone.replace('\n', (char)0xB6);
for (int i = 0; i < 6; i++)
{
fieldname.format("S%d", i);
const int length = rec.length(fieldname);
const TString& pezzo = stringone.smid(tot_length, length);
rec.put(fieldname, pezzo);
tot_length += length;
}
}
void CGTTable_application::glue_string()
{
TMask& mask = *get_mask(MODE_QUERY);
TString stringone;
TRectype& rec = get_relation()->curr();
TString4 fieldname;
for (int i = 0; i < 6; i++)
{
fieldname.format("S%d", i);
stringone << rec.get(fieldname);
}
stringone.replace((char)0xB6, '\n');
mask.set(F_NOT_DESC, stringone);
}
bool CGTTable_application::desnot_handler(TMask_field& f, KEY k)
{
if (k == K_ENTER)
{
const TString& stringone = f.get();
if (stringone.len() > 320)
return f.error_box("La nota non puo' superare i 320 caratteri");
}
return true;
}
// - esercizi-specific --------------------------------------------------------
bool CGTTable_application::dataini_handler(TMask_field& f, KEY k)
{
if (k == K_ENTER && f.mask().is_running() && !f.mask().query_mode())
{
TString16 cod = f.mask().get(F_ANNO);
TDate s1 = f.mask().get_date(F_DATAINI);
TDate f1 = f.mask().get_date(F_DATAFIN);
return app().check_esercizio(cod, s1, f1);
}
return TRUE;
}
bool CGTTable_application::check_esercizio(TString& cod, TDate s1, TDate f1)
{
// -----------------------------------------------------------------------------------------
// chiamata prima di registrare. Controlla:
// - se non ci sono altri esercizi, ok;
// - se ce ne sono altri:
// 1) controllo non sovrapposizione date
// 2) se ci sono es. con date inferiori, datainizio -1 deve essere = data fine altro es;
// 3) se ci sono es. con date superiori, datafine +1 deve essere = data inizio altro
// ----------------------------------------------------------------------------------------
byte err = 0x00; bool ret = TRUE;
TLocalisamfile& esc = get_relation()->lfile();
bool basta1 = FALSE, basta2 = FALSE;
for (esc.first(); !esc.eof(); esc.next())
{
if (esc.get("CODTAB") == cod)
continue;
TDate s2 = esc.get_date("D0");
TDate f2 = esc.get_date("D1");
TDate s1d = s1; --s1d;
TDate s2d = s2; --s2d;
// check sovrapposizione
if (s1 <= f2 && s2 <= f1)
err |= 0x01;
else
{
if (!basta1 && f1 < s2 && f1 != s2d)
err |= 0x02;
if (f1 < s2 && f1 == s2d)
{
err &= ~0x02;
basta1 = TRUE;
}
if (!basta2 && s1 > f2 && f2 != s1d)
err |= 0x04;
if (s1 > f2 && f2 == s1d)
{
err &= ~0x04;
basta2 = TRUE;
}
}
}
if (err)
{
ret = FALSE;
TString errstr(120);
errstr << TR("Date esercizio errate: \n");
// build error string
if (err & 0x01)
errstr << TR("\n - l'esercizio si sovrappone ad altro gia' esistente");
if (err & 0x02)
errstr << TR("\n - l'esercizio non e' contiguo ad esercizi successivi");
if (err & 0x04)
errstr << TR("\n - l'esercizio non e' contiguo ad esercizi precedenti");
if (!(err & 0x01))
{
errstr << TR("\nSi desidera registrare ugualmente?");
ret = yesno_box(errstr);
}
else error_box(errstr);
}
return ret;
}
void CGTTable_application::check_sheet()
{
// crea 'nu bellu shit co'tutte le informazion e un messaggino
// di error se ce n'e' bisogn
TLocalisamfile& esc = get_relation()->lfile();
TArray escarr(10);
for (esc.first(); !esc.eof(); esc.next())
escarr.add(new TEsercizio(esc.curr()));
escarr.sort();
TArray_sheet as(-1,-1,70,20,TR("Esercizi contabili"),
FR("Codice|Inizio@10|Fine@10|Scarico@10|Chiusura@10|Note@20"),
0x10);
TDate s1;
for (int i = 0; i < escarr.items(); i++)
{
// sovrapposti non possono essere, perche' non si possono
// registrare; possono solo esserci discontinuita'
TEsercizio& e = (TEsercizio&)escarr[i];
TToken_string* tt = new TToken_string(80);
tt->add(e.codice());
tt->add(e.inizio().string());
tt->add(e.fine().string());
tt->add(e.scarico().string());
tt->add(e.chiusura().string());
if (i > 0 && e.inizio() != ++s1)
{
TString nc; nc << "***" << TR("non contiguo") << "***";
tt->add(nc);
}
else tt->add("");
s1 = e.fine();
as.add(tt);
}
as.run();
}
bool CGTTable_application::checkbut_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE && f.mask().is_running())
app().check_sheet();
return TRUE;
}
// -------------------------------------------------------------
int cg0600(int argc, char* argv[])
{
CGTTable_application a;
a.run(argc, argv, TR("Gestione tabelle contabili"));
return 0;
}

448
src/cg01/cg0700.cpp Normal file
View File

@ -0,0 +1,448 @@
#include <execp.h>
#include <progind.h>
#include <recarray.h>
#include <relapp.h>
#include "..\ve\velib.h"
#include "cg0.h"
#include "cg0700a.h"
#include "cg0700b.h"
#include <comuni.h>
#include <clifo.h>
#include <cfven.h>
#include "cfban.h"
#include <doc.h>
#include <occas.h>
#include <pconti.h>
#include <postman.h>
#include <saldi.h>
#include <automask.h>
#include <validate.h>
class TOccasionali_mask;
class TOccasionali_app : public TRelation_application
{
TOccasionali_mask * _msk;
TRelation * _rel;
bool user_create();
bool user_destroy();
virtual void init_query_mode(TMask&) override;
// @cmember Inizializza la maschera per il modo inserimento
virtual void init_insert_mode(TMask&) override;
// @cmember Inizializza la maschera per il modo modifica
virtual void init_modify_mode(TMask&) override;
virtual TMask* _get_mask(int mode) { return (TMask *) _msk; }
virtual bool changing_mask(int mode) { return false; }
virtual void ini2mask(TConfig& ini, TMask& m, bool query) override;
virtual void mask2ini(const TMask& m, TConfig& ini) override;
public:
// @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
virtual bool check_autorization() const { return false; }
virtual TRelation* get_relation() const { return _rel; }
};
HIDDEN inline TOccasionali_app& app() { return (TOccasionali_app&)main_app(); }
///////////////////////////////////////////////////////////
// TOccasionali_mask
///////////////////////////////////////////////////////////
class TOccasionali_mask : public TAutomask
{
long _codcf;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
void update_ban(const char * tipo, long codcf, const TRectype & recdoc);
void occ2clifor(const char * tipo);
long codice() const { return _codcf; }
TOccasionali_mask() : TAutomask("cg0700a"), _codcf(0L) { }
};
void TOccasionali_mask::update_ban(const char * tipo, long codcf, const TRectype & recdoc)
{
TString iban = recdoc.get(DOC_IBAN);
if (iban.full())
{
TToken_string key;
bool updated = false;
key.add(tipo);
key.add(codcf);
key.add(tipo == "C" ? "N" : "V");
TRecord_array vs_ban(key, LF_CFBAN);
const int vsrow = vs_ban.rows();
bool found = false;
for (int i = 1; !found && i <= vsrow; i++)
{
TRectype & ban = (TRectype &)vs_ban.row(i);
found = ban.get(CFBAN_IBAN) == recdoc.get(DOC_IBAN);
}
if (!found)
{
TRectype recban = vs_ban.key();
recban.put(CFBAN_ABI, recdoc.get(DOC_CODABIA));
recban.put(CFBAN_CAB, recdoc.get(DOC_CODCABA));
recban.put(CFBAN_NUMCC, recdoc.get(DOC_IBAN).smid(14));
recban.put(CFBAN_IBAN, recdoc.get(DOC_IBAN));
vs_ban.add_row(recban);
vs_ban.write(true);
}
}
TString abip = recdoc.get(DOC_CODABIP);
if (abip.full())
{
TToken_string key;
bool found = false;
key.add(tipo);
key.add(codcf);
key.add(tipo == "C" ? "V" : "N");
TRecord_array ns_ban(key, LF_CFBAN);
const int nsrow = ns_ban.rows();
for (int i = 1; !found && i < nsrow; i++)
{
TRectype & ban = (TRectype &) ns_ban.row(i);
found = ban.get(CFBAN_ABI) == recdoc.get(DOC_CODABIP) &&
ban.get(CFBAN_CAB) == recdoc.get(DOC_CODCABP) &&
ban.get(CFBAN_PROGPR) == recdoc.get(DOC_PROGBNP);
}
if (!found)
{
TRectype recban = ns_ban.key();
recban.put(CFBAN_ABI, recdoc.get(DOC_CODABIP));
recban.put(CFBAN_CAB, recdoc.get(DOC_CODCABP));
recban.put(CFBAN_PROGPR, recdoc.get(DOC_PROGBNP));
key = recdoc.get(DOC_CODABIP);
key << recdoc.get(DOC_CODCABP) << recdoc.get(DOC_PROGBNP);
const TRectype & banp = cache().get("BNP", key);
recban.put(CFBAN_NUMCC, banp.get("S3").smid(14));
recban.put(CFBAN_IBAN, banp.get("S3"));
ns_ban.add_row(recban);
ns_ban.write(true);
}
}
}
void TOccasionali_mask::occ2clifor(const char * tipo)
{
TToken_string key = tipo;
bool italian = get(O_STATOPAIV).blank();
bool found = false;
TString ragsoc;
_codcf = 0L;
if (get(O_PAIV).full())
{
key.add(get(O_STATOPAIV));
key.add(get(O_PAIV));
const TRectype & clifor = cache().get(LF_CLIFO, key, 5);
ragsoc = clifor.get(CLI_RAGSOC);
_codcf = clifor.get_long(CLI_CODCF);
found = clifor.full();
if (italian && !found)
{
key.add("IT", 1);
const TRectype & clifor = cache().get(LF_CLIFO, key, 5);
found = clifor.full();
ragsoc = clifor.get(CLI_RAGSOC);
_codcf = clifor.get_long(CLI_CODCF);
}
if (found)
{
TString message = tipo == "C" ? TR("Il cliente ") : TR("Il fornitore "); message << ragsoc << TR(" ha la stessa partita IVA, devo uilizzarlo");
found = yesno_box(message);
}
}
if (!found && get(O_COFI).full())
{
key = tipo;
key.add(get(O_COFI));
const TRectype & clifor = cache().get(LF_CLIFO, key, 4);
found = clifor.full();
_codcf = clifor.get_long(CLI_CODCF);
ragsoc = clifor.get(CLI_RAGSOC);
if (found)
{
TString message = tipo == "C" ? TR("Il cliente ") : TR("Il fornitore "); message << ragsoc << TR(" ha lo stesso codice fiscale, devo utilizzarlo");
found = yesno_box(message);
}
}
if (!found)
{
TFilename tmp; tmp.temp("occcf", "ini");
TTransaction t(tmp);
_codcf = 0L;
t.set_executer(LF_CLIFO);
t.set_firm(main_app().get_firm());
t.set_user();
t.set_hostname();
t.set_version();
t.set_mode(transaction_mode_automatic);
t.set_action(TRANSACTION_INSERT);
t.set(CLI_RAGSOC, get(O_RAGSOC), -1, LF_CLIFO);
t.set(CLI_STATOCF, get(O_STATO), -1, LF_CLIFO);
t.set(CLI_COMCF, get(O_COMUNE), -1, LF_CLIFO);
t.set(CLI_CAPCF, get(O_CAP), -1, LF_CLIFO);
t.set(CLI_INDCF, get(O_INDIRIZZO), -1, LF_CLIFO);
t.set(CLI_CIVCF, get(O_NUMERO), -1, LF_CLIFO);
t.set(CLI_COFI, get(O_COFI), -1, LF_CLIFO);
t.set(CLI_STATOPAIV, get(O_STATOPAIV), -1, LF_CLIFO);
t.set(CLI_PAIV, get(O_PAIV), -1, LF_CLIFO);
t.set(CLI_SESSO, get(O_SESSO), -1, LF_CLIFO);
t.set(CLI_DATANASC, get(O_DATANAS), -1, LF_CLIFO);
t.set(CLI_STATONASC, get(O_STATONAS), -1, LF_CLIFO);
t.set(CLI_COMNASC, get(O_COMUNENAS), -1, LF_CLIFO);
t.set(CLI_LOCCF, get(O_LOCALITA), -1, LF_CLIFO);
t.set(CLI_REFERENTE, get(O_REFERENTE), -1, LF_CLIFO);
t.set(CLI_BYMAIL, get(O_BYMAIL), -1, LF_CLIFO);
t.set(CLI_MAIL, get(O_MAIL), -1, LF_CLIFO);
t.set(CLI_DOCMAIL, get(O_DOCMAIL), -1, LF_CLIFO);
t.set(CLI_PEC, get(O_PEC), -1, LF_CLIFO);
t.set(CLI_PTEL, get(O_PTEL), -1, LF_CLIFO);
t.set(CLI_TEL, get(O_TEL), -1, LF_CLIFO);
t.set(CLI_PTEL2, get(O_PTEL2), -1, LF_CLIFO);
t.set(CLI_TEL2, get(O_TEL2), -1, LF_CLIFO);
t.set(CLI_PTEL3, get(O_PTEL3), -1, LF_CLIFO);
t.set(CLI_TEL3, get(O_TEL3), -1, LF_CLIFO);
t.set(CLI_TIPOPERS, get(O_TIPOPERS), -1, LF_CLIFO);
t.set(CLI_ALLEG, get(O_ALLEG), -1, LF_CLIFO);
t.set(CLI_PFAX, get(O_PFAX), -1, LF_CLIFO);
t.set(CLI_FAX, get(O_FAX), -1, LF_CLIFO);
t.set(CFV_PADESTIN, get(O_PADESTIN), -1, LF_CFVEN);
t.write();
if (t.execute())
{
t.read();
_codcf = t.get_long(CLI_CODCF, -1, LF_CLIFO);
}
tmp.fremove();
}
if (_codcf > 0L)
{
TMask m("cg0700b");
TDate from = today;
m.set(F_CODICE, get(O_CODICE));
m.set(F_CODCF, _codcf);
m.set(F_RAGSOC, ragsoc);
from.set_start_year();
m.set(F_FROM, from);
if (m.run() == K_ENTER)
{
TString query("USE ");
query << LF_DOC << " SELECT " << DOC_OCFPI << "==\"" << get(O_CODICE) << "\"\n";
query << "FROM " << DOC_ANNO << "=" << from.year();
TISAM_recordset clifor_recset(query);
const int items = clifor_recset.items();
clifor_recset.freeze();
if (items == 0)
message_box(TR("Nessun documento trovato"));
else
{
TProgress_monitor p(items, "Aggiornamento documenti");
const TRectype & recdoc = clifor_recset.curr();
for (clifor_recset.move_first(); p.addstatus() && !clifor_recset.eof(); clifor_recset.move_next())
{
TDocumento doc(recdoc);
doc.put(DOC_CODCF, _codcf);
doc.zero(DOC_OCFPI);
doc.zero(DOC_OCCAS);
doc.rewrite();
}
key = tipo;
key.add(_codcf);
TRectype & clifor = (TRectype &) cache().get(LF_CLIFO, key);
clifor_recset.move_last();
clifor.put(CLI_CODVAL, recdoc.get(DOC_CODVAL));
clifor.put(CLI_CODLIN, recdoc.get(DOC_CODLIN));
clifor.put(CLI_CODPAG, recdoc.get(DOC_CODPAG));
clifor.rewrite();
update_ban(tipo, _codcf, recdoc);
TRectype & cfven = (TRectype &)cache().get(LF_CFVEN, key);
cfven.put(CFV_CATVEN, recdoc.get(DOC_CATVEN));
cfven.put(CFV_CODLIST, recdoc.get(DOC_CODLIST));
cfven.put(CFV_CODZONA, recdoc.get(DOC_ZONA));
cfven.put(CFV_CODAG, recdoc.get(DOC_CODAG));
cfven.put(CFV_CODAG1, recdoc.get(DOC_CODAGVIS));
cfven.put(CFV_CODSPMEZZO, recdoc.get(DOC_CODSPMEZZO));
cfven.put(CFV_CODPORTO, recdoc.get(DOC_CODPORTO));
cfven.put(CFV_CODVETT1, recdoc.get(DOC_CODVETT1));
cfven.put(CFV_CODVETT2, recdoc.get(DOC_CODVETT2));
cfven.put(CFV_CODVETT3, recdoc.get(DOC_CODVETT3));
cfven.write_rewrite();
}
}
if (app().is_transaction())
stop_run(K_SAVE);
}
}
bool TOccasionali_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case O_COFI:
if (e == fe_modify)
{
TMask& m = o.mask();
TString16 cofi = m.get(O_COFI);
if (cofi.blank())
cofi = m.get(O_CODICE);
if (cf_check(m.get(O_STATONAS), cofi))
{
int giorno = atoi(cofi.smid(9,2));
m.set(O_SESSO, giorno > 40 ? "F" : "M");
if (m.field(O_COMUNENAS).empty())
m.set(O_COMUNENAS, cofi.smid(11,4), 0x2);
if (m.field(O_DATANAS).empty())
{
const TFixed_string mesi("ABCDEHLMPRST");
const int mese = mesi.find(cofi[8])+1;
int anno = atoi(cofi.smid(6,2));
if (giorno > 0 && mese > 0 && anno > 0)
{
giorno %= 40;
anno += anno < 5 ? 2000 : 1900;
m.set(O_DATANAS, TDate(giorno, mese, anno));
}
}
}
}
break;
case DLG_CLI:
if (e == fe_button)
occ2clifor("C");
break;
case DLG_FOR:
if (e == fe_button)
occ2clifor("F");
break;
default: break;
}
return true;
}
void TOccasionali_app::init_query_mode(TMask& m)
{
m.disable(DLG_CLI);
m.disable(DLG_FOR);
TRelation_application::init_query_mode(m);
}
void TOccasionali_app::init_insert_mode(TMask& m)
{
m.disable(DLG_CLI);
m.disable(DLG_FOR);
}
void TOccasionali_app::init_modify_mode(TMask& m)
{
m.enable(DLG_CLI);
m.enable(DLG_FOR);
}
bool TOccasionali_app::user_create()
{
open_files(LF_OCCAS, LF_CLIFO, LF_CFVEN, LF_DOC, LF_RIGHEDOC, LF_CFBAN, 0);
_rel = new TRelation(LF_OCCAS);
_msk = new TOccasionali_mask() ;
return true;
}
bool TOccasionali_app::user_destroy()
{
safe_delete(_rel);
safe_delete(_msk);
return true;
}
void TOccasionali_app::ini2mask(TConfig& ini, TMask& m, bool query)
{
message_box("stop");
TString istat = ini.get_int(COM_CODISTAT);
if (istat.full())
{
const TRectype & com = cache().get(LF_COMUNI, istat);
ini.set(OCC_STATO, com.get(COM_STATO));
ini.set(OCC_COM, com.get(COM_COM));
}
istat = ini.get_int("CODISTATNASC");
if (istat.full())
{
const TRectype & com = cache().get(LF_COMUNI, istat);
ini.set(OCC_STATONASC, com.get(COM_STATO));
ini.set(OCC_COMNASC, com.get(COM_COM));
}
TRelation_application::ini2mask(ini, m, query);
const TString4 tipo = ini.get(CLI_TIPOCF, TOSTRING(LF_CLIFO));
if (tipo == "F")
m.disable(DLG_CLI);
else
if (tipo == "C")
m.disable(DLG_FOR);
}
void TOccasionali_app::mask2ini(const TMask& m, TConfig& ini)
{
const long codice = _msk->codice();
TRelation_application::mask2ini(m, ini);
if (codice > 0L)
ini.set(CLI_CODCF, codice, TOSTRING(LF_CLIFO));
}
int cg0700(int argc, char* argv[])
{
TOccasionali_app a ;
a.run(argc, argv, TR("Clienti/Fornitori Occasionali"));
return 0;
}

40
src/cg01/cg0700a.h Normal file
View File

@ -0,0 +1,40 @@
// Maschera clienti/fornitori occasionali
#define O_CODICE 100
#define O_RAGSOC 101
#define O_STATO 102
#define O_COMUNE 103
#define O_DENCOM 104
#define O_CAP 105
#define O_INDIRIZZO 106
#define O_NUMERO 107
#define O_COFI 108
#define O_PAIV 109
#define O_SESSO 110
#define O_DATANAS 111
#define O_STATONAS 112
#define O_COMUNENAS 113
#define O_DENCOMNAS 114
#define O_LOCALITA 115
#define O_STATOPAIV 116
#define O_REFERENTE 117
#define O_BYMAIL 118
#define O_MAIL 119
#define O_DOCMAIL 120
#define O_PEC 121
#define O_PTEL 122
#define O_TEL 123
#define O_PTEL2 124
#define O_TEL2 125
#define O_PTEL3 126
#define O_TEL3 127
#define O_TIPOPERS 128
#define O_ALLEG 129
#define O_PADESTIN 130
#define O_PFAX 131
#define O_FAX 132
#define DLG_CLI 200
#define DLG_FOR 201
#include <occas.h>

365
src/cg01/cg0700a.uml Normal file
View File

@ -0,0 +1,365 @@
#include "cg0700a.h"
TOOLBAR "topbar" 0 0 0 2
#include <relapbar.h>
BUTTON DLG_CLI 2 2
BEGIN
PROMPT 13 1 "->~Cliente"
PICTURE TOOL_EDIT
END
BUTTON DLG_FOR 2 2
BEGIN
PROMPT 13 1 "->~Fornitore"
PICTURE TOOL_EDIT
END
ENDPAGE
PAGE "Clienti/Fornitori occasionali" 0 0 0 0
GROUPBOX DLG_NULL 71 5
BEGIN
PROMPT 1 0 ""
END
STRING O_CODICE 16
BEGIN
PROMPT 2 1 "Codice "
FLAGS "U"
USE LF_OCCAS
INPUT CFPI O_CODICE
DISPLAY "Codice@16" CFPI
DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT O_CODICE CFPI
OUTPUT O_RAGSOC RAGSOC
FIELD OCC_CFPI
VALIDATE NOT_EMPTY_FUNC
KEY 1
END
STRING O_RAGSOC 50
BEGIN
PROMPT 2 2 "Ragione sociale "
FIELD OCC_RAGSOC
USE LF_OCCAS KEY 2
INPUT RAGSOC O_RAGSOC
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice@16" CFPI
OUTPUT O_CODICE CFPI
OUTPUT O_RAGSOC RAGSOC
VALIDATE NOT_EMPTY_FUNC
KEY 2
END
STRING O_COFI 16
BEGIN
PROMPT 2 3 "Codice fiscale "
FIELD OCC_COFI
FLAGS "U"
VALIDATE XTZCF_FUNC O_STATONAS O_SESSO O_DATANAS O_COMUNENAS
END
STRING O_STATOPAIV 2
BEGIN
PROMPT 37 3 "Partita IVA "
FIELD OCC_STATOPAIV
HELP "Codice ISO dello stato"
FLAGS "U"
USE %SCE
INPUT CODTAB O_STATOPAIV
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT O_STATOPAIV CODTAB
//CHECKTYPE NORMAL
END
STRING O_PAIV 12
BEGIN
PROMPT 56 3 ""
FIELD OCC_PAIV
VALIDATE PI_FUNC O_STATOPAIV
END
GROUPBOX DLG_NULL 80 5
BEGIN
PROMPT 1 5 "@bDati residenza"
END
STRING O_INDIRIZZO 40
BEGIN
PROMPT 2 6 "Indirizzo "
FIELD OCC_INDIR
END
STRING O_NUMERO 6
BEGIN
PROMPT 55 6 "Numero "
FIELD OCC_CIV
END
STRING O_STATO 3
BEGIN
PROMPT 2 7 "Stato "
HELP "Stato di residenza della persona"
FIELD OCC_STATO
FLAGS "U"
USE %STA
INPUT CODTAB O_STATO
DISPLAY "Codice" CODTAB
DISPLAY "Denominazione@50" S0
OUTPUT O_STATO CODTAB
CHECKTYPE NORMAL
END
STRING O_COMUNE 4
BEGIN
PROMPT 15 7 "Comune "
FIELD OCC_COM
FLAGS "U"
USE LF_COMUNI
INPUT STATO O_STATO
INPUT COM O_COMUNE
DISPLAY "Stato" STATO
DISPLAY "Codice" COM
DISPLAY "Denominazione@50" DENCOM
OUTPUT O_STATO STATO
OUTPUT O_COMUNE COM
OUTPUT O_DENCOM DENCOM
OUTPUT O_CAP CAPCOM
CHECKTYPE NORMAL
ADD RUN ba4 -0
END
STRING O_DENCOM 50 45
BEGIN
PROMPT 30 7 ""
HELP "Nome del comune di residenza della persona"
USE LF_COMUNI KEY 2
INPUT STATO O_STATO
INPUT DENCOM O_DENCOM
DISPLAY "Denominazione@50" DENCOM
DISPLAY "Stato" STATO
DISPLAY "Codice@10" COM
COPY OUTPUT O_COMUNE
//CHECKTYPE NORMAL
ADD RUN ba4 -0
END
STRING O_LOCALITA 35
BEGIN
PROMPT 2 8 "Localita' "
FIELD OCC_LOCALITA
HELP "Localita' del recapito"
END
NUMBER O_CAP 5
BEGIN
PROMPT 56 8 "C.A.P. "
HELP "CAP della residenza della persona"
FIELD OCC_CAP
FLAGS "ZF"
END
GROUPBOX DLG_NULL 80 4
BEGIN
PROMPT 1 10 "@bDati nascita"
END
LIST O_SESSO 1 7
BEGIN
PROMPT 2 11 "Sesso "
ITEM "M|Maschio"
ITEM "F|Femmina"
FIELD OCC_SESSO
END
DATE O_DATANAS
BEGIN
PROMPT 23 11 "Data "
FIELD OCC_DNASC
END
STRING O_STATONAS 3
BEGIN
PROMPT 41 11 "Stato "
FIELD OCC_STATONASC
FLAGS "U"
COPY USE O_STATO
INPUT CODTAB O_STATONAS
COPY DISPLAY O_STATO
OUTPUT O_STATONAS CODTAB
//CHECKTYPE NORMAL
END
STRING O_COMUNENAS 4
BEGIN
PROMPT 57 11 "Comune "
FIELD OCC_COMNASC
FLAGS "U"
COPY USE O_COMUNE
INPUT STATO O_STATONAS
INPUT COM O_COMUNENAS
COPY DISPLAY O_COMUNE
OUTPUT O_COMUNENAS COM
OUTPUT O_DENCOMNAS DENCOM
CHECKTYPE NORMAL
END
STRING O_DENCOMNAS 50
BEGIN
PROMPT 2 12 "Denominazione "
COPY USE O_DENCOM
INPUT DENCOM O_DENCOMNAS
COPY DISPLAY O_DENCOM
COPY OUTPUT O_COMUNENAS
CHECKTYPE NORMAL
END
STRING O_REFERENTE 50
BEGIN
PROMPT 2 14 "Referente "
FIELD OCC_REFERENTE
END
LIST O_TIPOPERS 1 12
BEGIN
PROMPT 2 15 "Tipo persona "
FIELD OCC_TIPOPERS
HELP "Tipo anagrafico del cliente/fornitore"
ITEM "F|Fisica"
ITEM "G|Giuridica"
END
STRING O_ALLEG 1
BEGIN
PROMPT 30 15 "Tipo "
FIELD OCC_ALLEG
SHEET "Codice|Descrizione@50"
HELP "Codice per l'inserimento negli allegati IVA"
INPUT O_ALLEG
ITEM " |Valido per allegato IVA"
ITEM "1|Non valido per allegato IVA"
ITEM "2|Occasionale"
ITEM "3|Documenti riepilogativi"
ITEM "4|Codice fiscale già inserito"
ITEM "5|Estero CEE"
ITEM "6|Privato"
ITEM "7|Ente pubblico"
ITEM "8|Fallimento/proc.concorsuale"
ITEM "9|Estero NON CEE"
ITEM "C|Scheda carburante"
ITEM "G|Gruppo IVA"
OUTPUT O_ALLEG
END
STRING O_PADESTIN 7
BEGIN
PROMPT 40 15 "Destinatario "
MODULES PA,FP
HELP "Codice ufficio dell destinatario della fattura elettronica"
FIELD OCC_PADESTIN
END
STRING O_MAIL 50 25
BEGIN
PROMPT 2 16 "E-Mail Normale "
FIELD OCC_MAIL
END
BOOLEAN O_BYMAIL
BEGIN
PROMPT 47 16 "Consenso spedizione doc tramite email"
FIELD OCC_BYMAIL
MESSAGE FALSE CLEAR,O_DOCMAIL
MESSAGE TRUE ENABLE,O_DOCMAIL
END
STRING O_DOCMAIL 50 25
BEGIN
PROMPT 2 17 "E-Mail Documenti "
FIELD OCC_DOCMAIL
CHECKTYPE REQUIRED
END
STRING O_PEC 80 45
BEGIN
PROMPT 2 18 "Pec "
FIELD OCC_PEC
END
STRING O_PTEL 5
BEGIN
PROMPT 2 19 "Telefono "
FIELD OCC_PTEL
HELP "Prefisso telefonico primo recapito"
END
STRING O_TEL 20 15
BEGIN
PROMPT 18 19 "/"
FIELD OCC_TEL
HELP "Numero telefonico primo recapito"
END
STRING O_PTEL2 5
BEGIN
PROMPT 11 20 " "
FIELD OCC_PTEL2
HELP "Prefisso telefonico secondo recapito"
END
STRING O_TEL2 20 15
BEGIN
PROMPT 18 20 "/"
FIELD OCC_TEL2
HELP "Numero telefonico secondo recapito"
END
STRING O_PTEL3 5
BEGIN
PROMPT 11 21 " "
FIELD OCC_PTEL3
HELP "Prefisso telefonico terzo recapito"
END
STRING O_TEL3 20 15
BEGIN
PROMPT 18 21 "/"
FIELD OCC_TEL3
HELP "Numero telefonico terzo recapito"
END
STRING O_PFAX 5
BEGIN
PROMPT 2 22 "FAX "
FIELD OCC_PFAX
HELP "Prefisso telefonico fax"
END
STRING O_FAX 23 15
BEGIN
PROMPT 18 22 "/"
FIELD OCC_FAX
HELP "Numero telefonico fax"
END
STRING DLG_NULL 50 32
BEGIN
PROMPT 1 -1 "Ultimo aggiornamento "
FLAGS "D"
FIELD OCC_UTENTE
END
DATE DLG_NULL
BEGIN
PROMPT 60 -1 ""
FLAGS "D"
FIELD OCC_DATAAGG
END
ENDPAGE
ENDMASK

6
src/cg01/cg0700b.h Normal file
View File

@ -0,0 +1,6 @@
// Maschera clienti/fornitori occasionali
#define F_CODICE 100
#define F_CODCF 101
#define F_RAGSOC 102
#define F_FROM 103

42
src/cg01/cg0700b.uml Normal file
View File

@ -0,0 +1,42 @@
#include "cg0700b.h"
TOOLBAR "topbar" 0 0 0 2
#include <stdbar.h>
ENDPAGE
PAGE "Occasionale --> Cliente/Fornitore" -1 -1 76 9
STRING F_CODICE 16
BEGIN
PROMPT 2 1 "Occasionale "
FLAGS "D"
END
NUMBER F_CODCF 6 0
BEGIN
PROMPT 2 2 "Codice "
FLAGS "D"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 2 3 "Ragione sociale "
FLAGS "D"
END
GROUPBOX 300 71 3
BEGIN
PROMPT 1 4 "@BConverti documenti"
END
DATE F_FROM
BEGIN
PROMPT 2 5 "Dal "
CHECKTYPE REQUIRED
END
ENDPAGE
ENDMASK

194
src/cg01/cg0800.cpp Normal file
View File

@ -0,0 +1,194 @@
#include <applicat.h>
#include <automask.h>
#include <reprint.h>
#include <variant.h>
#include "cglib.h"
#include "cg0800a.h"
///////////////////////////////////////////////////////////
// TRiepilogoIVA_mask
///////////////////////////////////////////////////////////
class TRiepilogoIVA_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TRiepilogoIVA_mask() : TAutomask("cg0800a") { }
};
bool TRiepilogoIVA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
TRiepilogoIVA_mask & m = (TRiepilogoIVA_mask &) o.mask();
switch (o.dlg())
{
case F_DAMESE:
if (e == fe_modify || e == fe_close)
{
if (atoi(o.get()) > m.get_int(F_AMESE))
m.set(F_AMESE, o.get());
}
break;
case F_AMESE:
if (e == fe_modify || e == fe_close)
{
if (atoi(o.get()) < m.get_int(F_DAMESE))
o.set(m.get(F_DAMESE));
}
break;
default:
break;
}
return true;
}
///////////////////////////////////////////////////////////
// TRiepilogoIVA_app
///////////////////////////////////////////////////////////
class TRiepilogoIVA_app : public TSkeleton_application
{
protected:
void execute_print(TAutomask & m, TReport & rep, KEY k);
virtual void main_loop();
};
void TRiepilogoIVA_app::execute_print(TAutomask & m, TReport & rep, KEY k)
{
TReport_book b;
export_type type = _export_printer;
switch (k)
{
case K_ENTER:
case K_PRINT:
type = _export_printer;
break;
case K_EXCEL:
type = _export_excel;
break;
case K_EXPORT:
type = _export_generic;
break;
case K_PDF:
type = _export_pdf;
break;
case K_TEXT:
type = _export_text;
break;
break;
case K_VISUALIZE:
type = _export_visualize;
break;
default:
type = _export_user;
break;
}
TFilename name = m.get(DLG_OUTPUTD);
TString fname = m.get(DLG_OUTPUTF);
if (name.blank())
name.tempdir();
if (!dexist(name))
if (!make_dir(name))
{
error_box(FR("Non posso creare %s uso il direttorio temporaneo"), (const char *)name);
name.cut(0);
name.tempdir();
}
if (fname.blank())
{
TString t(20);
fname = "cg0800";
_strtime_s(t.get_buffer(), t.size());
t.strip(":");
fname << '_' << today.date2ansi() << '_' << t;
}
name.add(fname);
rep.set_export_sections(type);
b.add(rep, type);
switch (type)
{
case _export_printer:
b.print_or_preview();
break;
case _export_generic:
b.esporta();
break;
case _export_excel:
b.export_excel(name, false, true, false, '\t');
break;
case _export_pdf:
b.export_pdf(name, false, true);
break;
case _export_text:
b.export_text(name, 0, false, true);
break;
case _export_visualize:
b.preview();
break;
default:
break;
}
}
void TRiepilogoIVA_app::main_loop()
{
TRiepilogoIVA_mask m;
KEY k;
while ((k = m.run()) != K_QUIT)
{
TRiepilogoIVA_report rep;
TFilename repname = m.get(DLG_REPORT);
TRiepilogoIVA_recordset * recset = new TRiepilogoIVA_recordset;
if (repname.blank())
repname = "cg0800a";
rep.load(repname);
if (recset != nullptr)
{
int anno = m.get_int(F_ANNO);
int damese = m.get_int(F_DAMESE);
int amese = m.get_int(F_AMESE);
recset->freeze();
recset->set_anno(anno);
if (damese == 13)
{
damese = 1;
amese = 12;
recset->set_annual(true);
}
recset->set_da_mese(damese);
recset->set_a_mese(amese);
const TDate da(1, damese, anno);
TDate a(1, amese, anno);
rep.set_report_month(amese, anno);
if (m.get_long(F_DAMESE) == 13)
a.addyear();
a.set_end_month();
recset->set_from(da);
recset->set_to(a);
rep.set_recordset(recset);
execute_print(m, rep, k);
}
}
}
int cg0800(int argc, char* argv[])
{
TRiepilogoIVA_app app;
app.run(argc, argv, TR("Stampa progressivi IVA avanzata"));
return 0;
}

5
src/cg01/cg0800a.h Normal file
View File

@ -0,0 +1,5 @@
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_ANNO 103
#define F_DAMESE 104
#define F_AMESE 105

157
src/cg01/cg0800a.rep Normal file
View File

@ -0,0 +1,157 @@
<?xml version="1.0" encoding="UTF-8" ?>
<report libraries="" page_merge="" save_printer="" name="cg0800a" use_printer_font="" orientation="2" page_split="" lpi="6" command="cg0 -7" class="cg0800a">
<description>Riepilogo progressivi IVA</description>
<font face="Arial" size="7" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="" hidden="" page_break="" can_break="" pattern="1">
<field x="4" deactivated="" type="Data" hidden="" link="" dynamic_height="" shade_offset="" width="10" codval="" id="" pattern="1" hide_zero="" text="">
<source>#SYSTEM.DATE</source>
</field>
<field x="48.5" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="1" hide_zero="" text="Ditta">
<source>#SYSTEM.RAGSOC</source>
</field>
<field x="51.5" deactivated="" type="Stringa" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="50" codval="" id="" pattern="1" hide_zero="" text="">
<source>#SYSTEM.RAGSOC</source>
</field>
<field x="154" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="1" hide_zero="" text="Pag.">
<source>#PAGE</source>
</field>
<field x="158.5" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="5" codval="" id="" pattern="1" hide_zero="" text="">
<source>#PAGE</source>
</field>
<field x="33.5" y="1" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="25" codval="" id="" pattern="1" hide_zero="" text="Progressivi IVA">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="59.5" y="1" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="6" codval="" id="" pattern="1" hide_zero="" text="">
<font face="Courier New" bold="1" size="10" />
<source>#ANNO</source>
</field>
<field x="69.5" y="1" deactivated="" type="Array" hidden="" link="" dynamic_height="" shade_offset="" width="16" codval="" id="" pattern="1" hide_zero="" text="">
<font face="Courier New" bold="1" size="10" />
<source>#DAMESE</source>
<list>
<li Value="da gennaio" Code="1" />
<li Value="da febbraio" Code="2" />
<li Value="da marzo" Code="3" />
<li Value="da aprile" Code="4" />
<li Value="da maggio" Code="5" />
<li Value="da giugno" Code="6" />
<li Value="da luglio" Code="7" />
<li Value="da agosto" Code="8" />
<li Value="da settembre" Code="9" />
<li Value="da ottobre" Code="10" />
<li Value="da novembre" Code="11" />
<li Value="da dicembre" Code="12" />
<li Value="annuale" Code="13" />
</list>
</field>
<field x="86.5" y="1" deactivated="" type="Array" hidden="" link="" dynamic_height="" shade_offset="" width="16" codval="" id="" pattern="1" hide_zero="" text="">
<font face="Courier New" bold="1" size="10" />
<source>#AMESE</source>
<list>
<li Value="a gennaio" Code="1" />
<li Value="a febbraio" Code="2" />
<li Value="a marzo" Code="3" />
<li Value="ad aprile" Code="4" />
<li Value="a maggio" Code="5" />
<li Value="a giugno" Code="6" />
<li Value="a luglio" Code="7" />
<li Value="ad agosto" Code="8" />
<li Value="a settembre" Code="9" />
<li Value="a ottobre" Code="10" />
<li Value="a novembre" Code="11" />
<li Value="a dicembre" Code="12" />
<li Value="" Code="13" />
</list>
</field>
<field x="63.5" y="2.25" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="10" codval="" id="" pattern="1" hide_zero="" text="Vendite">
<font face="Arial" size="10" />
</field>
<field x="87.5" y="2.25" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="18" codval="" id="" pattern="1" hide_zero="" text="Corrispettivi">
<font face="Arial" size="10" />
</field>
<field x="119.5" y="2.25" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="12" codval="" id="" pattern="1" hide_zero="" text="Acquisti">
<font face="Courier New" size="10" />
</field>
<field x="141.5" y="2.25" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="20" codval="" id="" pattern="1" hide_zero="" text="Acquisti indetraibili">
<font face="Arial" size="10" />
</field>
<field x="53.5" y="3" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="30" codval="" id="" pattern="1" hide_zero="" text=" Imponibile Imposta">
<font face="Arial" size="10" />
</field>
<field x="81.5" y="3" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="30" codval="" id="" pattern="1" hide_zero="" text=" Imponibile Imposta">
<font face="Arial" size="10" />
</field>
<field x="110" y="3" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="30" codval="" id="" pattern="1" hide_zero="" text=" Imponibile Imposta">
<font face="Arial" size="10" />
</field>
<field x="138.5" y="3" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="25" codval="" id="" pattern="1" hide_zero="" text=" Imponibile Imposta">
<font face="Arial" size="10" />
</field>
<field border="2" y="4.75" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="165" codval="" height="0" id="" pattern="1" hide_zero="" text="" />
</section>
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="1" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="1" hidden="" page_break="" can_break="" pattern="1">
<field x="4" deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="1" hide_zero="" text="">
<source>COD</source>
</field>
<field x="9" deactivated="" type="Stringa" hidden="" link="" dynamic_height="1" shade_offset="" width="45" codval="" height="2" id="" pattern="1" hide_zero="" text="">
<source>DESC</source>
</field>
<field x="55" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IMPVEN</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F1.102 +!</postscript>
</field>
<field x="68.5" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IVAVEN</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F1.103 +!</postscript>
</field>
<field x="82" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IMPCORR</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F1.104 +!</postscript>
</field>
<field x="95.5" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IVACORR</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F1.105 +!</postscript>
</field>
<field x="109" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IMPACQ</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F1.106 +!</postscript>
</field>
<field x="122.5" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IVAACQ</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F1.107 +!</postscript>
</field>
<field x="136" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IMPACQIND</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F1.108 +!</postscript>
</field>
<field x="149.5" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IVAACQIND</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F1.109 +!</postscript>
</field>
</section>
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Foot" level="" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Foot" level="1" hidden="" page_break="" can_break="" pattern="1">
<field border="2" y="0.5" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="165" codval="" height="0" id="" pattern="1" hide_zero="" text="" />
<field x="9" y="1" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="20" codval="" height="2" id="101" pattern="1" hide_zero="" text="Totale">
<source>DESC</source>
</field>
<field x="55" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="102" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="68.5" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="103" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="82" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="104" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="95.5" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="105" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="109" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="106" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="122.5" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="107" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="136.5" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="108" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="149.5" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="109" pattern="1" hide_zero="1" text="###.###.###,@@" />
</section>
</report>

66
src/cg01/cg0800a.uml Normal file
View File

@ -0,0 +1,66 @@
#include "cg0800a.h"
#define EXPORT_EXCEL
#define EXPORT_PDF
#define EXPORT_TEXT
#define REPORT
#define CLASS_NAME "cg0800a"
TOOLBAR "topbar" 0 0 0 2
#include <aprintbar.h>
ENDPAGE
TOOLBAR "bottombar" 0 -3 0 1
#include <bprintbar.h>
ENDPAGE
PAGE "Stampa Riepilogo IVA" -1 -1 62 5
GROUPBOX DLG_NULL 74 3
BEGIN
PROMPT 1 0 ""
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Ditta "
FLAGS "FRD"
USE LF_NDITTE KEY 1
INPUT CODDITTA F_CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50
BEGIN
PROMPT 15 1 "Ragione "
FLAGS "D"
END
NUMBER F_ANNO 4
BEGIN
PROMPT 2 3 "Anno "
FLAGS "AP"
CHECKTYPE REQUIRED
END
LIST F_DAMESE 20
BEGIN
PROMPT 2 5 "Da mese "
ITEM "13|13a liquid."
FLAGS "MP"
MESSAGE COPY,F_AMESE
END
LIST F_AMESE 20
BEGIN
PROMPT 35 5 " A mese "
ITEM "13|13a liquid."
FLAGS "MP"
WARINIG "Il mese di inizio non può essere successico al mese di fine"
VALIDATE F_DAMESE<=F_AMESE
END
ENDPAGE
ENDMASK

211
src/cg01/cg0900.cpp Normal file
View File

@ -0,0 +1,211 @@
#include <applicat.h>
#include <automask.h>
#include <reprint.h>
#include <variant.h>
#include "cglib.h"
#include "cg0900a.h"
///////////////////////////////////////////////////////////
// TRiepilogoIVAatt_mask
///////////////////////////////////////////////////////////
class TRiepilogoIVAatt_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TRiepilogoIVAatt_mask() : TAutomask("cg0900a") { }
};
bool TRiepilogoIVAatt_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
TRiepilogoIVAatt_mask & m = (TRiepilogoIVAatt_mask &) o.mask();
switch (o.dlg())
{
case F_DAMESE:
if (e == fe_modify || e == fe_close)
{
if (atoi(o.get()) > m.get_int(F_AMESE))
m.set(F_AMESE, o.get());
}
break;
case F_AMESE:
if (e == fe_modify || e == fe_close)
{
if (atoi(o.get()) < m.get_int(F_DAMESE))
o.set(m.get(F_DAMESE));
}
break;
default:
break;
}
return true;
}
///////////////////////////////////////////////////////////
// TRiepilogoIVAatt_app
///////////////////////////////////////////////////////////
class TRiepilogoIVAatt_app : public TSkeleton_application
{
protected:
void execute_print(TAutomask & m, TReport & rep, KEY k);
virtual void main_loop();
};
void TRiepilogoIVAatt_app::execute_print(TAutomask & m, TReport & rep, KEY k)
{
TReport_book b;
export_type type = _export_printer;
switch (k)
{
case K_ENTER:
case K_PRINT:
type = _export_printer;
break;
case K_EXCEL:
type = _export_excel;
rep.section('B', 1).find_field(90)->show(true);
break;
case K_EXPORT:
type = _export_generic;
break;
case K_PDF:
type = _export_pdf;
break;
case K_TEXT:
type = _export_text;
break;
break;
case K_VISUALIZE:
type = _export_visualize;
break;
default:
type = _export_user;
break;
}
TFilename name = m.get(DLG_OUTPUTD);
TString fname = m.get(DLG_OUTPUTF);
if (name.blank())
name.tempdir();
if (!dexist(name))
if (!make_dir(name))
{
error_box(FR("Non posso creare %s uso il direttorio temporaneo"), (const char *)name);
name.cut(0);
name.tempdir();
}
if (fname.blank())
{
TString t(20);
fname = "cg0800";
_strtime_s(t.get_buffer(), t.size());
t.strip(":");
fname << '_' << today.date2ansi() << '_' << t;
}
name.add(fname);
rep.set_report_month(m.get_int(F_AMESE), m.get_int(F_ANNO));
rep.set_export_sections(type);
b.add(rep, type);
switch (type)
{
case _export_printer:
b.print_or_preview();
break;
case _export_generic:
b.esporta();
break;
case _export_excel:
b.export_excel(name, false, true, false, '\t');
break;
case _export_pdf:
b.export_pdf(name, false, true);
break;
case _export_text:
b.export_text(name, 0, false, true);
break;
case _export_visualize:
b.preview();
break;
default:
break;
}
}
void TRiepilogoIVAatt_app::main_loop()
{
TRiepilogoIVAatt_mask m;
KEY k;
while ((k = m.run()) != K_QUIT)
{
TRiepilogoIVA_report rep;
TFilename repname = m.get(DLG_REPORT);
TRiepilogoIVAatt_recordset * recset = new TRiepilogoIVAatt_recordset;
if (repname.blank())
repname = "cg0900a";
rep.load(repname);
if (recset != nullptr)
{
int anno = m.get_int(F_ANNO);
int damese = m.get_int(F_DAMESE);
int amese = m.get_int(F_AMESE);
recset->freeze();
recset->set_anno(anno);
if (damese == 13)
{
damese = 1;
amese = 12;
recset->set_annual(true);
}
recset->set_da_mese(damese);
recset->set_a_mese(amese);
const TDate da(1, damese, anno);
TDate a(1, amese, anno);
if (m.get_long(F_DAMESE) == 13)
a.addyear();
a.set_end_month();
recset->set_from(da);
recset->set_to(a);
const TString & codatt = m.get(F_CODATT);
recset->set_codatt(codatt);
rep.set_recordset(recset);
if (codatt.full())
{
TReport_section * f1 = rep.find_section('F', 1);
if (f1 != nullptr)
{
const int fields = f1->items();
for (int i = 0; i < fields; i++)
f1->field(i).hide();
}
}
execute_print(m, rep, k);
}
}
}
int cg0900(int argc, char* argv[])
{
TRiepilogoIVAatt_app app;
app.run(argc, argv, TR("Stampa progressivi IVA avanzata per attività"));
return 0;
}

7
src/cg01/cg0900a.h Normal file
View File

@ -0,0 +1,7 @@
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_ANNO 103
#define F_DAMESE 104
#define F_AMESE 105
#define F_CODATT 106
#define F_DESATT 107

217
src/cg01/cg0900a.rep Normal file
View File

@ -0,0 +1,217 @@
<?xml version="1.0" encoding="UTF-8" ?>
<report libraries="" page_merge="" save_printer="" name="cg0900a" use_printer_font="" orientation="2" page_split="1" lpi="6" command="cg0 -8" class="cg0900a">
<description>Riepilogo progressivi IVA per attivita'</description>
<font face="Arial" size="7" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="" hidden="" page_break="" can_break="" pattern="1">
<field x="4" deactivated="" type="Data" hidden="" link="" dynamic_height="" shade_offset="" width="10" codval="" id="" pattern="1" hide_zero="" text="">
<source>#SYSTEM.DATE</source>
</field>
<field x="48.5" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="1" hide_zero="" text="Ditta">
<source>#SYSTEM.RAGSOC</source>
</field>
<field x="54.5" deactivated="" type="Stringa" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="50" codval="" id="" pattern="1" hide_zero="" text="">
<source>#SYSTEM.RAGSOC</source>
</field>
<field x="154" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="1" hide_zero="" text="Pag.">
<source>#PAGE</source>
</field>
<field x="158.5" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="5" codval="" id="" pattern="1" hide_zero="" text="">
<source>#PAGE</source>
</field>
<field x="33.5" y="1" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="25" codval="" id="" pattern="1" hide_zero="" text="Progressivi IVA per registro">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="59.5" y="1" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="6" codval="" id="" pattern="1" hide_zero="" text="">
<font face="Courier New" bold="1" size="10" />
<source>#ANNO</source>
</field>
<field x="69.5" y="1" deactivated="" type="Array" hidden="" link="" dynamic_height="" shade_offset="" width="16" codval="" id="" pattern="1" hide_zero="" text="">
<font face="Courier New" bold="1" size="10" />
<source>#DAMESE</source>
<list>
<li Value="da gennaio" Code="1" />
<li Value="da febbraio" Code="2" />
<li Value="da marzo" Code="3" />
<li Value="da aprile" Code="4" />
<li Value="da maggio" Code="5" />
<li Value="da giugno" Code="6" />
<li Value="da luglio" Code="7" />
<li Value="da agosto" Code="8" />
<li Value="da settembre" Code="9" />
<li Value="da ottobre" Code="10" />
<li Value="da novembre" Code="11" />
<li Value="da dicembre" Code="12" />
<li Value="annuale" Code="13" />
</list>
</field>
<field x="86.5" y="1" deactivated="" type="Array" hidden="" link="" dynamic_height="" shade_offset="" width="16" codval="" id="" pattern="1" hide_zero="" text="">
<font face="Courier New" bold="1" size="10" />
<source>#AMESE</source>
<list>
<li Value="a gennaio" Code="1" />
<li Value="a febbraio" Code="2" />
<li Value="a marzo" Code="3" />
<li Value="ad aprile" Code="4" />
<li Value="a maggio" Code="5" />
<li Value="a giugno" Code="6" />
<li Value="a luglio" Code="7" />
<li Value="ad agosto" Code="8" />
<li Value="a settembre" Code="9" />
<li Value="a ottobre" Code="10" />
<li Value="a novembre" Code="11" />
<li Value="a dicembre" Code="12" />
<li Value="" Code="13" />
</list>
</field>
<field x="105" y="1" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="28" codval="" id="" pattern="1" hide_zero="" text="per attivit&#E0;">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="63.5" y="2.25" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="10" codval="" id="" pattern="1" hide_zero="" text="Vendite">
<font face="Arial" size="10" />
</field>
<field x="87.5" y="2.25" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="18" codval="" id="" pattern="1" hide_zero="" text="Corrispettivi">
<font face="Arial" size="10" />
</field>
<field x="119.5" y="2.25" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="12" codval="" id="" pattern="1" hide_zero="" text="Acquisti">
<font face="Courier New" size="10" />
</field>
<field x="141.5" y="2.25" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="20" codval="" id="" pattern="1" hide_zero="" text="Acquisti indetraibili">
<font face="Arial" size="10" />
</field>
<field x="53.5" y="3" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="30" codval="" id="" pattern="1" hide_zero="" text=" Imponibile Imposta">
<font face="Arial" size="10" />
</field>
<field x="81.5" y="3" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="30" codval="" id="" pattern="1" hide_zero="" text=" Imponibile Imposta">
<font face="Arial" size="10" />
</field>
<field x="110" y="3" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="30" codval="" id="" pattern="1" hide_zero="" text=" Imponibile Imposta">
<font face="Arial" size="10" />
</field>
<field x="138.5" y="3" deactivated="" type="Testo" hidden="" align="center" link="" dynamic_height="" shade_offset="" width="25" codval="" id="" pattern="1" hide_zero="" text=" Imponibile Imposta">
<font face="Arial" size="10" />
</field>
<field border="2" y="4.75" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="165" codval="" height="0" id="" pattern="1" hide_zero="" text="" />
</section>
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="1" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="2" hidden="" page_break="" can_break="" pattern="1">
<groupby>COD[1,5]</groupby>
<field deactivated="" type="Numero" hidden="1" align="right" link="" dynamic_height="" shade_offset="" width="6" codval="" id="99" pattern="1" hide_zero="" text="">
<source>#SYSTEM.FIRM</source>
</field>
<field x="14" deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="6" codval="" id="100" pattern="1" hide_zero="" text="">
<source>COD[1,5]</source>
<postscript description="H2.100 POSTSCRIPT">MESSAGE COPY,F2.100</postscript>
</field>
<field x="21" deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="50" codval="" id="101" pattern="1" hide_zero="" text="">
<prescript description="H2.101 PRESCRIPT">MESSAGE ISAMREAD,10,CODDITTA=#99!CODATT=#100,DESCR</prescript>
<postscript description="H2.101 POSTSCRIPT">MESSAGE COPY,F2.101</postscript>
</field>
</section>
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="1" hidden="" page_break="" can_break="" pattern="1">
<field x="4" deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="1" hide_zero="" text="">
<source>COD[6,9]</source>
</field>
<field x="9" deactivated="" type="Stringa" hidden="" link="" dynamic_height="1" shade_offset="" width="45" codval="" height="2" id="" pattern="1" hide_zero="" text="">
<source>DESC</source>
</field>
<field x="55" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IMPVEN</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F2.102 +!</postscript>
</field>
<field x="68.5" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IVAVEN</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F2.103 +!</postscript>
</field>
<field x="82" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IMPCORR</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F2.104 +!</postscript>
</field>
<field x="95.5" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IVACORR</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F2.105 +!</postscript>
</field>
<field x="109.5" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IMPACQ</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F2.106 +!</postscript>
</field>
<field x="123" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IVAACQ</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F2.107 +!</postscript>
</field>
<field x="137" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IMPACQIND</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F2.108 +!</postscript>
</field>
<field x="150.5" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="" pattern="1" hide_zero="1" text="###.###.###,@@">
<source>IVAACQIND</source>
<postscript description="B1.0 POSTSCRIPT">#THIS @
#F2.109 +!</postscript>
</field>
<field deactivated="" type="Stringa" hidden="1" link="" dynamic_height="" shade_offset="" width="5" codval="" id="90" pattern="1" hide_zero="" text="">
<source>COD[1,5]</source>
</field>
</section>
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Foot" level="" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Foot" level="1" hidden="" page_break="" can_break="" pattern="1">
<field border="2" y="0.5" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="165" codval="" height="0" id="" pattern="1" hide_zero="" text="" />
<field x="9" y="1" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="20" codval="" height="2" id="101" pattern="1" hide_zero="" text="Totale">
<source>DESC</source>
</field>
<field x="55" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="102" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="68.5" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="103" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="82.5" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="104" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="96" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="105" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="110" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="106" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="123.5" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="107" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="137" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="108" pattern="1" hide_zero="1" text="###.###.###,@@" />
<field x="151.5" y="1" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="109" pattern="1" hide_zero="1" text="###.###.###,@@" />
</section>
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Foot" level="2" hidden="" height="4" page_break="" can_break="" pattern="1">
<field border="2" y="0.25" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="165" codval="" height="0" id="" pattern="1" hide_zero="" text="" />
<field x="14" y="0.75" deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="6" codval="" id="100" pattern="1" hide_zero="" text="" />
<field x="9" y="0.75" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="6" codval="" id="101" pattern="1" hide_zero="" text="Totale">
<source>DESC</source>
</field>
<field x="21" y="0.75" deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="33" codval="" height="2" id="101" pattern="1" hide_zero="" text="" />
<field x="55" y="0.75" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="102" pattern="1" hide_zero="1" text="###.###.###,@@">
<postscript description="F2.102 POSTSCRIPT">#THIS @
#F1.102 +!</postscript>
</field>
<field x="68.5" y="0.75" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="103" pattern="1" hide_zero="1" text="###.###.###,@@">
<postscript description="F2.103 POSTSCRIPT">#THIS @
#F1.103 +!</postscript>
</field>
<field x="82.5" y="0.75" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="104" pattern="1" hide_zero="1" text="###.###.###,@@">
<postscript description="F2.104 POSTSCRIPT">#THIS @
#F1.104 +!</postscript>
</field>
<field x="96" y="0.75" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="105" pattern="1" hide_zero="1" text="###.###.###,@@">
<postscript description="F2.105 POSTSCRIPT">#THIS @
#F1.105 +!</postscript>
</field>
<field x="110" y="0.75" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="106" pattern="1" hide_zero="1" text="###.###.###,@@">
<postscript description="F2.106 POSTSCRIPT">#THIS @
#F1.106 +!</postscript>
</field>
<field x="123.5" y="0.75" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="107" pattern="1" hide_zero="1" text="###.###.###,@@">
<postscript description="F2.107 POSTSCRIPT">#THIS @
#F1.107 +!</postscript>
</field>
<field x="137" y="0.75" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="108" pattern="1" hide_zero="1" text="###.###.###,@@">
<postscript description="F2.108 POSTSCRIPT">#THIS @
#F1.108 +!</postscript>
</field>
<field x="151.5" y="0.75" deactivated="" type="Valuta" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="13" codval="" id="109" pattern="1" hide_zero="1" text="###.###.###,@@">
<postscript description="F2.109 POSTSCRIPT">#THIS @
#F1.109 +!</postscript>
</field>
</section>
</report>

95
src/cg01/cg0900a.uml Normal file
View File

@ -0,0 +1,95 @@
#include "cg0900a.h"
#define EXPORT_EXCEL
#define EXPORT_PDF
#define EXPORT_TEXT
#define REPORT
#define CLASS_NAME "cg0900a"
TOOLBAR "topbar" 0 0 0 2
#include <aprintbar.h>
ENDPAGE
TOOLBAR "bottombar" 0 -3 0 1
#include <bprintbar.h>
ENDPAGE
PAGE "Stampa Riepilogo IVA per attività" -1 -1 62 5
GROUPBOX DLG_NULL 74 3
BEGIN
PROMPT 1 0 ""
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Ditta "
FLAGS "FRD"
USE LF_NDITTE KEY 1
INPUT CODDITTA F_CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50
BEGIN
PROMPT 15 1 "Ragione "
FLAGS "D"
END
NUMBER F_ANNO 4
BEGIN
PROMPT 2 3 "Anno "
FLAGS "AP"
CHECKTYPE REQUIRED
END
LIST F_DAMESE 20
BEGIN
PROMPT 2 5 "Da mese "
ITEM "13|13a liquid."
FLAGS "MP"
MESSAGE COPY,F_AMESE
END
LIST F_AMESE 20
BEGIN
PROMPT 35 5 " A mese "
ITEM "13|13a liquid."
FLAGS "MP"
WARINIG "Il mese di inizio non può essere successico al mese di fine"
VALIDATE F_DAMESE<=F_AMESE
END
STRING F_CODATT 5
BEGIN
PROMPT 2 7 "Codice Attivita'"
FLAGS "UZ"
USE LF_ATTIV KEY 1
INPUT CODDITTA F_CODDITTA SELECT
INPUT CODATT F_CODATT
DISPLAY "Attivita'" CODATT
DISPLAY "Prevalente" ATTPREV
DISPLAY " @50" DESCR
OUTPUT F_CODATT CODATT
OUTPUT F_DESATT DESCR
WARNING "Attivita' assente"
CHECKTYPE NORMAL
END
STRING F_DESATT 50
BEGIN
PROMPT 2 9 "Codice Attivita'"
FLAGS "UZ"
USE LF_ATTIV KEY 2
INPUT CODDITTA F_CODDITTA SELECT
INPUT DESCR F_DESATT
DISPLAY " @50" DESCR
DISPLAY "Attivita'" CODATT
DISPLAY "Prevalente" ATTPREV
COPY OUTPUT F_CODATT
WARNING "Attivita' assente"
CHECKTYPE NORMAL
END
ENDMASK

21
src/cg01/cg1.cpp Normal file
View File

@ -0,0 +1,21 @@
#include <xvt.h>
#include "cg1.h"
int main(int argc,char** argv)
{
const int n = argc > 1 ? argv[1][1]-'0' : 0;
switch(n)
{
case 1: cg1200(argc,argv); break; // Stampa clienti/fornitori
case 2: cg1300(argc,argv); break; // Aggiornamenti
case 3: cg1400(argc,argv); break; // Stampa deleghe iva
case 4: cg1500(argc,argv); break; // Stampa bilanci
case 5: cg1600(argc,argv); break; // Stampa bilancio IV direttiva
case 6: cg1700(argc,argv); break; // Stampa causali
default: cg1100(argc,argv); break; // Stampa Piano dei conti
}
return 0;
}

19
src/cg01/cg1.h Normal file
View File

@ -0,0 +1,19 @@
#ifndef __CG1_H
#define __CG1_H
int cg1100(int argc, char* argv[]);
int cg1200(int argc, char* argv[]);
int cg1300(int argc, char* argv[]);
int cg1400(int argc, char* argv[]);
int cg1500(int argc, char* argv[]);
int cg1600(int argc, char* argv[]);
int cg1700(int argc, char* argv[]);
//int cg1800(int argc, char* argv[]);
#endif // __CG1_H

1201
src/cg01/cg1100.cpp Normal file

File diff suppressed because it is too large Load Diff

11
src/cg01/cg1100.h Normal file
View File

@ -0,0 +1,11 @@
#ifndef __CG1100_H
#define __CG1100_H
#define F_DATA_STAMPA 100
#define F_SCELTA_STAMPA 101
#define F_SALTO_PAGINA 102
#define F_CODDITTA 103
#define F_RAGSOC 104
#endif

55
src/cg01/cg1100a.uml Normal file
View File

@ -0,0 +1,55 @@
#include "cg1100.h"
TOOLBAR "topbar" 0 0 0 2
#include <printbar.h>
ENDPAGE
PAGE "Stampa piano dei conti" -1 -1 70 18
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Ditta "
FLAGS "FRD"
USE LF_NDITTE KEY 1
CHECKTYPE REQUIRED
INPUT CODDITTA F_CODDITTA
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale @50" RAGSOC
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
END
STRING F_RAGSOC 50
BEGIN
PROMPT 2 2 "Ragione sociale "
FLAGS "D"
END
DATE F_DATA_STAMPA
BEGIN
PROMPT 2 4 "Data di stampa "
HELP "Data da riportare sui fogli"
FLAGS "A"
END
RADIOBUTTON F_SCELTA_STAMPA 50
BEGIN
PROMPT 2 6 "Tipo di stampa "
HELP "Scegliere il tipo di stampa desiderata"
ITEM "1|Completa per IV direttiva"
ITEM "2|Conti riclassificati per IV direttiva"
ITEM "3|Conti non collegati per IV direttiva"
ITEM "4|Completa per analisi di bilancio"
ITEM "5|Conti riclassificati per analisi di bilancio"
ITEM "6|Conti non collegati per analisi di bilancio"
END
BOOLEAN F_SALTO_PAGINA
BEGIN
PROMPT 3 14 "Salto pagina per cambio gruppo "
HELP "Indicare se si desidera un salto pagina ogni volta che cambia il gruppo"
END
ENDPAGE
ENDMASK

989
src/cg01/cg1200.cpp Normal file
View File

@ -0,0 +1,989 @@
#include <config.h>
#include <execp.h>
#include <mask.h>
#include <mailbox.h>
#include <printapp.h>
#include <recarray.h>
#include <tabutil.h>
#include <utility.h>
#include <comuni.h>
#include <cfven.h>
#include <clifo.h>
#include <indsp.h>
#include <mov.h>
#include <nditte.h>
#include <pconti.h>
#include "cg1.h"
#include "cg1200a.h"
#include "cg1200b.h"
#define COMRF_ALIAS 50
#define COMNASC_ALIAS 51
enum pt { undefined = 0, elenco = 1, rubriche = 2, etichette = 3, vendite = 4 };
enum pw { clienti = 1, fornitori = 2, both = 3 };
bool mask2_reset_fields(TMask_field& mf, KEY k);
class TPrintclifo_app : public TPrintapp
{
friend bool mask2_reset_fields(TMask_field& mf, KEY k);
pt _pr_type;
pw _pr_what;
TRelation* _rel;
int _cur_1, _cur_2;
int _sort;
int _interline;
bool _mov_only;
TLocalisamfile* _mov;
TLocalisamfile* _comuni;
// etichette
int _startrow, _rows_et, _cols_et, _startcol;
// variable field slots
TString _piva,_cpercip,_fax,_telex,_email,_name,_telefono,_indir,_localita;
int _ges_ven;
TString _cod_from,_cod_to,_data_stampa,_cofi,_d_c_ric,_d_alleg;
TString _datanas,_comprov,_comnasc,_comune,_prov,_descpag;
long _codice;
char _tipocf,_tipoaper;
bool _gia_iniziati_fornitori;
TString tmp; // Stringa per porcate galattiche
public:
// @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
virtual bool check_autorization() const
{return FALSE;}
virtual void on_firm_change();
virtual bool preprocess_page(int file, int counter);
virtual bool preprocess_print(int file, int counter);
virtual print_action postprocess_print(int file, int counter);
virtual void preprocess_header();
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int);
int ccur() { return _sort == 1 ? _cur_1 : _cur_2; }
const char* look_tab(const char* tabname, TString& cod,
const char* fld = "S0");
const char* get_field(int ln, const char* fn)
{ return current_cursor()->curr(ln).get(fn); }
virtual void set_page (int file, int counter);
bool ges_ven();
void set_elenco();
void set_rubriche();
void set_etichette();
void set_vendite(int f, int c) ;
virtual bool process_link(int id, const char* txt);
void ultimo_codice(char tipo);
const char* compatta_ragsoc(TString& ragsoc,char tipoaper);
void header_elenco();
void header_rubriche();
TRectype& look_comuni(const TString&, const TString&);
const char* descrizione_conto_ric(int,int,long);
const char* descrizione_allegato(char,long);
TPrintclifo_app() : TPrintapp(),_piva(18), _cpercip(10), _fax(50), _telex(50),
_name(60), _telefono(90), _indir(70), _localita(90), _ges_ven(-1)
{
_rel = NULL; _pr_type = undefined; _startrow = 2; _startcol = 3;
_rows_et = 9; _cols_et = 40;
}
};
/* -------------------------------------------------------------------- */
/* ---------------------------- Code ---------------------------------- */
/* -------------------------------------------------------------------- */
bool TPrintclifo_app::process_link(int id, const char* txt)
{
/*
TString ss = "1|";
ss << txt;
TMessage fs("cg0 -1", MSG_LN, ss);
TMailbox m;
m.send(fs);
TExternal_app cg0("cg0 -1");
if (cg0.run()) beep();
*/
TToken_string str(txt);
TRectype clifo(LF_CLIFO);
clifo.put(CLI_TIPOCF, str.get(0));
clifo.put(CLI_CODCF, str.get());
return clifo.edit(LF_CLIFO, NULL, "cg0 -1");
}
const char* TPrintclifo_app::look_tab(const char* tabname, TString& cod,
const char* fld)
{
TTable tab(tabname);
tab.curr().zero();
tab.curr().put("CODTAB",cod);
tab.read();
if (tab.bad()) tab.curr().zero();
return tab.curr().get(fld);
}
const char* TPrintclifo_app::descrizione_conto_ric(int gruppo, int conto, long sottoc)
{
TLocalisamfile pconti(LF_PCON);
pconti.setkey(1);
pconti.zero();
pconti.put(PCN_GRUPPO, gruppo);
pconti.put(PCN_CONTO, conto);
pconti.put(PCN_SOTTOCONTO, sottoc);
pconti.read();
if (pconti.bad())
pconti.zero();
tmp = pconti.get(PCN_DESCR);
return tmp;
}
const char* TPrintclifo_app::descrizione_allegato(char tipocf,long cod)
{
TLocalisamfile clifo(LF_CLIFO);
clifo.setkey(1);
clifo.zero();
clifo.put(CLI_TIPOCF, tipocf);
clifo.put(CLI_CODCF , cod);
clifo.read();
if (clifo.bad())
clifo.zero();
_tipoaper = clifo.get_char(CLI_TIPOAPER);
tmp = clifo.get(CLI_RAGSOC);
return tmp;
}
TRectype& TPrintclifo_app::look_comuni(const TString& stato, const TString& cod)
{
_comuni->zero();
_comuni->put(COM_COM, cod);
_comuni->put(COM_STATO, stato);
_comuni->read();
if (_comuni->bad())
_comuni->zero();
return _comuni->curr();
}
bool TPrintclifo_app::preprocess_page(int file, int counter)
{
TString s;
int g_ric,c_ric;
long s_ric,codall;
switch (file)
{
case LF_CLIFO:
{
if (_mov_only)
{
const TString16 tipocf(get_field(LF_CLIFO,CLI_TIPOCF));
const TString16 codice(get_field(LF_CLIFO,CLI_CODCF));
_mov->curr().zero();
_mov->curr().put(MOV_TIPO, tipocf);
_mov->curr().put(MOV_CODCF, codice);
_mov->read();
if (_mov->get(MOV_TIPO) != tipocf ||
_mov->get(MOV_CODCF) != codice)
return FALSE;
}
_tipocf = current_cursor()->curr(LF_CLIFO).get_char(CLI_TIPOCF);
// set variable fields
_cofi = get_field(LF_CLIFO, CLI_COFI);
//_piva = get_field(LF_CLIFO, CLI_COFI);
//if (_piva.empty()) _piva = get_field(LF_CLIFO, CLI_PAIV);
_piva = get_field(LF_CLIFO, CLI_PAIV);
_telefono = get_field(LF_CLIFO, CLI_PTEL);
if (!_telefono.empty()) _telefono << "/";
_telefono << get_field(LF_CLIFO, CLI_TEL) << " ";
s = get_field(LF_CLIFO, CLI_PTEL2);
if (!s.empty()) s << "/";
_telefono << s << get_field(LF_CLIFO, CLI_TEL2) << " ";
s = get_field(LF_CLIFO, CLI_PTEL3);
if (!s.empty()) s << "/";
_telefono << s << get_field(LF_CLIFO, CLI_TEL3);
_fax = get_field(LF_CLIFO, CLI_PFAX);
if (!_fax.empty()) _fax << "/";
_fax << get_field(LF_CLIFO, CLI_FAX);
_telex = get_field(LF_CLIFO, CLI_PTELEX);
if (!_telex.empty()) _telex << "/";
_telex << get_field(LF_CLIFO, CLI_TELEX);
_email = get_field(LF_CLIFO, CLI_MAIL);
const int at = _email.find('@');
if (at > 0) _email.insert("@", at); // Raddoppia la chiocciola!
_indir = get_field(LF_CLIFO, CLI_INDCF);
g_ric = atoi(get_field(LF_CLIFO, CLI_GRUPPORIC));
c_ric = atoi(get_field(LF_CLIFO, CLI_CONTORIC));
s_ric = atol(get_field(LF_CLIFO, CLI_SOTTOCRIC));
codall = atol(get_field(LF_CLIFO, CLI_CODALLEG));
_datanas = get_field(LF_CLIFO, CLI_DATANASC);
const TString16 tipoaper(get_field(LF_CLIFO, CLI_TIPOAPER));
_d_alleg = "";
if (codall != 0)
{
_d_alleg = descrizione_allegato(_tipocf,codall);
if (_tipoaper == 'F')
{
TString surname = _d_alleg.mid(30,50); surname.trim();
_d_alleg = _d_alleg.mid(0,30); _d_alleg.trim();
_d_alleg << " " << surname;
}
}
_d_c_ric = descrizione_conto_ric(g_ric,c_ric,s_ric);
_d_c_ric = _d_c_ric.mid(0,31);
_d_alleg = _d_alleg.mid(0,26);
if (!_indir.empty()) _indir << " ";
_indir << get_field(LF_CLIFO, CLI_CIVCF);
_localita = get_field(LF_CLIFO, CLI_LOCCF);
if (!_localita.empty())
_localita.trim();
//modifica del 27/04/1995
TString16 comcf = get_field(LF_CLIFO, CLI_COMCF);
TString16 stacf = get_field(LF_CLIFO, CLI_STATOCF);
TRectype com = look_comuni(stacf,comcf);
_comune.cut(0);
_comprov.cut(0);
if (_localita.not_empty())
{
_comune << _localita << " ";
_comprov = _comune;
}
if (com.empty())
_prov = "";
else
{
_comprov << com.get(COM_DENCOM);
_comprov << " ";
_comprov << com.get(COM_PROVCOM);
_comune << (com.get(COM_DENCOM));
_comune = _comune.left(20);
_prov = com.get(COM_PROVCOM);
}
TString16 comnasc = get_field(LF_CLIFO, CLI_COMNASC);
TString16 stanasc = get_field(LF_CLIFO, CLI_STATONASC);
TRectype comn = look_comuni(stanasc, comnasc);
_comnasc = (comn.get(COM_DENCOM)).left(29);
_comnasc << " ";
_comnasc << comn.get(COM_PROVCOM);
//fine modifica
_name = get_field(LF_CLIFO, CLI_RAGSOC);
s = get_field(LF_CLIFO, CLI_CODANAGPER);
_cpercip = "";
if (s.not_empty()) _cpercip << tipoaper << " " << s;
if (tipoaper == "F")
{
TString surname = _name.mid(30,50); surname.trim();
_name = _name.mid(0,30); _name.trim();
_name << " " << surname;
}
switch(_pr_type)
{
case elenco:
case rubriche:
if (_pr_what == both)
if (_tipocf == 'F' && !_gia_iniziati_fornitori)
{
_gia_iniziati_fornitori = TRUE;
printer().formfeed();
}
break;
default:
break;
}
_descpag = get_field(LF_CLIFO, CLI_CODPAG);
_descpag = cache().get("%CPG", _descpag, "S0");
}
break;
case LF_INDSP:
current_cursor()->items();
if (atoi(get_field(LF_INDSP,IND_CODIND)) == 0)
return FALSE;
_telefono = get_field(LF_INDSP, IND_PTEL);
if (!_telefono.empty()) _telefono << "/";
_telefono << get_field(LF_INDSP, IND_TEL);
_fax = get_field(LF_INDSP, IND_PFAX);
if (!_fax.empty()) _fax << "/";
_fax << get_field(LF_INDSP, IND_FAX);
_localita = get_field(LF_INDSP,IND_LOCALITA);
if (!_localita.empty())
_localita << " - ";
_comuni->curr().zero();
_comuni->curr().put(COM_STATO,get_field(LF_INDSP,IND_STATO));
_comuni->curr().put(COM_COM,get_field(LF_INDSP,IND_COM));
_comuni->read();
_localita << _comuni->curr().get(COM_DENCOM);
_localita << " ";
_localita << _comuni->curr().get(COM_PROVCOM);
break;
default:
break;
}
return TRUE;
}
print_action TPrintclifo_app::postprocess_print(int file, int counter)
{
return NEXT_PAGE;
}
bool rdbtype_handler(TMask_field& f, KEY k)
{
if (k == K_TAB)
//every time that change focus or value, check flag to enable button
{
TPrintclifo_app& a = (TPrintclifo_app&)main_app();
if (a.ges_ven())
f.mask().enable(BUT_CG12_VENDITE);
else
f.mask().disable(BUT_CG12_VENDITE);
}
return TRUE;
}
bool mask_ctrl_handler(TMask_field& mf, KEY k)
{
if (k == K_SPACE)
{
mf.set_focusdirty(FALSE);
return mf.mask().stop_run(mf.dlg());
}
return TRUE;
}
// set printrows
void TPrintclifo_app::set_page(int file, int counter)
{
switch(_pr_type)
{
case elenco:
if (file == LF_CLIFO)
set_elenco();
break;
case rubriche:
if (file == LF_CLIFO)
set_rubriche();
break;
case etichette:
if (file == LF_CLIFO)
set_etichette();
break;
case vendite:
set_vendite(file, counter);
default:
break;
}
}
void TPrintclifo_app::ultimo_codice(char tipocf)
{
TLocalisamfile clifo(LF_CLIFO);
char tipopr = tipocf;
clifo.setkey(1);
clifo.zero();
clifo.put(CLI_TIPOCF,tipocf);
for (clifo.read();!clifo.eof();clifo.next())
{
char tipo = clifo.get_char(CLI_TIPOCF);
if (tipo != tipopr) break;
_codice = clifo.get_long(CLI_CODCF);
}
}
const char* TPrintclifo_app::compatta_ragsoc(TString& ragsoc,char tipoa)
{
if (tipoa == 'F')
{
TString80 cognome, nome;
cognome = ragsoc.mid(0,30);
nome = ragsoc.mid(30,20);
cognome.trim(); nome.trim();
ragsoc = cognome;
ragsoc << " " << nome;
}
tmp = ragsoc;
return tmp;
}
void TPrintclifo_app::preprocess_header()
{
switch(_pr_type)
{
case elenco:
header_elenco();
break;
case rubriche:
header_rubriche();
break;
default:
break;
}
}
void TPrintclifo_app::header_elenco()
{
reset_header();
// intestazione
const long firm = get_firm();
TString var;
int j = 1;
char tipocf;
TLocalisamfile ditte(LF_NDITTE);
ditte.zero();
ditte.put(NDT_CODDITTA, firm);
ditte.read();
if (ditte.bad()) ditte.zero();
TString s(ditte.get(NDT_RAGSOC));
set_header(j, FR("Ditta %ld %s@125gPag @#"), firm, (const char*) s);
set_header(j++, FR("@102gData %s"), (const char*) _data_stampa);
tipocf = current_cursor()->curr(LF_CLIFO).get_char(CLI_TIPOCF);
if (tipocf == 'C')
var = TR("Clienti");
else
if (tipocf == 'F')
var = TR("Fornitori");
set_header(j, FR("Elenco %s"),(const char*) var);
if (_sort == 1)
var = TR("Ordine di codice");
else
var = TR("Ordine alfabetico");
set_header(j, "@30g%s", (const char*) var);
if (_mov_only)
set_header(j, FR("@55gSolo i movimentati"));
ultimo_codice(_tipocf);
set_header(j++, FR("@102gUltimo cod.utilizzato %ld") , _codice);
if (_pr_what != both)
{
if (_cod_from.not_empty() || _cod_to.not_empty())
{
set_header(j, TR("Estremi selezione"));
if (_cod_from.not_empty())
set_header(j, FR(" da %s"), (const char*) _cod_from);
if (_cod_to.not_empty())
set_header(j, FR(" a %s"), (const char*) _cod_to);
j++;
}
}
set_header(j++, (const char *)(TString(132).fill('-')));
set_header(j++, TR(" Codice Ragione sociale"));
set_header(j++, FR("@9gIndirizzo@56gC.A.P.@63gLocalita'"));
set_header(j++, FR("@9gTelefoni@90gFAX @115gTelex"));
set_header(j++, FR("@9gIndirizzo posta elettronica"));
set_header(j++, FR("@9gLuogo di nascita@45gData@56gPartita IVA Codice fiscale"));
set_header(j++, FR("@9gConto di costo/ricavo@56gCodice allegato@90gPercipiente 770"));
set_header(j, (const char *)(TString(132).fill('-')));
}
void TPrintclifo_app::header_rubriche()
{
reset_header();
// intestazione
const long firm = get_firm();
TString var;
int j = 1;
char tipocf;
TLocalisamfile ditte(LF_NDITTE);
ditte.zero();
ditte.put(NDT_CODDITTA, firm);
ditte.read();
if (ditte.bad()) ditte.zero();
TString s(ditte.get(NDT_RAGSOC));
set_header(j, FR("Ditta %ld %s@125gPag @#"), firm, (const char*) s);
set_header(j++, FR("@102gData %s"), (const char*) _data_stampa);
tipocf = current_cursor()->curr(LF_CLIFO).get_char(CLI_TIPOCF);
if (tipocf == 'C')
var = TR("Clienti");
else
if (tipocf == 'F')
var = TR("Fornitori");
set_header(j, FR("Rubrica %s"),(const char*) var);
if (_sort == 1)
var = TR("Ordine di codice");
else
var = TR("Ordine alfabetico");
set_header(j, "@30g%s", (const char*) var);
if (_mov_only)
set_header(j, FR("@55gSolo i movimentati"));
ultimo_codice(_tipocf);
set_header(j++, FR("@102gUltimo cod.utilizzato %ld") , _codice);
if (_pr_what != both)
{
if (_cod_from.not_empty() || _cod_to.not_empty())
{
set_header(j, TR("Estremi selezione"));
if (_cod_from.not_empty())
set_header(j, FR(" da %s"), (const char*) _cod_from);
if (_cod_to.not_empty())
set_header(j, FR(" a %s"), (const char*) _cod_to);
j++;
}
}
set_header(j++, (const char *)(TString(132).fill('-')));
set_header(j++, FR(" Codice Ragione sociale@60gIndirizzo@100gC.A.P.@106gLocalita'@127gProv."));
set_header(j++, FR("@9gPartita iva@25gTelefoni"));
set_header(j++, (const char *)(TString(132).fill('-')));
}
void TPrintclifo_app::set_elenco()
{
set_row(1,"$[b]@1s$[n] $[b]@pn$[n] #t", FLD(LF_CLIFO, CLI_TIPOCF),
FLD(LF_CLIFO, CLI_CODCF,"@@@@@@"), &_name);
set_row(2,"@9g#t@56g@s@63g#t", &_indir, FLD(LF_CLIFO, CLI_CAPCF),&_comprov);
set_row(3,"@9g#t@90g#t@115g#t", &_telefono, &_fax, &_telex);
set_row(4,"@9g#t", &_email);
set_row(5,"@9g#t@45g#t@56g#t@69g#t",&_comnasc, &_datanas, &_piva,&_cofi);
set_row(6,"@9g@3n @3n @6n #t@56g@t #t@90g#t",FLD(LF_CLIFO,CLI_GRUPPORIC),
FLD(LF_CLIFO,CLI_CONTORIC), FLD(LF_CLIFO, CLI_SOTTOCRIC),&_d_c_ric,
FLD(LF_CLIFO, CLI_CODALLEG), &_d_alleg, &_cpercip);
set_row(7,"@9g@s@15g#t",FLD(LF_CLIFO, CLI_CODPAG),&_descpag);
for(int i = 0; i < _interline; i++)
set_row(i+7,"");
}
void TPrintclifo_app::set_rubriche()
{
// body
set_row(1,"$[b]@1s$[n] $[b]@pn$[n] #t", FLD(LF_CLIFO,CLI_TIPOCF),
FLD(LF_CLIFO,CLI_CODCF,"@@@@@@"), &_name);
set_row(1,"@60g#t@100g@s@106g#t@127g#t", &_indir, FLD(LF_CLIFO, CLI_CAPCF), &_comune, &_prov);
set_row(2,"@9g#t@25g#t", &_piva,&_telefono);
for(int i = 0; i < _interline; i++)
set_row(i+4,"");
}
bool mask2_reset_fields(TMask_field& mf, KEY k)
{
if (k == K_SPACE)
{
TPrintclifo_app& a = (TPrintclifo_app&)main_app();
TMask& m = mf.mask();
m.set(FLD_CGB_STARTROW, a._startrow);
m.set(FLD_CGB_STARTCOL, a._startcol);
m.set(FLD_CGB_ROWSET,a._rows_et);
m.set(FLD_CGB_COLSET, a._cols_et);
}
return TRUE;
}
void TPrintclifo_app::set_etichette()
{
int r=_startrow;
TString loccf=get_field(LF_CLIFO,CLI_LOCCF);
reset_header();
int i;
for (i = 1; i < _startrow; i++)
set_row(i,"");
set_row(r++, format("@%dg#-%dt",_startcol, _cols_et - _startcol),
&_name);
set_row(r++, format("@%dg#-%dt",_startcol, _cols_et - _startcol),
&_indir);
if (!loccf.empty())
set_row(r++,format("@%dg#-%dt",_startcol, _cols_et - _startcol), &_localita);
set_row(r++, format("@%dg@5s @%ds @2s",_startcol,
_cols_et - _startcol - 9),
FLD(LF_CLIFO, CLI_CAPCF),
FLD(-COMRF_ALIAS, COM_DENCOM),
FLD(-COMRF_ALIAS, COM_PROVCOM));
for (i = r; i <= _rows_et; i++)
set_row(i,"");
}
void TPrintclifo_app::set_vendite(int f, int c)
{ TString* rigs = new TString(132);
rigs->fill('-');
reset_header();
// intestazione
const long firm = get_firm();
TLocalisamfile ditte(LF_NDITTE);
ditte.zero();
ditte.put(NDT_CODDITTA, firm);
ditte.read();
if (ditte.bad()) ditte.zero();
TString s(ditte.get(NDT_RAGSOC));
switch (f)
{
case LF_CFVEN:
/////////////////////////////////
// Prints CFVEN information //
/////////////////////////////////
set_header(1, FR("Ditta %ld %s @102gData @<@125gPag @#"), firm, (const char*) s);
set_header(2, FR("Dati Clienti/Fornitori per Vendite"));
set_header(3, (const char *)(TString(132).fill('-')));
set_header(4,FR(" Codice Ragione sociale"));
set_header(5,FR("@9gNote Cli/For @25gLegale per contenz. @46gCat.Finanziaria @63gCat.Vendita @76gAss.Fiscale @93gZona @101gAgente @112gProvvigione"));
set_header(6,FR("@9gCod.Listino @25gCod. Magazzino @46gSpese da Addeb. @63gBolli @76gSpese incasso") );
set_header(7,FR("@9gCli/For ass. @25gCod. Meccanografico @46gGest. Contratto @63gRid. Iva @76gUltimo sollecito @93gUltimo estr. conto @112gTitolo onorifico"));
set_header(8,FR("@9gSconto @46gSconto Cliente@63gFatt. Sosp. @76gVs. Lettera Esenzione @112gNs. Lettera Esenz."));
set_header(9,FR("@9gCod. ABI p.e. @25gCod. CAB p.e. @46gInd. Effetti @63gEmiss. Eff. @76gImporto Minimo @93gEffetti non acc. @112gScadenza effetti"));
set_header(10,FR("@9gInd.Documento @25gInd. Spedizione @46gNote Documento @63gCod.Mezzo @76gPorto @93gVettori"));
set_header(11,FR("@9gRaggr. ordini @25gImporto Minimo @46gImporto Massimo @63gPriorita ev. @76gTipo Evasione"));
set_header(12, (const char *)(TString(132).fill('-')));
set_row(1,"$[b]@1s$[n] $[b]@pn$[n] #t", FLD(LF_CLIFO, CLI_TIPOCF),
FLD(LF_CLIFO, CLI_CODCF,"@@@@@@"), &_name);
set_row(2,"@9g@2s @25g@2s @46g@2s @63g@2s @76g@2s @93g@2s @101g@3s @112g@n",
FLD(LF_CFVEN, CFV_CODNOTE),FLD(LF_CFVEN,CFV_CODLEG),
FLD(LF_CFVEN,CFV_CATFIN),FLD(LF_CFVEN,CFV_CATVEN),
FLD(LF_CFVEN,CFV_ASSFIS),FLD(LF_CFVEN,CFV_CODZONA),
FLD(LF_CFVEN,CFV_CODAG),FLD(LF_CFVEN,CFV_PERCPROVV));
set_row(3,"@9g@5s @25g@3s @46g@3s @3s @3s @3s @63g@f @76g@n ",
FLD(LF_CFVEN,CFV_CODLIST),FLD(LF_CFVEN,CFV_CODMAG),
FLD(LF_CFVEN,CFV_CODSP1),FLD(LF_CFVEN,CFV_CODSP2),
FLD(LF_CFVEN,CFV_CODSP3),FLD(LF_CFVEN,CFV_CODSP4),
FLD(LF_CFVEN,CFV_ADDBOLLI),
FLD(LF_CFVEN,CFV_PERCSPINC));
set_row(4,"@9g@pn @25g@s @46g@f @63g@f @76g@d @93g@d @112g@2s",
FLD(LF_CLIFO,CLI_CODCFASS,"@@@@@@"),
FLD(LF_CFVEN,CFV_CODPRCF),FLD(LF_CFVEN,CFV_GESTCONTR),
FLD(LF_CFVEN,CFV_IVARID),FLD(LF_CFVEN,CFV_DATAESC),
FLD(LF_CFVEN,CFV_DATASOLL),FLD(LF_CFVEN,CFV_TITOLO));
set_row(5,"@9g@25s @46g@4s @63g@f @76g@s del @d @112g@s del @d",
FLD(LF_CFVEN,CFV_SCONTO),
FLD(LF_CFVEN,CFV_CODSCC),FLD(LF_CFVEN,CFV_FATTSOSP),
FLD(LF_CFVEN,CFV_VSNRPROT),FLD(LF_CFVEN,CFV_VSDATAREG),
FLD(LF_CFVEN,CFV_NSNPROT),FLD(LF_CFVEN,CFV_NSDATAREG));
set_row(6,"@9g@5pn @25g@5pn @46g@3,rn @63g@f @76g@pn @93g@s @112g@s",
FLD(LF_CFVEN,CFV_CODABIPR,"@@@@@"),
FLD(LF_CFVEN,CFV_CODCABPR,"@@@@@"),
FLD(LF_CFVEN,CFV_CODINDEFF),FLD(LF_CFVEN,CFV_EMEFFRICH),
FLD(LF_CFVEN,CFV_IMPMINEFF,"."),
FLD(LF_CFVEN,CFV_NONACCEFF),
FLD(LF_CFVEN,CFV_NONSCADEFF));
set_row(7,"@9g@3,rn @25g@3,rn @46g@2s @53g@2s @63g@2s @76g@2s @93g@3pn @96g@3pn @103g@3pn",
FLD(LF_CFVEN,CFV_CODINDDOC),FLD(LF_CFVEN,CFV_CODINDSP),
FLD(LF_CFVEN,CFV_CODNOTESP1),FLD(LF_CFVEN,CFV_CODNOTESP2),
FLD(LF_CFVEN,CFV_CODSPMEZZO),FLD(LF_CFVEN,CFV_CODPORTO),
FLD(LF_CFVEN,CFV_CODVETT1,"@@@"),
FLD(LF_CFVEN,CFV_CODVETT2,"@@@"),
FLD(LF_CFVEN,CFV_CODVETT3,"@@@"));
set_row(8,"@9g@s @25g@15,rpn @46g@15,rpn @63g@n @76g@2s",
FLD(LF_CFVEN,CFV_RAGGOR),FLD(LF_CFVEN,CFV_MINORD,"."),
FLD(LF_CFVEN,CFV_MAXORD,"."),FLD(LF_CFVEN,CFV_PREVORD),
FLD(LF_CFVEN,CFV_TIPOEVORD));
if (current_cursor()->is_first_match(LF_INDSP))
{ // Test whether there are any Addresses. If so, prints
// the header.
set_row(9,"");
set_row(10,FR("@9gIndirizzi di Spedizione"));
set_row(11,"@9g%t",rigs);
set_row(12,FR("@9gCodice @17gRagione Sociale"));
set_row(13,FR("@17gIndirizzo @65gC.A.P. @72gLocalita"));
set_row(14,FR("@17gIndirizzo aggiuntivo"));
set_row(15,FR("@17gTelefono @60gFax @102gRiduzione IVA"));
set_row(16,"@9g%t",rigs);
} else
for (int i=0;i<_interline;i++)
set_row(i+9,"");
break;
/////////////////////////////////////////
// End of printing CFVEN information //
/////////////////////////////////////////
case LF_INDSP:
//////////////////////////////////////////////////
// Prints INDSP information for each customer //
//////////////////////////////////////////////////
{
int row = 1;
set_row(row++,"@9g@pn @17g@s",FLD(LF_INDSP,IND_CODIND,"@@@"),
FLD(LF_INDSP,IND_RAGSOC));
set_row(row++,"@17g@s @s @65g@s @72g#t",FLD(LF_INDSP,IND_INDIR),
FLD(LF_INDSP,IND_CIV),FLD(LF_INDSP,IND_CAP), &_localita);
set_row(row++,"@17g@s",FLD(LF_INDSP,IND_INDIR2));
set_row(row++,"@17g#t @60g#t @102g@f",&_telefono,&_fax,
FLD(LF_INDSP,IND_IVARID));
current_cursor()->save_status();
if (!current_cursor()->next_match(LF_INDSP))
for (int i=0;i<_interline;i++)
set_row(i+4,"");
else
set_row(4,"");
current_cursor()->restore_status();
}
/////////////////////////////////////////
// End of printing INDSP information //
/////////////////////////////////////////
break;
default:
break;
}
delete rigs;
}
bool TPrintclifo_app::set_print(int)
{
disable_links();
set_multiple_link(FALSE);
TMask mask("cg1200a.msk");
mask.set_handler(RDB_CG12_TYPE, rdbtype_handler);
mask.set_handler(BUT_CG12_ELENCO, mask_ctrl_handler);
mask.set_handler(BUT_CG12_RUBRICHE, mask_ctrl_handler);
mask.set_handler(BUT_CG12_ETICHETTE, mask_ctrl_handler);
mask.run();
force_setpage(FALSE);
// set print type
switch (mask.last_key())
{
case K_ESC:
case K_QUIT:
return FALSE;
break;
case BUT_CG12_ELENCO:
_pr_type = elenco;
break;
case BUT_CG12_ETICHETTE:
{
TMask mask2("cg1200b.msk");
/* TBI read/save from - to config file */
_pr_type = etichette;
mask2.set_handler(BUT_CGB_RESET, mask2_reset_fields);
mask2.field(FLD_CGB_ROWSET).set(format("%d",_rows_et));
mask2.field(FLD_CGB_COLSET).set(format("%d",_cols_et));
mask2.field(FLD_CGB_STARTROW).set(format("%d",_startrow));
mask2.field(FLD_CGB_STARTCOL).set(format("%d",_startcol));
// set defaults
if (mask2.run() == K_ESC)
return FALSE;
_startrow = atoi(mask2.get(FLD_CGB_STARTROW));
_startcol = atoi(mask2.get(FLD_CGB_STARTCOL));
_rows_et = atoi(mask2.get(FLD_CGB_ROWSET));
_cols_et = atoi(mask2.get(FLD_CGB_COLSET));
force_setpage();
break;
}
case BUT_CG12_RUBRICHE:
_pr_type = rubriche;
break;
case BUT_CG12_VENDITE:
_pr_type = vendite;
force_setpage();
break;
}
if (_pr_type != etichette)
{
set_multiple_link(TRUE);
enable_link(TR("Collegamento clienti e fornitori : "), 'b');
}
_sort = mask.get_int(RDB_CG12_SORT);
_pr_what = (pw) mask.get_int(RDB_CG12_TYPE);
_interline = mask.get_int(LST_CG12_INTERLINE);
_mov_only = mask.get_bool(CHK_CG12_MOVIM);
char tipoafr = mask.get(F_TIPOAPERFR)[0];
char tipoato = mask.get(F_TIPOAPERTO)[0];
TDate data_stampa (mask.get(F_DATA_STAMPA));
_data_stampa = data_stampa.string();
_codice = 0;
select_cursor(ccur());
TRectype tr1(current_cursor()->curr());
tr1.zero();
TRectype tr2(tr1);
if (_pr_what != both)
{
// filter
tr1.put(CLI_TIPOCF, _pr_what == clienti ? "C" : "F");
tr2.put(CLI_TIPOCF, _pr_what == clienti ? "C" : "F");
short fromid, toid;
TString16 nome_campo;
if (_sort == 1)
{
fromid = (_pr_what == clienti) ? FLD_CLI_CODFR : FLD_FOR_CODFR;
toid = (_pr_what == clienti) ? FLD_CLI_CODTO : FLD_FOR_CODTO;
nome_campo = CLI_CODCF;
}
else
{
fromid = (_pr_what == clienti) ? FLD_CLI_RAGSOCFR : FLD_FOR_RAGSOCFR;
toid = (_pr_what == clienti) ? FLD_CLI_RAGSOCTO : FLD_FOR_RAGSOCTO;
nome_campo = CLI_RAGSOC;
}
TString cod_from(mask.get(fromid));
TString cod_to(mask.get(toid));
if (cod_from.not_empty()) tr1.put(nome_campo, cod_from);
if (cod_to.not_empty()) tr2.put(nome_campo, cod_to);
if (_sort == 1)
{
_cod_from = cod_from;
_cod_to = cod_to;
}
else
{
_cod_from = compatta_ragsoc(cod_from,tipoafr);
_cod_to = compatta_ragsoc(cod_to,tipoato);
}
}
current_cursor()->setregion(tr1, tr2);
return TRUE;
}
bool TPrintclifo_app::preprocess_print(int file, int counter)
{
reset_print();
if (_pr_type == undefined)
return set_print(counter);
if (file == LF_CLIFO)
if (_pr_what == both)
_gia_iniziati_fornitori = FALSE;
return TRUE;
}
void TPrintclifo_app::on_firm_change()
{
TConfig c(CONFIG_DITTA, "cg");
_ges_ven = c.get_bool("GesVen");
}
bool TPrintclifo_app::ges_ven()
{
if (_ges_ven < 0)
on_firm_change();
return _ges_ven != 0;
}
bool TPrintclifo_app::user_create()
{
// set relation and cursors
_rel = new TRelation(LF_CLIFO);
_rel->add(LF_COMUNI, "STATO==STATOCF|COM==COMCF", 1, 0, COMRF_ALIAS);
_rel->add(LF_COMUNI, "STATO==STATONASC|COM==COMNASC", 1, 0, COMNASC_ALIAS);
if (ges_ven())
{
_rel->add(LF_CFVEN,"TIPOCF==TIPOCF|CODCF==CODCF");
_rel->add(LF_INDSP,"TIPOCF==TIPOCF|CODCF==CODCF");
}
_mov = new TLocalisamfile(LF_MOV); _mov->setkey(3);
_comuni = new TLocalisamfile(LF_COMUNI);
_cur_1 = add_cursor(new TCursor(_rel,"",1));
_cur_2 = add_cursor(new TCursor(_rel,"",2));
add_file(LF_CLIFO);
if (ges_ven())
{
add_file(LF_CFVEN,LF_CLIFO);
add_file(LF_INDSP,LF_CLIFO);
}
set_magic_currency(TRUE);
enable_print_menu();
return TRUE;
}
bool TPrintclifo_app::user_destroy()
{
if (_rel)
delete _rel;
delete _mov;
delete _comuni;
return TRUE;
}
int cg1200(int argc, char* argv[])
{
TPrintclifo_app app;
app.run(argc, argv, TR("Stampa Clienti/Fornitori"));
return 0;
}

23
src/cg01/cg1200a.h Normal file
View File

@ -0,0 +1,23 @@
#define RDB_CG12_TYPE 100
#define RDB_CG12_SORT 101
#define FLD_CLI_CODFR 102
#define FLD_CLI_CODTO 103
#define FLD_CLI_RAGSOCFR 104
#define FLD_CLI_RAGSOCTO 105
#define FLD_FOR_CODFR 106
#define FLD_FOR_CODTO 107
#define FLD_FOR_RAGSOCFR 109
#define FLD_FOR_RAGSOCTO 110
#define CHK_CG12_MOVIM 111
#define LST_CG12_INTERLINE 112
#define CHK_CG12_INCLDI 113
#define BUT_CG12_ELENCO 115
#define BUT_CG12_RUBRICHE 116
#define BUT_CG12_ETICHETTE 117
#define BUT_CG12_VENDITE 118
#define F_CODDITTA 119
#define F_RAGSOC 120
#define F_DATA_STAMPA 121
#define F_TIPOAPERFR 122
#define F_TIPOAPERTO 123

265
src/cg01/cg1200a.uml Normal file
View File

@ -0,0 +1,265 @@
#include "cg1200a.h"
TOOLBAR "Toolbar" 0 0 0 2
BUTTON BUT_CG12_ELENCO 10 2
BEGIN
PROMPT 4 14 "~Elenco"
PICTURE TOOL_PRINTELENCO
MESSAGE EXIT,BUT_CG12_ELENCO
END
BUTTON BUT_CG12_RUBRICHE 10 2
BEGIN
PROMPT 16 14 "~Rubriche"
PICTURE TOOL_PRINTRUBRICA
MESSAGE EXIT,BUT_CG12_RUBRICHE
END
BUTTON BUT_CG12_ETICHETTE 10 2
BEGIN
PROMPT 28 14 "E~tichette"
PICTURE TOOL_PRINTETICH
MESSAGE EXIT,BUT_CG12_ETICHETTE
END
BUTTON BUT_CG12_VENDITE 10 2
BEGIN
PROMPT 40 14 "~Vendite"
PICTURE TOOL_PRINTSCHEDE
MESSAGE EXIT,BUT_CG12_VENDITE
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT 1 1 ""
PICTURE 0
END
BUTTON DLG_SETPRINT 2 2
BEGIN
PROMPT 1 1 "Imposta"
PICTURE TOOL_SETPRINT
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT 1 1 ""
PICTURE 0
END
#include <helpbar.h>
ENDPAGE
PAGE "Selezione" -1 -1 70 19
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Ditta "
FLAGS "FRD"
USE LF_NDITTE KEY 1
CHECKTYPE REQUIRED
INPUT CODDITTA F_CODDITTA
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale @50" RAGSOC
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
END
STRING F_RAGSOC 50
BEGIN
PROMPT 2 2 "Ragione sociale "
FLAGS "D"
END
DATE F_DATA_STAMPA
BEGIN
PROMPT 42 1 "Data di stampa "
FLAGS "A"
END
RADIOBUTTON RDB_CG12_TYPE 24
BEGIN
PROMPT 4 4 "Oggetto"
HELP "Selezionare l'archivio che si desidera stampare"
ITEM "1|Clienti" MESSAGE RESET,2@|SHOW,1@|HIDE,2@
ITEM "2|Fornitori" MESSAGE RESET,1@|SHOW,2@|HIDE,1@
ITEM "3|Entrambi" MESSAGE HIDE,1@|HIDE,2@|RESET,1@|RESET,2@
END
RADIOBUTTON RDB_CG12_SORT 24
BEGIN
PROMPT 4 9 "Ordinamento"
HELP "Selezionare il tipo di ordinamento dei record stampati"
ITEM "1|per Codice" MESSAGE CLEAR,4@|ENABLE,3@
ITEM "2|per Ragione Sociale" MESSAGE CLEAR,3@|ENABLE,4@
END
GROUPBOX DLG_NULL 35 10
BEGIN
PROMPT 32 4 "Selezione "
END
TEXT DLG_NULL
BEGIN
PROMPT 34 8 "da Ragione Sociale/Nominativo"
END
TEXT DLG_NULL
BEGIN
PROMPT 34 10 "a Ragione Sociale/Nominativo"
END
TEXT DLG_NULL
BEGIN
PROMPT 34 5 "da Codice"
END
TEXT DLG_NULL
BEGIN
PROMPT 48 5 "a Codice"
END
STRING FLD_CLI_CODFR 6
BEGIN
PROMPT 34 6 ""
USE LF_CLIFO KEY 1
INPUT TIPOCF "C"
INPUT CODCF FLD_CLI_CODFR
DISPLAY "Codice" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Codice Fiscale@16" COFI
OUTPUT FLD_CLI_CODFR CODCF
GROUP 1 3
HELP "Codice di inizio stampa: vuoto = inizio archivio"
END
STRING FLD_CLI_CODTO 6
BEGIN
PROMPT 48 6 ""
COPY USE FLD_CLI_CODFR
INPUT TIPOCF "C"
INPUT CODCF FLD_CLI_CODTO
COPY DISPLAY FLD_CLI_CODFR
OUTPUT FLD_CLI_CODTO CODCF
GROUP 1 3
HELP "Codice di fine stampa: vuoto = fine archivio"
NUM_EXPR {(#THIS_FIELD == 0) || (#THIS_FIELD >= #FLD_CLI_CODFR)}
WARNING "Limite superiore errato"
END
STRING FLD_CLI_RAGSOCFR 50 29
BEGIN
PROMPT 34 9 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC FLD_CLI_RAGSOCFR
DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Codice" CODCF
DISPLAY "Codice Fiscale@16" COFI
OUTPUT FLD_CLI_RAGSOCFR RAGSOC
OUTPUT F_TIPOAPERFR TIPOAPER
GROUP 1 4
HELP "Ragione sociale di inizio stampa: vuoto = inizio archivio"
END
STRING FLD_CLI_RAGSOCTO 50 29
BEGIN
PROMPT 34 11 ""
COPY USE FLD_CLI_RAGSOCFR
INPUT TIPOCF "C"
INPUT RAGSOC FLD_CLI_RAGSOCTO
COPY DISPLAY FLD_CLI_RAGSOCFR
OUTPUT FLD_CLI_RAGSOCTO RAGSOC
OUTPUT F_TIPOAPERTO TIPOAPER
GROUP 1 4
HELP "Ragione sociale di fine stampa: vuoto = fine archivio"
STR_EXPR {(#THIS_FIELD == "") || (#THIS_FIELD >= #FLD_CLI_RAGSOCFR)}
WARNING "Limite superiore errato"
END
STRING FLD_FOR_CODFR 6
BEGIN
PROMPT 34 6 ""
COPY USE FLD_CLI_CODFR
INPUT TIPOCF "F"
INPUT CODCF FLD_FOR_CODFR
COPY DISPLAY FLD_CLI_CODFR
OUTPUT FLD_FOR_CODFR CODCF
GROUP 2 3
HELP "Codice C/F di inizio stampa: vuoto = inizio archivio"
END
STRING FLD_FOR_CODTO 6
BEGIN
PROMPT 48 6 ""
COPY USE FLD_FOR_CODFR
INPUT TIPOCF "F"
INPUT CODCF FLD_FOR_CODTO
COPY DISPLAY FLD_CLI_CODFR
OUTPUT FLD_FOR_CODTO CODCF
GROUP 2 3
HELP "Codice C/F di fine stampa: vuoto = fine archivio"
NUM_EXPR {(#THIS_FIELD == 0) || (#THIS_FIELD >= #FLD_FOR_CODFR)}
WARNING "Limite superiore errato"
END
STRING FLD_FOR_RAGSOCFR 50 29
BEGIN
PROMPT 34 9 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF "F"
INPUT RAGSOC FLD_FOR_RAGSOCFR
COPY DISPLAY FLD_CLI_RAGSOCFR
OUTPUT FLD_FOR_RAGSOCFR RAGSOC
OUTPUT F_TIPOAPERFR TIPOAPER
GROUP 2 4
HELP "Ragione sociale di inizio stampa: vuoto = inizio archivio"
END
STRING FLD_FOR_RAGSOCTO 50 29
BEGIN
PROMPT 34 11 ""
COPY USE FLD_FOR_RAGSOCFR
INPUT TIPOCF "F"
INPUT RAGSOC FLD_FOR_RAGSOCTO
COPY DISPLAY FLD_CLI_RAGSOCFR
OUTPUT FLD_FOR_RAGSOCTO RAGSOC
OUTPUT F_TIPOAPERTO TIPOAPER
GROUP 2 4
HELP "Ragione sociale di fine stampa: vuoto = fine archivio"
STR_EXPR {(#THIS_FIELD == "") || (#THIS_FIELD >= #FLD_FOR_RAGSOCFR)}
WARNING "Limite superiore errato"
END
STRING F_TIPOAPERFR 1
BEGIN
PROMPT 1 1 ""
FLAGS "HD"
END
STRING F_TIPOAPERTO 1
BEGIN
PROMPT 2 2 ""
FLAGS "HD"
END
BOOLEAN CHK_CG12_MOVIM
BEGIN
PROMPT 4 13 "Solo movimentati"
HELP "Indicare se stampare solo inclusi archivio movimenti"
END
LIST LST_CG12_INTERLINE 2
BEGIN
PROMPT 4 14 "Righe interlinea "
ITEM "0|0"
ITEM "1|1"
ITEM "2|2"
HELP "Indicare il numero di righe di interlinea tra i nominativi"
END
ENDPAGE
ENDMASK

5
src/cg01/cg1200b.h Normal file
View File

@ -0,0 +1,5 @@
#define FLD_CGB_STARTROW 100
#define FLD_CGB_STARTCOL 101
#define FLD_CGB_ROWSET 102
#define FLD_CGB_COLSET 103
#define BUT_CGB_RESET 104

53
src/cg01/cg1200b.uml Normal file
View File

@ -0,0 +1,53 @@
#include "cg1200b.h"
PAGE "Impostazione etichette" -1 -1 45 12
NUMBER FLD_CGB_STARTROW 4
BEGIN
PROMPT 2 1 "Riga di inizio in etichetta "
FLAGS "R"
HELP "Prima riga da stampare nell'etichetta"
END
NUMBER FLD_CGB_STARTCOL 4
BEGIN
PROMPT 2 3 "Colonna di inizio in etichetta "
FLAGS "R"
HELP "Margine sinistro desiderato"
END
NUMBER FLD_CGB_ROWSET 4
BEGIN
PROMPT 2 5 "N. totale di righe etichetta "
FLAGS "R"
HELP "Numero totale di righe per etichetta (altezza)"
END
NUMBER FLD_CGB_COLSET 4
BEGIN
PROMPT 2 7 "N. totale colonne etichetta "
FLAGS "R"
HELP "Numero totale di colonne per etichetta (larghezza)"
END
ENDPAGE
TOOLBAR "" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON BUT_CGB_RESET 2 2
BEGIN
PROMPT -23 -1 "~Reset"
PICTURE TOOL_RESET
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT -33 -1 "Annulla"
END
ENDPAGE
ENDMASK

160
src/cg01/cg1300.cpp Normal file
View File

@ -0,0 +1,160 @@
//********************************
//* Aggiornamento Tipo Attivita' *
//********************************
#include <applicat.h>
#include <isam.h>
#include <mask.h>
#include <progind.h>
#include "cg1.h"
#include "cg1301.h"
#include "cg1302.h"
#include "cg1303.h"
#include "cg1304.h"
#include "cg1305.h"
#include "cg1306.h"
#include "cg1313.h"
#include "cg1314.h"
#include "cglib.h"
#include <mov.h>
class TAgg_attiv : public TSkeleton_application
{
protected:
virtual void main_loop();
public:
void elabora_mov();
};
// HIDDEN TAgg_attiv& app() { return (TAgg_attiv&)main_app(); }
void TAgg_attiv::main_loop()
{
TMask msk("cg1300a");
while (msk.run() == K_ENTER)
{
elabora_mov();
message_box(TR("Aggiornamento completato"));
}
}
void TAgg_attiv::elabora_mov()
{
TRelation rel (LF_MOV);
rel.add(LF_RMOVIVA, "NUMREG=NUMREG",1);
TCursor cursor(&rel,"",1);
TLocalisamfile& mov = rel.lfile();
TLocalisamfile& rmoviva = rel.lfile(LF_RMOVIVA);
//- long ditta = get_firm();
cursor = 0L;
const long nitems = cursor.items();
TProgind p(nitems ? nitems : 1, TR("Aggiornamento in corso...") , TRUE, TRUE, 70);
for (; cursor.pos() < cursor.items(); ++cursor)
{
p.addstatus(1);
const TString16 reg(mov.get(MOV_REG));
if (reg.empty()) continue;
const int annoiva = mov.get_int(MOV_ANNOIVA);
TRegistro registro(reg, annoiva);
const bool att_mista = registro.attivita_mista();
if (att_mista)
{
bool ok = rel.is_first_match(LF_RMOVIVA);
while (ok)
{
const char tipo = rmoviva.get_char("TIPOC");
if (tipo <= ' ')
{
TBill c(rmoviva.get_int("GRUPPO"), rmoviva.get_int("CONTO"), rmoviva.get_long("SOTTOCONTO"));
int tipoatt = c.tipo_att();
rmoviva.put("TIPOATT", tipoatt);
rmoviva.rewrite();
}
ok = rel.next_match(LF_RMOVIVA);
}
}
}
}
int cg1300(int argc, char* argv[])
{
switch (toupper(*argv[2]))
{
case 'A':
{
TAgg_attiv a;
a.run(argc, argv, TR("Aggiornamento tipo attività su movimenti IVA"));
}
break;
case 'B': agg_iban(argc, argv); break; // cg1310
case 'C':
{
TAgg_codatt a;
a.run(argc, argv,TR("Aggiornamento codice attività"));
}
break;
case 'D':
{
TAgg_datacomp a;
a.run(argc, argv,TR("Aggiornamento data competenza"));
}
break;
case 'E':
{
TAgg_codes a;
a.run(argc, argv,TR("Aggiornamento codice esercizio"));
}
break;
case 'F':
{
TAgg_tipodoc a;
a.run(argc, argv,TR("Aggiornamento Tipo documento"));
}
break;
case 'I': agg_opintra(argc, argv); break;
case 'L': controlla_PIVA(argc, argv); break; // cg1309
case 'P':
{
TAgg_nprot a;
a.run(argc, argv,TR("Rinumerazione protocollo IVA"));
}
break;
case 'T':
{
TAgg_tconto a;
a.run(argc, argv, TR("Aggiornamento tipo conto")); // cg1302
}
break;
case 'U':
{
TAgg_tcontoCF a;
a.run(argc, argv, TR("Aggiornamento tipo conto cliente/fornitore")); // cg1314
}
break;
case 'M':
setta_meseliq(argc, argv);
break;
case 'X':
xref_check(argc, argv);
break;
case 'V':
controlla_ivadiff(argc, argv);
break;
case 'Z':
elimina_zoppi(argc, argv);
break;
default:
break;
}
return 0;
}

31
src/cg01/cg1300.h Normal file
View File

@ -0,0 +1,31 @@
#ifndef __CG1300_H
#define __CG1300_H
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_ANNO 103
#define F_REG 104
#define F_PROT 105
#define F_PASS 106
#define F_DA 107
#define F_A 108
#define F_DENATTV 109
#define F_DENATTN 110
#define F_MODE 111
#endif // __CG1300_H

35
src/cg01/cg1300a.uml Normal file
View File

@ -0,0 +1,35 @@
#include "cg1300.h"
PAGE "" -1 -1 70 8
NUMBER F_CODDITTA 5
BEGIN
PROMPT 1 1 "Ditta "
FLAGS "FRD"
USE LF_NDITTE KEY 1
CHECKTYPE REQUIRED
INPUT CODDITTA F_CODDITTA
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
END
STRING F_RAGSOC 50
BEGIN
PROMPT 1 2 "Ragione sociale "
FLAGS "D"
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
#include <stdbar.h>
ENDPAGE
ENDMASK

93
src/cg01/cg1300b.uml Normal file
View File

@ -0,0 +1,93 @@
#include "cg1300.h"
PAGE "Rinumerazione numero protocollo" -1 -1 62 12
GROUPBOX DLG_NULL 60 3
BEGIN
PROMPT 1 0 "@bDitta"
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 ""
FLAGS "FD"
USE LF_NDITTE KEY 1
CHECKTYPE REQUIRED
INPUT CODDITTA F_CODDITTA
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
END
STRING F_RAGSOC 50
BEGIN
PROMPT 9 1 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 60 3
BEGIN
PROMPT 1 3 "@bRegistro IVA"
END
NUMBER F_ANNO 4
BEGIN
PROMPT 2 4 "Anno "
FLAGS "A"
CHECKTYPE REQUIRED
END
STRING F_REG 3
BEGIN
PROMPT 31 4 "Codice "
USE REG SELECT (I0<"3") && (CODTAB[1,4]==#F_ANNO)
INPUT CODTAB[1,4] F_ANNO SELECT
INPUT CODTAB[5,7] F_REG
DISPLAY "Anno " CODTAB[1,4]
DISPLAY "Codice " CODTAB[5,7]
DISPLAY "Descrizione @40" S0
OUTPUT F_ANNO CODTAB[1,4]
OUTPUT F_REG CODTAB[5,7]
OUTPUT F_DA D3
FLAGS "U"
VALIDATE ZEROFILL_FUNC 3
CHECKTYPE REQUIRED
END
RADIOBUTTON F_MODE 1 24
BEGIN
PROMPT 1 6 "@bRipartire da "
ITEM "U|Ultima stampa"
MESSAGE CLEAR,F_PROT
ITEM "N|Numero specificato"
MESSAGE ENABLE,F_PROT
ITEM "A|Inizio anno"
MESSAGE CLEAR,F_PROT
ITEM "P|Uguale a num. doc."
MESSAGE CLEAR,F_PROT
END
DATE F_DA
BEGIN
PROMPT 31 7 "Data "
FLAGS "D"
END
NUMBER F_PROT 5
BEGIN
PROMPT 31 8 "Numero "
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
#include <elabar.h>
ENDPAGE
ENDMASK

105
src/cg01/cg1300c.uml Normal file
View File

@ -0,0 +1,105 @@
#include "cg1300.h"
PAGE "Aggiornamento codice attivita'" -1 -1 72 12
NUMBER F_CODDITTA 5
BEGIN
PROMPT 1 1 "Ditta "
FLAGS "FRD"
USE LF_NDITTE KEY 1
CHECKTYPE REQUIRED
INPUT CODDITTA F_CODDITTA
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
END
STRING F_RAGSOC 50
BEGIN
PROMPT 1 2 "Ragione sociale "
FLAGS "D"
END
BOOLEAN F_PASS
BEGIN
PROMPT 1 4 "Passaggio dati iva a nuova attivita' "
HELP "Indicare se richiedere o no il passaggio dati dalla vecchia alla nuova attivita'"
//MESSAGE TRUE ENABLE,F_DA|ENABLE,F_A|REQUIRED,F_ANNO
MESSAGE TRUE SHOW,1@
//MESSAGE FALSE DISABLE,F_DA|DISABLE,F_A|NORMAL,F_ANNO
MESSAGE FALSE HIDE,1@|RESET,1@
END
NUMBER F_ANNO 4
BEGIN
PROMPT 1 5 "Anno liquidazione iva "
HELP "Introdurre l'anno di liquidazione iva"
GROUP 1
FLAGS "A"
VALIDATE FIXLEN_FUNC 4
CHECKTYPE REQUIRED
END
STRING F_DA 5
BEGIN
PROMPT 1 7 "DA "
HELP "Introdurre il codice della vecchia attivita'"
GROUP 1
FLAGS "RZ"
USE LF_ATTIV
JOIN LF_NDITTE TO LF_ATTIV INTO CODDITTA=CODDITTA
INPUT CODDITTA F_CODDITTA SELECT
INPUT CODATT F_DA
DISPLAY "Codice attivita'" LF_ATTIV->CODATT
DISPLAY "Descrizione @40" LF_ATTIV->DESCR
OUTPUT F_DA LF_ATTIV->CODATT
OUTPUT F_DENATTV LF_ATTIV->DESCR
CHECKTYPE REQUIRED
WARNING "Attivita' assente"
END
STRING F_DENATTV 40
BEGIN
PROMPT 12 7 ""
GROUP 1
FLAGS "D"
END
STRING F_A 5
BEGIN
PROMPT 1 8 "A "
HELP "Introdurre il codice della nuova attivita'"
GROUP 1
FLAGS "RZ"
USE LF_ATTIV
JOIN LF_NDITTE TO LF_ATTIV INTO CODDITTA=CODDITTA
INPUT CODDITTA F_CODDITTA SELECT
INPUT CODATT F_A
DISPLAY "Codice attivita'" LF_ATTIV->CODATT
DISPLAY "Descrizione @40" LF_ATTIV->DESCR
OUTPUT F_A LF_ATTIV->CODATT
OUTPUT F_DENATTN LF_ATTIV->DESCR
CHECKTYPE REQUIRED
WARNING "Attivita' assente"
END
STRING F_DENATTN 40
BEGIN
PROMPT 12 8 ""
GROUP 1
FLAGS "D"
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
#include <stdbar.h>
ENDPAGE
ENDMASK

36
src/cg01/cg1300d.uml Normal file
View File

@ -0,0 +1,36 @@
PAGE "Aggiornamento codice esercizio" -1 -1 72 12
TEXT DLG_NULL
BEGIN
PROMPT -11 1 "ATTENZIONE!"
END
TEXT DLG_NULL
BEGIN
PROMPT -11 2 "Questa procedura ricalcola il codice esercizio"
END
TEXT DLG_NULL
BEGIN
PROMPT -11 3 "di tutti i movimenti di prima nota."
END
TEXT DLG_NULL
BEGIN
PROMPT -11 4 "Si desidera continuare?"
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
#include <stdbar.h>
ENDPAGE
ENDMASK

63
src/cg01/cg1300e.uml Normal file
View File

@ -0,0 +1,63 @@
#include "cg1300.h"
PAGE "Impostazione mese liquidazione" -1 -1 78 10
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 1 "@bRegistro"
END
NUMBER F_ANNO 4
BEGIN
PROMPT 2 2 "Anno "
FLAGS "Z"
END
STRING F_REG 3
BEGIN
PROMPT 2 3 "Codice registro "
USE REG SELECT (I0=1)
FLAGS "UZ"
INPUT CODTAB[1,4] F_ANNO
INPUT CODTAB[5,7] F_REG
DISPLAY "Anno" CODTAB[1,4]
DISPLAY "Codice" CODTAB[5,7]
DISPLAY "Descrizione@50" S0
DISPLAY "Tipo" I0
OUTPUT F_ANNO CODTAB[1,4]
OUTPUT F_REG CODTAB[5,7]
OUTPUT F_RAGSOC S0
CHECKTYPE REQUIRED
WARNING "Registro inesistente"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 25 3 ""
FLAGS "D"
END
NUMBER F_DA 5
BEGIN
PROMPT 2 5 "Da nr. protocollo "
END
NUMBER F_A 5
BEGIN
PROMPT 2 6 "A nr. protocollo "
END
LISTBOX F_PASS 12
BEGIN
PROMPT 27 5 "Mese da impostare "
ITEM "0|<Normale>"
FLAGS "M"
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
#include <stdbar.h>
ENDPAGE
ENDMASK

15
src/cg01/cg1300l.h Normal file
View File

@ -0,0 +1,15 @@
#define F_TIPO 201
#define F_CLIFO 202
#define F_SORT 203
#define F_RESET 204
#define S_DIRTY 101
#define S_CODCF 102
#define S_RAGSOC 103
#define S_SOSPESO 104
#define S_PAIV 105
#define S_COFI 106
#define S_ALLEG 107
#define S_CODALLEG 108
#define S_TIPOPERS 109
#define S_ERROR 110

153
src/cg01/cg1300l.uml Normal file
View File

@ -0,0 +1,153 @@
#include "cg1300l.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON F_RESET 10 2
BEGIN
PROMPT -13 -11 "Deselezione"
END
BUTTON DLG_SAVEREC 10 2
BEGIN
PROMPT -23 -11 ""
PICTURE TOOL_SAVEREC
END
#include <helpbar.h>
ENDPAGE
PAGE "Controllo Partita IVA" 0 0 0 2
RADIOBUTTON F_TIPO 1 28
BEGIN
PROMPT 1 0 "Tipo"
ITEM "C|Clienti"
ITEM "F|Fornitori"
FLAGS "Z"
END
LISTBOX F_SORT 1 14
BEGIN
PROMPT 31 1 "Ordinamento "
ITEM "1|Partita IVA"
ITEM "2|Codice fiscale"
ITEM "3|Codice"
END
SPREADSHEET F_CLIFO 0 -1
BEGIN
PROMPT 0 3 ""
ITEM "@1"
ITEM "Codice@7"
ITEM "Ragione Sociale@50"
ITEM "Sospeso"
ITEM "Partita IVA"
ITEM "Codice Fiscale@16"
ITEM "Allegato@28"
ITEM "Codice allegato"
ITEM "Tipo persona"
ITEM "Problema riscontrato@50"
END
ENDPAGE
ENDMASK
PAGE "Dati" -1 -1 52 14
BOOLEAN S_DIRTY
BEGIN
PROMPT 1 0 "Modificato"
END
NUMBER S_CODCF 7
BEGIN
PROMPT 21 0 "Codice "
FLAGS "D"
END
STRING S_RAGSOC 50
BEGIN
PROMPT 1 1 ""
FLAGS "D"
END
BOOLEAN S_SOSPESO
BEGIN
PROMPT 1 3 "Sospeso"
END
STRING S_PAIV 12
BEGIN
PROMPT 1 4 "Partita IVA "
END
STRING S_COFI 16
BEGIN
PROMPT 1 5 "Codice Fiscale "
END
BUTTON DLG_USER 10 2
BEGIN
PROMPT -1 4 "Allinea"
END
LISTBOX S_ALLEG 1 28
BEGIN
PROMPT 1 6 "Allegato "
ITEM "0|Valido per allegato IVA"
ITEM "1|Non valido per allegato IVA"
ITEM "2|Occasionale"
ITEM "3|Documenti riepilogativi"
ITEM "4|Codice fiscale già inserito"
ITEM "5|Estero CEE"
ITEM "6|Privato"
ITEM "7|Ente pubblico"
ITEM "8|Fallimento/proc.concorsuale"
ITEM "9|Estero NON CEE"
ITEM "C|Scheda carburante"
ITEM "G|Gruppo IVA"
END
NUMBER S_CODALLEG 7
BEGIN
PROMPT 1 7 "Codice allegato"
END
LISTBOX S_TIPOPERS 1 9
BEGIN
PROMPT 1 8 "Allegato "
ITEM "F|Fisica"
ITEM "1|Giuridica"
END
MEMO S_ERROR 50 3
BEGIN
PROMPT 1 9 "Problema riscontrato"
FLAGS "D"
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_LINK 10 2
BEGIN
PROMPT -23 -1 ""
PICTURE TOOL_LINK
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -33 -1 ""
END
ENDPAGE
ENDMASK

3
src/cg01/cg1300m.h Normal file
View File

@ -0,0 +1,3 @@
#define F_CODDITTA 201
#define F_RAGSOC 202

43
src/cg01/cg1300m.uml Normal file
View File

@ -0,0 +1,43 @@
#include "cg1300m.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_ELABORA 10 2
BEGIN
PROMPT -13 -11 "~Elabora"
PICTURE TOOL_ELABORA
MESSAGE EXIT,K_ENTER
END
#include <helpbar.h>
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -33 -1 ""
END
ENDPAGE
PAGE "Controllo IVA Differita" 0 0 0 2
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 2 "Ditta "
FLAGS "FRD"
USE LF_NDITTE KEY 1
CHECKTYPE REQUIRED
INPUT CODDITTA F_CODDITTA
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
END
STRING F_RAGSOC 50
BEGIN
PROMPT 2 6 "Ragione sociale "
FLAGS "D"
END
ENDPAGE
ENDMASK

4
src/cg01/cg1300n.h Normal file
View File

@ -0,0 +1,4 @@
#define F_CODDITTA 201
#define F_RAGSOC 202
#define F_UPDCAUS 203
#define F_UPDMOV 204

53
src/cg01/cg1300n.uml Normal file
View File

@ -0,0 +1,53 @@
#include "cg1300n.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_ELABORA 10 2
BEGIN
PROMPT -13 -11 "~Elabora"
PICTURE TOOL_ELABORA
MESSAGE EXIT,K_ENTER
END
#include <helpbar.h>
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -33 -1 ""
END
ENDPAGE
PAGE "Aggiornamento tipo conto clienti/fornitori" 0 0 0 2
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 2 "Ditta "
FLAGS "FRD"
USE LF_NDITTE KEY 1
CHECKTYPE REQUIRED
INPUT CODDITTA F_CODDITTA
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
END
STRING F_RAGSOC 50
BEGIN
PROMPT 2 4 "Ragione sociale "
FLAGS "D"
END
BOOLEAN F_UPDCAUS
BEGIN
PROMPT 2 6 "Aggiorno le causali"
END
BOOLEAN F_UPDMOV
BEGIN
PROMPT 2 8 "Aggiorno i movimenti"
END
ENDPAGE
ENDMASK

111
src/cg01/cg1301.cpp Normal file
View File

@ -0,0 +1,111 @@
//**************************************************
//* Aggiornamento Flag Operazioni Intracomunitarie *
//**************************************************
#include <applicat.h>
#include <mask.h>
#include <progind.h>
#include <relation.h>
#include <urldefid.h>
#include <mov.h>
#include <rmoviva.h>
#include <causali.h>
class TAgg_opintra : public TApplication
{
TLocalisamfile* _causali;
public:
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG m);
void look_mov();
TAgg_opintra() {};
virtual ~TAgg_opintra() {};
};
bool TAgg_opintra::create()
{
const bool ok = TApplication::create();
if (ok)
{
_causali = new TLocalisamfile(LF_ATTIV);
dispatch_e_menu (BAR_ITEM_ID(1));
}
return ok;
}
bool TAgg_opintra::destroy()
{
delete _causali;
return TApplication::destroy();
}
bool TAgg_opintra::menu(MENU_TAG m)
{
TMask msk("cg1300a");
while (msk.run() == K_ENTER)
{
look_mov();
message_box(TR("Aggiornamento completato"));
//return TRUE;
}
return FALSE;
}
void TAgg_opintra::look_mov()
{
TLocalisamfile caus(LF_CAUSALI);
TRelation rel (LF_MOV);
rel.add(LF_RMOVIVA, "NUMREG=NUMREG",1);
TCursor cursor(&rel,"",1);
TLocalisamfile& mov = rel.lfile();
TLocalisamfile& rmoviva = rel.lfile(LF_RMOVIVA);
// long ditta = get_firm();
cursor = 0L;
const long nitems = cursor.items();
TProgind p(nitems ? nitems : 1, TR("Aggiornamento in corso...") , TRUE, TRUE, 70);
for (; cursor.pos() < cursor.items(); ++cursor)
{
p.addstatus(1);
const TString16 reg(mov.get(MOV_REG));
if (reg.empty()) continue;
const TDate& datareg = mov.get_date(MOV_DATAREG);
if (datareg.year() < 1993) continue; // Meglio cosi'
const TString16 codcaus(mov.get(MOV_CODCAUS));
if (codcaus.not_empty())
{
caus.setkey(1);
caus.put(CAU_CODCAUS, codcaus);
if (caus.read() == NOERR)
{
bool intra = caus.get_bool(CAU_INTRACOM);
bool ok = rel.is_first_match(LF_RMOVIVA);
while (ok)
{
rmoviva.put(RMI_INTRA, intra);
rmoviva.rewrite();
ok = rel.next_match(LF_RMOVIVA);
}
}
}
}
}
void agg_opintra(int argc, char* argv[])
{
TAgg_opintra aoi;
aoi.run(argc, argv, TR("Aggiornamento flag op. intracomunitarie"));
}

7
src/cg01/cg1301.h Normal file
View File

@ -0,0 +1,7 @@
void agg_opintra(int argc, char* argv[]);
void elimina_zoppi(int argc, char* argv[]);
void setta_meseliq(int argc, char* argv[]);
void controlla_PIVA(int argc, char* argv[]);
void agg_iban(int argc, char* argv[]);
void xref_check(int argc, char* argv[]);
void controlla_ivadiff(int argc, char* argv[]);

149
src/cg01/cg1302.cpp Normal file
View File

@ -0,0 +1,149 @@
//****************************
//* Aggiornamento Tipo Conto *
//****************************
#include <mask.h>
#include <recarray.h>
#include <mov.h>
#include <rmoviva.h>
#include <nditte.h>
#include "cg1302.h"
#include "cglib.h"
const int TAgg_tconto::look_reg (const char* cod, int anno)
{
TString8 codtab;
codtab.format("%4d%-3s", anno, cod);
int tipo_reg = cache().get("REG", codtab).get_int("I0");
return tipo_reg;
}
bool TAgg_tconto::user_create()
{
_rel = new TRelation(LF_MOV);
_rel->add(LF_RMOVIVA, "NUMREG=NUMREG",1);
add_cursor(new TCursor(_rel,"",1));
add_file (LF_MOV);
add_file (LF_RMOVIVA);
open_files(LF_PCON, LF_NDITTE, LF_TAB, 0);
return TRUE;
}
bool TAgg_tconto::user_destroy()
{
delete _rel;
return TRUE;
}
bool TAgg_tconto::set_print(int)
{
TMask msk("cg1300a");
while (msk.run() == K_ENTER)
{
setta_intestazione();
printer().footerlen(5);
return TRUE;
}
return FALSE;
}
void TAgg_tconto::postclose_print()
{
message_box(TR("Aggiornamento tipo conto completato:\nE' necessario ricalcolare la liquidazione."));
}
bool TAgg_tconto::preprocess_page(int file,int counter)
{
if (counter) return TRUE;
TCursor* cur = current_cursor();
if (file == LF_MOV)
{
const TString& reg = cur->curr().get(MOV_REG);
if (reg.empty()) return FALSE;
}
else if (file == LF_RMOVIVA)
{
TRectype pcon(LF_PCON);
int gruppo = cur->curr(LF_RMOVIVA).get_int(RMI_GRUPPO);
int conto = cur->curr(LF_RMOVIVA).get_int(RMI_CONTO);
long sottoconto = cur->curr(LF_RMOVIVA).get_long(RMI_SOTTOCONTO);
long numreg = cur->curr(LF_RMOVIVA).get_long(RMI_NUMREG);
int nrigimp = cur->curr(LF_RMOVIVA).get_int("RIGAIMP");
TBill tc (gruppo,conto,0L);
tc.read(pcon);
if (!pcon.empty())
if (pcon.get_char("TMCF") != '\0')
return FALSE;
tc.set(gruppo,conto,sottoconto);
tc.read(pcon);
if (!pcon.empty())
{
if (tc.sospeso())
{
set_row(1, FR("@4g%7ld@23g%3d@31g%3d@37g%3d@45g%6ld ** Conto sospeso **"),
numreg, nrigimp, gruppo, conto, sottoconto);
return TRUE;
}
int t = tc.tipo_cr();
TString16 reg = cur->curr().get(MOV_REG);
int annoiva = cur->curr().get_int(MOV_ANNOIVA);
const int tipo = look_reg(reg, annoiva); //cerca il tipo del registro
//aggiorno sul movimento iva il tipo costo/ricavo
//con quello letto dal piano conti
_rel->lfile(LF_RMOVIVA).put(RMI_TIPOCR, t);
if (tipo == 1 && (t == 2 || t == 3))
_rel->lfile(LF_RMOVIVA).put(RMI_TIPOCR, 4);
_rel->lfile(LF_RMOVIVA).rewrite();
}
else
{
set_row(1, FR("@4g%7ld@23g%3d@31g%3d@37g%3d@45g%6ld ** Conto inesistente **"),
numreg, nrigimp, gruppo, conto, sottoconto);
return TRUE;
}
return FALSE;
}
return TRUE;
}
void TAgg_tconto::setta_intestazione()
{
int soh = 1;
TString sep(132);
TString ragsoc(50);
TLocalisamfile nditte(LF_NDITTE);
nditte.zero();
nditte.put(NDT_CODDITTA, get_firm());
if (nditte.read() == NOERR)
ragsoc = nditte.get(NDT_RAGSOC);
reset_header();
sep << TR("Ditta ") << get_firm();
sep << " " << ragsoc;
sep.left_just(132);
set_header (soh++, (const char*) sep);
sep = "";
sep << FR("Data @> Pag. @#");
sep.right_just(127);
sep.overwrite (TR("AGGIORNAMENTO TIPO CONTO SU MOVIMENTI IVA - Lista errori"));
set_header (soh++, (const char*)sep);
sep.fill('-');
set_header (soh++, (const char *) sep);
set_header (soh++, TR("Numero Registrazione Riga Gruppo Conto Sottoconto"));
set_header (soh++, (const char *) sep);
set_header (soh, "");
}

19
src/cg01/cg1302.h Normal file
View File

@ -0,0 +1,19 @@
#include <printapp.h>
class TAgg_tconto : public TPrintapp
{
TRelation* _rel;
public:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int i);
virtual bool preprocess_page(int, int);
virtual void postclose_print();
void setta_intestazione();
const int look_reg(const char*, int);
TAgg_tconto() {};
virtual ~TAgg_tconto() {};
};

190
src/cg01/cg1303.cpp Normal file
View File

@ -0,0 +1,190 @@
//***********************************
//* Rinumerazione numero protocollo *
//***********************************
#include <mask.h>
#include <progind.h>
#include <tabutil.h>
#include <relation.h>
#include <recarray.h>
#include "cg1300.h"
#include "cg1303.h"
#include <causali.h>
#include <mov.h>
#include <partite.h>
HIDDEN TAgg_nprot& app() { return (TAgg_nprot&) main_app(); }
HIDDEN bool filtra_mov(const TRelation* r)
{
const TRectype& mov = r->curr();
const int annoiva = mov.get_int(MOV_ANNOIVA);
TString4 reg = mov.get(MOV_REG);
const TAgg_nprot& a = app();
if (reg.full() && reg != a.reg())
{
const TString& codcaus = mov.get(MOV_CODCAUS);
const TString& truereg = cache().get(LF_CAUSALI, codcaus, CAU_REG);
if (truereg != reg && truereg == a.reg()) // REG incoerente
reg = truereg;
}
return a.anno() == annoiva && a.reg() == reg;
}
void TAgg_nprot::main_loop()
{
TMask msk("cg1300b");
while (msk.run() == K_ENTER)
{
_anno = msk.get_int(F_ANNO);
_reg = msk.get(F_REG);
rinumera_prot(msk.get(F_MODE)[0], msk.get_long(F_PROT));
msk.reset(F_REG);
}
}
bool TAgg_nprot::rinumera_prot(char mode, long last_prot)
{
TTable reg("REG");
TString8 s; s.format("%04d%s", _anno, (const char*)_reg);
reg.put("CODTAB", s);
if (reg.read() != NOERR)
return error_box(FR("Impossibile leggere il registro %s del %d"),
(const char*)_reg, _anno);
TFast_isamfile fastmov(LF_MOV);
TRelation rel (LF_MOV);
rel.add(LF_PARTITE, "NREG=NUMREG", 2);
TLocalisamfile& mov = rel.lfile();
TLocalisamfile& part= rel.lfile(LF_PARTITE);
TCursor cursor(&rel, "", 2);
cursor.set_filterfunction(filtra_mov);
const long nitems = cursor.items();
if (nitems == 0)
return warning_box(TR("Non ci sono movimenti da rinumerare"));
const bool sc_enabled = ini_get_bool(CONFIG_DITTA,"cg", "GesSal");
cursor.freeze();
cursor = 0L;
TProgind p(nitems, TR("Elaborazione in corso...") , FALSE, TRUE);
if (mode == 'N' || mode == 'U')
{
long protiva, uprotiva;
for (; cursor.pos() < nitems; ++cursor)
{
p.addstatus(1);
protiva = mov.get_long(MOV_PROTIVA);
uprotiva = mov.get_long(MOV_UPROTIVA);
if (mode == 'U')
{
if (mov.get_bool(MOV_REGST))
{
last_prot = uprotiva > protiva ? uprotiva : protiva;
continue;
}
break;
}
if (mode == 'N')
{
if (protiva != last_prot && uprotiva != last_prot)
continue;
else
{
if (uprotiva != 0l)
last_prot = uprotiva;
break;
}
}
}
if (last_prot > 0 && mode == 'N')
{
if (protiva != last_prot && uprotiva != last_prot) //sono alla fine del file
return error_box(TR("Non esiste la registrazione con protocollo %ld:\nrinumerazione non avvenuta"), last_prot);
++cursor;
}
}
long nprot,uprot,dprot;
dprot = uprot = 0L;
nprot = last_prot;
long first_nreg = 0, first_nprot = 0;
long last_nreg = 0, last_nprot = 0;
for (; cursor.pos() < nitems; ++cursor)
{
p.addstatus(1);
const long protiva = mov.get_long(MOV_PROTIVA);
const long uprotiva = mov.get_long(MOV_UPROTIVA);
const TString& reg = mov.get(MOV_REG);
if (mode == 'P') // Modalità speciale COMARI protiva = numdoc
{
nprot = mov.get_long(MOV_NUMDOC);
dprot = uprot = 0;
}
else
{
nprot = nprot+1+dprot; //stile RPG
dprot = (uprotiva == 0L) ? 0L : (uprotiva - protiva);
uprot = (uprotiva == 0L) ? 0L : (nprot + dprot);
}
if (nprot != protiva || uprot != uprotiva || reg != _reg)
{
mov.put(MOV_REG, _reg);
mov.put(MOV_PROTIVA, nprot);
mov.put(MOV_UPROTIVA, uprot);
int err = mov.rewrite();
if (err != NOERR)
{
cantwrite_box("Movimenti IVA");
break;
}
}
// Aggiorna il nr di prot. iva sul file partite
if (sc_enabled && rel.is_first_match(LF_PARTITE))
{
do
{
part.put(PART_PROTIVA,nprot);
part.rewrite();
} while (rel.next_match(LF_PARTITE));
}
const long numreg = mov.get_long(MOV_NUMREG);
if (first_nreg <= 0)
{
first_nreg = numreg;
first_nprot = nprot;
}
last_nreg = numreg;
last_nprot = nprot;
}
reg.put("I5", nprot + dprot);
reg.rewrite();
return message_box(FR("Rinumerazione numero protocollo completata\n"
"dal movimento %ld (%ld) al movimento %ld (%ld)"),
first_nreg, first_nprot, last_nreg, last_nprot);
}

15
src/cg01/cg1303.h Normal file
View File

@ -0,0 +1,15 @@
#include <applicat.h>
class TAgg_nprot : public TSkeleton_application
{
TString4 _reg;
int _anno;
protected:
bool rinumera_prot(char mode, long last_prot);
public:
int anno() const { return _anno; }
const TString& reg() const { return _reg; }
virtual void main_loop();
};

172
src/cg01/cg1304.cpp Normal file
View File

@ -0,0 +1,172 @@
//*****************************************************
//* Aggiornamento codice attivita' su progressivi IVA *
//*****************************************************
#include "cg1300.h"
#include "cg1304.h"
#include "cglib.h"
#include <mask.h>
#include <progind.h>
#include <tabutil.h>
bool TAgg_codatt::create()
{
open_files(LF_TAB, 0);
return TSkeleton_application::create();
}
bool TAgg_codatt::destroy()
{
return TSkeleton_application::destroy();
}
void TAgg_codatt::main_loop()
{
TProgind* pri;
TMask msk("cg1300c");
while (msk.run() == K_ENTER)
{
pri = new TProgind(2,TR("Aggiornamento in corso..."),FALSE,TRUE,50);
_pass = msk.get_bool(F_PASS);
if (_pass)
{
_anno = msk.get_int(F_ANNO);
_da = msk.get(F_DA); //se c'e' _da c'e' anche _a e viceversa
_a = msk.get(F_A); //_da e' la vecchia attivita'
//_a e' la nuova attivita'
pri->addstatus(1);
aggiorna_att("PIM");
aggiorna_att("PUM");
aggiorna_att("POM");
aggiorna_att("PAM");
aggiorna_att("PPA");
aggiorna_att("%PLA");
aggiorna_att("PLM");
}
else
{
pri->addstatus(1);
cancella_rec();
}
pri->addstatus(1);
msk.reset();
//msk.reset(F_ANNO);
//msk.reset(F_DA);
//msk.reset(F_A);
delete pri;
message_box(TR("Aggiornamento codice attivita' completato"));
}
}
void TAgg_codatt::cancella_rec()
{
TTable plm("PLM");
for (plm.first(); !plm.eof(); plm.next())
plm.remove();
TTable pum("PUM");
for (pum.first(); !pum.eof(); pum.next())
pum.remove();
TTable pom("POM");
for (pom.first(); !pom.eof(); pom.next())
pom.remove();
TTable pam("PAM");
for (pam.first(); !pam.eof(); pam.next())
pam.remove();
TTable ppa("PPA");
for (ppa.first(); !ppa.eof(); ppa.next())
ppa.remove();
//non e' indicata la vecchia attivita' => :
TTable pim("PIM");
for (pim.first(); !pim.eof(); pim.next())
{
const TString80 codtab = pim.get("CODTAB");
int anno = atoi(codtab.mid(0,4));
const TString16 codatt = codtab.mid(4,5);
const TString16 codreg = codtab.mid(10,3);
if (codreg.not_empty())
{
TRegistro reg(codreg,anno);
if (!reg.name().empty()) //se esiste quel registro (ma perche' non dovrebbe?)
{
const TString16 cda = reg.attivita();
if (codatt != cda)
{
TRectype vecchio (pim.curr());
TRectype nuovo (pim.curr());
const TString80 cc = codtab.sub(9);
TString80 cod;
cod << anno << cda << cc;
nuovo.put("CODTAB", cod);
pim.write(nuovo);
pim.read(vecchio);
pim.remove();
}
}
}
}
TTable pla("%PLA");
TRecfield r_ditta(pla.curr(),"CODTAB",0,4);
const long firm = get_firm();
for (pla.first(); !pla.eof(); pla.next())
{
if (firm != (long)r_ditta)
continue;
pla.remove();
}
}
void TAgg_codatt::aggiorna_att(const char* nome)
{
const bool is_pla = nome == "%PLA";
const long firm = get_firm();
TTable tab(nome);
tab.setkey(1);
tab.zero();
TString16 chiave;
TString16 old_att(_da); old_att.right_just(5,'0');
TString16 new_att(_a); new_att.right_just(5,'0');
if (is_pla) chiave << firm;
chiave << _anno << old_att;
tab.put("CODTAB", chiave);
TRectype curr (tab.curr());
TRecfield r_ditta(tab.curr(),"CODTAB",0,4);
tab.read(_isgteq);
for (; !tab.eof(); tab.next())
{
if (is_pla)
{
if (firm != (long)r_ditta) break;
}
else
if (tab.curr() != curr) break;
const TString80 codtab = tab.get("CODTAB");
//const TString16 cod_att = codtab.mid(4,5); //e' uguale a old_att
if (old_att != new_att)
{
TRectype vecchio (tab.curr());
TRectype nuovo (tab.curr());
TString80 cc;
if (is_pla)
cc = codtab.sub(13);
else
cc = codtab.sub(9);
TString80 cod;
if (is_pla) cod << firm;
cod << _anno << new_att << cc;
nuovo.put("CODTAB", cod);
tab.write(nuovo);
tab.read(vecchio);
tab.remove();
}
}
}

18
src/cg01/cg1304.h Normal file
View File

@ -0,0 +1,18 @@
#include <applicat.h>
class TAgg_codatt : public TSkeleton_application
{
TString16 _da, _a;
int _anno;
bool _pass;
public:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
void cancella_rec();
void aggiorna_att(const char*);
TAgg_codatt() : _da(""), _a(""), _anno(0) {};
virtual ~TAgg_codatt() {};
};

100
src/cg01/cg1305.cpp Normal file
View File

@ -0,0 +1,100 @@
// sistema il codice esercizio di tutti i movimenti
#include "cg1305.h"
#include "cglib.h"
#include <mask.h>
#include <progind.h>
#include <recarray.h>
#include <relation.h>
#include <recset.h>
#include <mov.h>
#include <rmov.h>
#include <rmoviva.h>
static bool aggiorna_righe(TRecord_array& righe, int annoes)
{
bool qualcuno_sbagliato = false;
for (int i = righe.last_row(); i > 0; i = righe.pred_row(i))
{
const TRectype& riga = righe.row(i);
const int anno = riga.get_int(RMV_ANNOES);
if (anno != annoes)
{
qualcuno_sbagliato = true;
break;
}
}
if (qualcuno_sbagliato)
{
// Serve per righe iva non zerofilled
TString4 sanno; sanno.format("%04d", annoes);
righe.renum_key(RMV_ANNOES, sanno);
righe.rewrite();
}
return qualcuno_sbagliato;
}
void TAgg_codes::main_loop()
{
open_files(LF_MOV, LF_RMOV, LF_RMOVIVA, LF_TAB, 0);
TMask msk("cg1300d");
if (msk.run() == K_ENTER)
{
long modified_recs=0L;
int err = NOERR;
TISAM_recordset mov("USE MOV");
const TRecnotype nrec = mov.items();
if (nrec > 0) // Dummy test for progind destruction
{
TEsercizi_contabili esercizi;
TProgind pi(nrec, TR("Aggiornamento in corso..."), true, true);
TRecord_array righe(LF_RMOV, RMV_NUMRIG);
TRecord_array righeiva(LF_RMOVIVA, RMI_NUMRIG);
TRectype riga(LF_RMOV);
TRectype rigaiva(LF_RMOVIVA);
for (bool ok = mov.move_first(); ok && err == NOERR; ok = mov.move_next())
{
if (!pi.addstatus(1))
break;
const TDate data = mov.get(MOV_DATACOMP).as_date();
const int oldcodes = mov.get(MOV_ANNOES).as_int();
const int newcodes = esercizi.date2esc(data);
bool cambiato = false;
if (oldcodes != newcodes)
{
TRectype& curr = mov.cursor()->curr();
curr.put(MOV_ANNOES, newcodes);
err = curr.rewrite(mov.cursor()->file());
cambiato = err == NOERR;
}
if (err == NOERR)
{
const long numreg = mov.get(MOV_NUMREG).as_int();
riga.put(RMV_NUMREG, numreg);
righe.read(riga);
cambiato |= aggiorna_righe(righe, newcodes);
rigaiva.put(RMI_NUMREG, numreg);
righeiva.read(rigaiva);
cambiato |= aggiorna_righe(righeiva, newcodes);
}
if (cambiato)
modified_recs++;
}
}
if (err != NOERR)
warning_box(FR("Aggiornamento codice esercizio interrotta. Rilevato errore %d in riscrittura"),err);
else
message_box(FR("Aggiornamento codice esercizio completata. Modificati %ld movimenti.\nE' necessario procedere col ricalcolo saldi"), modified_recs);
}
}

9
src/cg01/cg1305.h Normal file
View File

@ -0,0 +1,9 @@
#ifndef __APPLICAT_H
#include <applicat.h>
#endif
class TAgg_codes : public TSkeleton_application
{
protected:
virtual void main_loop();
};

46
src/cg01/cg1306.cpp Normal file
View File

@ -0,0 +1,46 @@
// sistema la data di competenza di tutti i movimenti
#include <isam.h>
#include <progind.h>
#include "cg1300.h"
#include "cg1306.h"
#include <mov.h>
inline TAgg_datacomp& app() { return (TAgg_datacomp&) main_app(); }
void TAgg_datacomp::main_loop()
{
if (set_firm())
aggiorna_datacomp();
}
void TAgg_datacomp::aggiorna_datacomp()
{
TLocalisamfile mov(LF_MOV);
long nrecs = (long) mov.eod();
long modified_recs = 0L;
TDate datacomp;
TDate datareg;
int err = NOERR;
TProgind p(nrecs, TR("Aggiornamento in corso..."), TRUE, TRUE, 100);
for (mov.first(); !mov.eof() && err == NOERR; mov.next())
{
p.addstatus(1);
datacomp = mov.get_date(MOV_DATACOMP);
datareg = mov.get_date(MOV_DATAREG);
if (datacomp > datareg)
{
mov.put(MOV_DATACOMP,datareg);
mov.rewrite();
modified_recs++;
}
}
if (err != NOERR)
warning_box(FR("Aggiornamento codice esercizio interrotta. Rilevato errore %d in riscrittura"),err);
else
message_box(FR("Aggiornamento data competenza completata. Modificati %ld movimenti."),modified_recs);
}

11
src/cg01/cg1306.h Normal file
View File

@ -0,0 +1,11 @@
#include <applicat.h>
class TAgg_datacomp : public TSkeleton_application
{
void aggiorna_datacomp();
public:
virtual void main_loop();
TAgg_datacomp() {};
virtual ~TAgg_datacomp() {};
};

564
src/cg01/cg1307.cpp Normal file
View File

@ -0,0 +1,564 @@
#include <applicat.h>
#include <defmask.h>
#include <isam.h>
#include <prefix.h>
#include <progind.h>
#include <recarray.h>
#include <relation.h>
#include <recset.h>
#include <sheet.h>
#include <urldefid.h>
#include "cgsaldac.h"
#include <clifo.h>
#include <mov.h>
#include <nditte.h>
#include <pconti.h>
#include <rmov.h>
#include <rmoviva.h>
class TElimina_zoppi : public TSkeleton_application
{
TArray _decoders;
protected:
static bool test_riga_partita(const TRectype& pagsca);
static bool test_row_file(int rmov, TString_array& arr);
static bool test_scrow_file(int rmov, TString_array& arr);
static bool test_head_file(TString_array& arr);
static int kill_game(long numreg, int numrig);
static int kill_pagsca(long recno, int lfile);
static int kill_row(long numreg, char tipor, int numrig);
static bool firm_handler(TMask_field& f, KEY k);
public:
const char* app_name() const {return TR("Righe prima nota errate");}
const char* decode(int num, const char* key, const char* field);
const char* decode(int num, long key, const char* field);
virtual void main_loop();
};
inline TElimina_zoppi& app() { return (TElimina_zoppi&)main_app(); }
bool TElimina_zoppi::firm_handler(TMask_field& f, KEY k)
{
bool ok = true;
if (k == K_F9)
{
TArray_sheet sheet(-1, -1, 70, 20, TR("Scelta ditta"), HR("Codice|Ragione Sociale@50"));
TString_array& rows = sheet.rows_array();
prefix().firms(rows);
FOR_EACH_ARRAY_ROW(rows, r, row)
{
const long cod = row->get_long(0);
row->add(app().decode(LF_NDITTE, cod, NDT_RAGSOC));
if (cod == prefix().get_codditta())
sheet.select(r);
}
if (sheet.run() == K_ENTER)
{
f.set(sheet.row().get(0));
k = K_TAB;
}
}
if (k == K_ENTER || k == K_TAB && f.focusdirty())
{
long cod = atol(f.get());
ok = prefix().exist(cod);
if (ok)
prefix().set_codditta(cod);
else
f.error_box(FR("La ditta %05ld non è attivata per la contabilità"), cod);
}
return ok;
}
const char* TElimina_zoppi::decode(int num, const char* key, const char* field)
{
TDecoder* dec = (TDecoder*)_decoders.objptr(num);
if (dec == NULL)
{
dec = new TDecoder(num, field);
_decoders.add(dec);
}
return dec->decode(key);
}
const char* TElimina_zoppi::decode(int num, long key, const char* field)
{
TString8 k; k.format("%ld", key);
return decode(num, k, field);
}
bool TElimina_zoppi::test_row_file(int lf_rmov, TString_array& arr)
{
bool ok = true;
TLocalisamfile mov(LF_MOV);
TString8 query; query.format("USE %d", lf_rmov);
TISAM_recordset recset(query);
TString msg;
switch (lf_rmov)
{
case LF_RMOV : msg = TR("Controllo righe contabili"); break;
case LF_RMOVIVA: msg = TR("Controllo righe iva"); break;
case LF_PARTITE: msg = TR("Controllo righe saldaconto"); break;
default: CHECKD(0, "Invalid row file %d", lf_rmov); break;
}
msg << ": 0";
TProgress_monitor pi(recset.items(), msg);
TToken_string riga, descr;
long reg, last_reg = 0, found = 0;
bool reg_killed = false;
char tipo;
int gruppo, conto;
long sottoconto;
const TRectype& row = recset.cursor()->curr();
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
if (!pi.add_status(1))
{
ok = false;
break;
}
if (lf_rmov == LF_PARTITE)
reg = row.get_long(PART_NREG);
else
reg = row.get_long(MOV_NUMREG);
if (reg != last_reg)
{
if (reg > 0)
{
mov.put(MOV_NUMREG, reg);
reg_killed = mov.read() != NOERR;
}
else
reg_killed = lf_rmov != LF_PARTITE;
last_reg = reg;
}
if (reg_killed)
{
found++;
const int colon = msg.find(':');
msg.cut(colon+2);
msg << found;
pi.set_text(msg);
switch (lf_rmov)
{
case LF_RMOV :
riga.format(" |%6ld|C%4d", reg, row.get_int(RMV_NUMRIG));
riga.add(row.get(RMV_ANNOES));
riga.add(row.get_real(RMV_IMPORTO).string("."));
riga << ' ' << row.get(RMV_SEZIONE);
break;
case LF_RMOVIVA:
riga.format(" |%6ld|I%4d", reg, row.get_int(RMI_NUMRIG));
riga.add(row.get(RMI_ANNOES));
riga.add(row.get_real(RMI_IMPONIBILE).string("."));
riga << " ";
break;
case LF_PARTITE:
riga.format(" |%6ld|P%4d", reg, row.get_int(PART_NRIGA));
riga.add(row.get(PART_ANNO));
riga.add(row.get_real(PART_IMPORTO).string("."));
riga << ' ' << row.get(PART_SEZ);
break;
default: CHECKD(0, "Invalid row file %d", lf_rmov); break;
};
descr.cut(0);
if (lf_rmov == LF_PARTITE)
{
tipo = row.get_char(PART_TIPOCF);
gruppo = row.get_int(PART_GRUPPOCL);
conto = row.get_int(PART_CONTOCL);
sottoconto = row.get_long(PART_SOTTOCONTO);
descr = row.get(PART_DESCR);
}
else
{
tipo = row.get_char(RMV_TIPOC);
gruppo = row.get_int(RMV_GRUPPO);
conto = row.get_int(RMV_CONTO);
sottoconto = row.get_long(RMV_SOTTOCONTO);
if (lf_rmov == LF_RMOV)
descr = row.get(PART_DESCR);
}
riga.add(gruppo);
riga.add(conto);
riga.add(sottoconto);
if (descr.empty())
{
if (tipo == 'C' || tipo == 'F')
{
descr << tipo << '|' << sottoconto;
descr = app().decode(LF_CLIFO, descr, CLI_RAGSOC);
}
else
{
descr << gruppo << '|' << conto << '|' << sottoconto;
descr = app().decode(LF_PCON, descr, PCN_DESCR);
}
}
riga.add(descr);
arr.add(riga);
}
}
return ok;
}
bool TElimina_zoppi::test_riga_partita(const TRectype& pagsca)
{
const int nriga = pagsca.get_int(PART_NRIGA);
bool ok = nriga > 0;
if (nriga < 9999)
{
TToken_string k;
k = pagsca.get(PART_TIPOCF);
k.add(pagsca.get(PART_GRUPPO), 1);
k.add(pagsca.get(PART_CONTO), 2);
k.add(pagsca.get(PART_SOTTOCONTO), 3);
k.add(pagsca.get(PART_ANNO));
k.add(pagsca.get(PART_NUMPART));
k.add(nriga);
const int tipomov = atoi(app().decode(LF_PARTITE, k, PART_TIPOMOV));
ok = tipomov == 1;
}
return ok;
}
bool TElimina_zoppi::test_scrow_file(int lf_pagsca, TString_array& arr)
{
bool ok = true;
TString8 query; query.format("USE %d", lf_pagsca);
TISAM_recordset recset(query);
long found = 0;
TString msg;
msg << TR("Controllo righe ");
switch (lf_pagsca)
{
case LF_SCADENZE: msg << TR("scadenze"); break;
case LF_PAGSCA : msg << TR("pagamento"); break;
default: CHECKD(0, "Invalid row file %d", lf_pagsca); break;
}
msg << ": 0";
msg.center_just(50);
TProgress_monitor pi(recset.items(), msg);
TToken_string riga, descr;
const TRectype& pagsca = recset.cursor()->curr();
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
if (!pi.add_status())
{
ok = false;
break;
}
bool to_kill = false;
if (pagsca.get_int(SCAD_NRIGA) <= 0 || pagsca.get_int(SCAD_NRATA) <= 0)
to_kill = true;
switch (lf_pagsca)
{
case LF_PAGSCA:
if (pagsca.get_int(PAGSCA_NRIGP) <= 0)
to_kill = true;
if (!test_riga_partita(pagsca))
to_kill = true;
break;
case LF_SCADENZE:
if (!test_riga_partita(pagsca))
to_kill = true;
break;
default:
break;
}
if (to_kill)
{
found++;
const int colon = msg.find(':');
msg.cut(colon+2);
msg << found;
pi.set_text(msg);
riga.format(" |%6ld", recset.cursor()->file().recno());
if (lf_pagsca == LF_SCADENZE)
riga.add("S");
else
riga.add("G");
riga << lf_pagsca;
riga.add(pagsca.get(SCAD_ANNO));
riga.add(TR("Partita ")); riga << pagsca.get(SCAD_NUMPART);
riga.add(pagsca.get(SCAD_GRUPPO));
riga.add(pagsca.get(SCAD_CONTO));
riga.add(pagsca.get(SCAD_SOTTOCONTO));
if (lf_pagsca == LF_SCADENZE)
riga.add(TR("Riga scadenze inconsistente"));
else
riga.add(TR("Riga pagamenti inconsistente"));
arr.add(riga);
}
}
return ok;
}
bool TElimina_zoppi::test_head_file(TString_array& arr)
{
TEsercizi_contabili esc;
bool ok = true;
TISAM_recordset recset("USE MOV");
TLocalisamfile rmov(LF_RMOV);
TLocalisamfile rmoviva(LF_RMOVIVA);
TString msg;
msg << TR("Controllo testate di prima nota: 0");
msg.center_just(50);
TProgress_monitor pi(recset.items(), msg);
TToken_string riga, descr;
const TRectype& mov = recset.cursor()->curr();
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
if (!pi.add_status())
{
ok = false;
break;
}
long reg = mov.get_long(MOV_NUMREG);
bool good = reg > 0;
if (good)
{
//int rmoviva_err = NOERR;
rmov.put(RMV_NUMREG, reg);
rmov.put(RMV_NUMRIG, 1);
int rmov_err = rmov.read();
/*rmoviva.put(RMI_NUMREG, reg);
rmoviva.put(RMI_NUMRIG, 1);
int rmoviva_err = rmoviva.read();*/
good = rmov_err == NOERR;
if (good)
{
const int annoes = mov.get_int(MOV_ANNOES);
good = annoes > 0 && esc.exist(annoes);
}
}
if (!good)
{
riga.format(" |%6ld|T", reg);
riga.add(mov.get(MOV_ANNOES));
riga.add(mov.get_real(MOV_TOTDOC).string("."));
riga << " | | ";
riga.add(mov.get(MOV_CODCF));
descr = mov.get(MOV_DESCR);
if (descr.empty())
{
char tipo = mov.get_char(MOV_TIPO);
if (tipo == 'C' || tipo == 'F')
{
descr << tipo << '|' << mov.get(MOV_CODCF);
descr = app().decode(LF_CLIFO, descr, CLI_RAGSOC);
}
}
riga.add(descr);
arr.add(riga);
}
}
return ok;
}
int TElimina_zoppi::kill_game(long numreg, int numrig)
{
TPartite_array games;
games.add_numreg(numreg);
for (TPartita* game = games.first(); game; game = games.next())
{
bool update = false;
const int fattura = game->prima_fattura(numreg);
if (fattura > 0)
{
game->scollega_pagamenti(fattura, 1);
game->rimuovi_riga(fattura);
update = true;
}
const int rigapag = game->primo_pagamento(numreg);
if (rigapag > 0)
{
int p;
for (p = game->last(); p > 0; p = game->pred(p))
{
TRiga_partite& part = game->riga(p);
if (part.is_fattura())
{
for (int r = part.rate(); r > 0; r--)
{
TRiga_scadenze& scad = part.rata(r);
for (int s = scad.last(); s > 0; s = scad.pred(s))
{
const TRiga_partite& sum = game->riga(s);
if (sum.get_long(PART_NREG) == numreg)
{
game->elimina_pagamento(p, r, s);
update = true;
}
}
}
}
}
TRecord_array& unas = game->unassigned();
for (int u = unas.last_row(); u > 0; u = unas.pred_row(u))
{
const TRiga_partite& sum = game->riga(u);
if (sum.get_long(PART_NREG) == numreg)
{
game->elimina_pagamento(TPartita::UNASSIGNED, 0, u);
update = true;
}
}
// Elimina le righe sopravvissute
for (p = game->last(); p > 0; p = game->pred(p))
{
TRiga_partite& part = game->riga(p);
if (part.get_long(PART_NREG) == numreg)
{
game->rimuovi_riga(p);
update = true;
}
}
}
if (update)
game->rewrite();
}
return NOERR;
}
int TElimina_zoppi::kill_pagsca(long recno, int lfile)
{
CHECK(lfile == LF_SCADENZE || lfile == LF_PAGSCA, "Invalid file");
TLocalisamfile pagsca(lfile);
int err = pagsca.readat(recno);
if (err == NOERR)
err = pagsca.remove();
return err;
}
int TElimina_zoppi::kill_row(long numreg, char tipor, int numrig)
{
int lf = 0;
switch (tipor)
{
case 'C': lf = LF_RMOV; break;
case 'I': lf = LF_RMOVIVA; break;
case 'T': lf = LF_MOV; break;
case 'P': return kill_game(numreg, numrig);
case 'S':
case 'G': return kill_pagsca(numreg, numrig);
default : break;
}
TLocalisamfile rmov(lf);
rmov.put(RMV_NUMREG, numreg);
if (lf != LF_MOV)
rmov.put(RMV_NUMRIG, numrig);
int err = rmov.read();
if (err == NOERR)
{
err = rmov.remove();
if (err == NOERR && lf == LF_MOV)
{
// Cancella anche le righe collegate alla testata
for (int r = 1; kill_row(numreg, 'C', r) == NOERR; r++);
for (int r = 1; kill_row(numreg, 'I', r) == NOERR; r++);
}
}
return err;
}
void TElimina_zoppi::main_loop()
{
open_files(LF_CLIFO, LF_NDITTE, LF_PCON, LF_MOV, LF_RMOV, LF_RMOVIVA, LF_PARTITE, LF_SCADENZE, LF_PAGSCA, 0);
TMask m(app_name(), 1, 30, 5);
m.add_number(DLG_USER, 0, TR("Codice ditta "), 1, 1, 5, "BUF").set_handler(firm_handler);
m.add_button(DLG_ELABORA, 0, "", -12, -1, 10, 2, "", BMP_ELABORA).set_exit_key(K_ENTER);
m.add_button(DLG_QUIT, 0, "", -22, -1, 10, 2);
while (m.run() != K_QUIT)
{
TArray_sheet sheet(0, 0, 0, 0, app().app_name(), HR("@1|Codice@6|Riga@5|Anno@R|Importo@20R|Grp@R|Cnt@R|Sottoc@R|Descrizione@50"));
TString_array& arr = sheet.rows_array();
bool ok = test_row_file(LF_RMOV, arr);
if (ok)
ok = test_row_file(LF_RMOVIVA, arr);
if (ok)
ok = test_head_file(arr);
if (ok)
ok = test_row_file(LF_PARTITE, arr);
if (ok)
ok = test_scrow_file(LF_SCADENZE, arr);
if (ok)
ok = test_scrow_file(LF_PAGSCA, arr);
if (ok)
arr.sort();
if (ok && sheet.run() == K_ENTER)
{
const long total = sheet.checked();
if (total > 0 &&
delete_box(FR("Confermare l'eliminazione di %ld righe."), total))
{
TProgress_monitor pi(total, TR("Eliminazione righe..."));
FOR_EACH_ARRAY_ROW(arr, i, riga)
{
if (sheet.checked(i))
{
if (!pi.add_status())
break;
TString16 str = riga->get(2);
char tipor = str[0];
int numrig = atoi(str.mid(1));
kill_row(riga->get_long(1), tipor, numrig);
}
}
message_box(TR("Si consiglia di eseguire il ricalcolo\ndei saldi dal menu di prima nota."));
}
}
}
}
void elimina_zoppi(int argc, char* argv[])
{
TElimina_zoppi ez;
ez.run(argc, argv, ez.app_name());
}

80
src/cg01/cg1308.cpp Normal file
View File

@ -0,0 +1,80 @@
// Setta il mese liquidazione sui movimenti del registro vendite
#include <applicat.h>
#include <mask.h>
#include <progind.h>
#include <relation.h>
#include "cglib.h"
#include <mov.h>
#include "cg1300.h"
class TImposta_meseliq : public TSkeleton_application
{
protected:
static bool prot_handler(TMask_field& f, KEY k);
virtual void main_loop();
public:
TImposta_meseliq () {};
virtual ~TImposta_meseliq() {};
};
bool TImposta_meseliq::prot_handler(TMask_field& f, KEY k)
{
if (k == K_ENTER && f.to_check(k))
{
const TMask& m = f.mask();
const long da = m.get_long(F_DA);
const long a = m.get_long(F_A);
if (a < da)
return f.error_box(TR("L'intervallo dei numeri protocollo specificati non e' valido."));
}
return TRUE;
}
void TImposta_meseliq::main_loop()
{
TString expr, es, reg;
TDate d(TODAY);
TMask m("cg1300e");
m.set_handler(F_A, prot_handler);
m.set_handler(F_DA, prot_handler);
TRelation r(LF_MOV);
TCursor c(&r);
TLocalisamfile& fl = c.file();
TEsercizi_contabili esc;
while (m.run() != K_QUIT)
{
const int meseliq = m.get_int(F_PASS);
d.set_year(m.get_int(F_ANNO));
es.format("%04d",esc.date2esc(d));
expr.format("(ANNOES==\"%s\")&&(REG==\"%s\")&&(STR((STR(PROTIVA))>=%ld))&&(STR((STR(PROTIVA))<=%ld))",
(const char*)es, (const char*) m.get(F_REG), m.get_long(F_DA), m.get_long(F_A));
c.setfilter(expr); // Setta l'espressione filtro
const long items = c.items();
if (items == 0)
continue;
TProgind* pi = new TProgind(c.items(), TR("Aggiornamento mese liquidazione in corso..."), FALSE, TRUE, 50);
for (c = 0L; c.pos() < items; c+=1L) //scorre i movimenti e li aggiorna
{
if (c.pos() & 0x7F)
pi->addstatus(1L);
fl.put(MOV_MESELIQ,meseliq);
fl.rewrite();
}
delete pi;
warning_box(FR("Aggiornati %ld records."),c.items());
}
}
void setta_meseliq(int argc, char* argv[])
{
TImposta_meseliq a;
a.run(argc, argv, TR("Impostazione mese liq."));
}

373
src/cg01/cg1309.cpp Normal file
View File

@ -0,0 +1,373 @@
#include <applicat.h>
#include <automask.h>
#include <defmask.h>
#include <isam.h>
#include <progind.h>
#include <recset.h>
#include <validate.h>
#include "cg1300l.h"
#include <clifo.h>
///////////////////////////////////////////////////////////
// TCheck_PIVA_mask
///////////////////////////////////////////////////////////
class TCheck_PIVA_mask : public TAutomask
{
TToken_string _row;
int _last_row;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
void load_sheet();
bool save_sheet();
void update_sheet();
void dirty_sheet_row();
public:
TCheck_PIVA_mask() : TAutomask("cg1300l"), _last_row(0) {}
};
int sort(TSheet_field & s, int r1, int r2)
{
const int key = s.mask().get_int(F_SORT);
switch (key)
{
case 1:
{
const TString & p1 = s.get_str_row_cell(r1, S_PAIV);
const TString & p2 = s.get_str_row_cell(r2, S_PAIV);
return strcmp(p1, p2);
}
break;
case 2:
{
const TString & c1 = s.get_str_row_cell(r1, S_COFI);
const TString & c2 = s.get_str_row_cell(r2, S_COFI);
return strcmp(c1, c2);
}
break;
case 3:
{
long c1 = s.get_long_row_cell(r1, S_CODCF);
long c2 = s.get_long_row_cell(r2, S_CODCF);
return c1 - c2;
}
break;
}
return 0;
}
// Carica lo sheet in base alle impostazioni correnti (F_CLIFO, F_COFI)
void TCheck_PIVA_mask::load_sheet()
{
TSheet_field& s = sfield(F_CLIFO);
// Elenco di tutti i clienti (o fornitori)
TISAM_recordset clifo("USE CLIFO\nFROM TIPOCF=#TIPO\nTO TIPOCF=#TIPO");
clifo.set_var("#TIPO", TVariant(get(F_TIPO)));
TProgind pi(clifo.items(), TR("Scansione anagrafica"));
TRectype paiv_rec(LF_CLIFO);
TRectype cofi_rec(LF_CLIFO);
s.reset();
for (bool ok = clifo.move_first(); pi.addstatus() && ok; ok = clifo.move_next())
{
TToken_string msg(50, '\n');
const TString4 tipo = clifo.get(CLI_TIPOCF).as_string();
const long codice = clifo.get(CLI_CODCF).as_int();
TString4 alleg = clifo.get(CLI_ALLEG).as_string();
const TString4 stato = clifo.get(CLI_STATOPAIV).as_string();
const TString4 tipoana = clifo.get(CLI_TIPOAPER).as_string();
const TString4 occas = clifo.get(CLI_OCCAS).as_string();
if (occas.blank())
{
const TString & paiv = clifo.get(CLI_PAIV).as_string();
if (stato.blank() || stato == "IT" || !real::is_natural(paiv))
{
if (tipoana != "F" && paiv.blank())
{
if (alleg != "6" && alleg != "7")
msg.add(TR("Partita IVA mancante"));
}
else
if (tipoana != "F" && !pi_check("", paiv))
msg.add(TR("Partita IVA errata"));
else
{
if (paiv.full())
{
paiv_rec.zero();
paiv_rec.put(CLI_TIPOCF, tipo);
paiv_rec.put(CLI_PAIV, paiv);
TCursor c(new TRelation(LF_CLIFO), "", 5, &paiv_rec, &paiv_rec);
const int items = c.items();
if (items > 1)
{
for (c = 0L; codice == c.curr().get_long(CLI_CODCF) && c.pos() < items; ++c);
msg.add(format(FR("Partita IVA già utilizzato per il codice %ld"), c.curr().get_long(CLI_CODCF)));
}
}
}
const TString cofi = clifo.get(CLI_COFI).as_string();
if (cofi.blank())
msg.add(TR("Codice Fiscale mancante"));
else
if (!cf_check("", cofi))
msg.add(TR("Codice Fiscale errato"));
else
{
if (cofi.full())
{
cofi_rec.zero();
cofi_rec.put(CLI_TIPOCF, tipo);
cofi_rec.put(CLI_COFI, cofi);
TCursor c(new TRelation(LF_CLIFO), "", 4, &cofi_rec, &cofi_rec);
const int items = c.items();
if (items > 1)
{
for (c = 0L; codice == c.curr().get_long(CLI_CODCF) && c.pos() < items; ++c);
msg.add(format(FR("Codice fiscale già utilizzato per il codice %ld"), c.curr().get_long(CLI_CODCF)));
}
}
}
if (msg.full())
{
// Riga sheet: Selezione|Codice|RagioneSociale|P.IVA|C.Fiscale|Messaggio
int r = s.set_row_cell(S_CODCF, codice);
s.set_row_cell(S_RAGSOC, clifo.get(CLI_RAGSOC).as_string(), r);
s.set_row_cell(S_PAIV, paiv, r);
s.set_row_cell(S_COFI, cofi, r);
if (alleg.blank())
alleg = "0";
s.set_row_cell(S_ALLEG, alleg, r);
s.set_row_cell(S_SOSPESO, clifo.get(CLI_SOSPESO).as_bool(), r);
s.set_row_cell(S_CODALLEG, clifo.get(CLI_CODALLEG).as_int(), r);
s.set_row_cell(S_TIPOPERS, clifo.get(CLI_TIPOPERS).as_string(), r);
msg.trim();
s.set_row_cell(S_ERROR, msg, r);
}
}
}
}
s.sort(sort);
s.force_update();
_row = s.items() > 0 ? s.row(0) : EMPTY_STRING;
_last_row = 0;
}
// Salva le righe spuntate dello sheet
bool TCheck_PIVA_mask::save_sheet()
{
// Tengo pronto il file per fare gli aggiornamenti
TLocalisamfile clifo(LF_CLIFO);
TSheet_field& s = sfield(F_CLIFO);
if (s.items() > 0L && yesnocancel_box(TR("Si desidera salvare le modifiche?")) == K_YES)
{
// Scandisco solo le righe "spuntate"
FOR_EACH_SHEET_ROW_LOOP(s, r)
if (s.get_bool_row_cell(r, S_DIRTY))
{
clifo.put(CLI_TIPOCF, get(F_TIPO));
const long codcf = s.get_long_row_cell(r, S_CODCF);
clifo.put(CLI_CODCF, codcf);
int err = clifo.read(_isequal, _lock); // Locco il cliente da aggiornare
if (err == NOERR)
{
clifo.put(CLI_PAIV, s.get_str_row_cell(r, S_PAIV));
clifo.put(CLI_COFI, s.get_str_row_cell(r, S_COFI));
TString alleg = s.get_str_row_cell(r, S_ALLEG);
if (alleg == "0")
alleg.cut(0);
clifo.put(CLI_ALLEG, alleg);
clifo.put(CLI_SOSPESO, s.get_bool_row_cell(r, S_SOSPESO));
err = clifo.rewrite(); // Aggiorno il record
}
if (err != NOERR)
return error_box("Errore %d durante l'aggiornamento del codice %ld", err, codcf);
}
}
return true;
}
// Salva eventuali modifiche pendenti e ricarica lo sheet
// in base alle impostazioni correnti sulla maschera principale
void TCheck_PIVA_mask::update_sheet()
{
if (save_sheet())
load_sheet();
}
// Segna come modificata (F_DIRTY) la riga corrente dello spreadsheet
void TCheck_PIVA_mask::dirty_sheet_row()
{
TSheet_field& s = sfield(F_CLIFO);
s.set_row_cell(S_DIRTY, true, s.selected());
s.force_update(s.selected());
}
bool TCheck_PIVA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_TIPO:
if (e == fe_init || e == fe_modify)
update_sheet();
break;
case F_SORT:
if (e == fe_modify)
{
TSheet_field& s = sfield(F_CLIFO);
s.sort(sort);
s.force_update();
}
break;
case F_RESET:
if (e == fe_button)
{
TSheet_field& s = sfield(F_CLIFO);
FOR_EACH_SHEET_ROW_LOOP(s, r)
s.set_row_cell(S_DIRTY, false, r);
s.force_update();
}
break;
case F_CLIFO:
if (e == se_query_modify || e == se_enter)
{
TSheet_field& s = sfield(F_CLIFO);
int r = s.selected();
if (_last_row != r && _row != s.row(_last_row))
{
s.set_row_cell(S_DIRTY, true, _last_row);
s.force_update(_last_row);
}
_row = s.row(r);
_last_row = r;
}
break;
case DLG_SAVEREC:
if (e == fe_button)
{
if (save_sheet())
load_sheet();
}
else
if (e == fe_close)
save_sheet();
break;
case S_PAIV:
if (e == fe_modify)
{
if (!pi_check("", o.get()))
return o.error_box("Partita IVA errata");
}
break;
case S_COFI:
if (e == fe_modify)
{
if (!cf_check("", o.get()))
return o.error_box("Codice fiscale errato");
}
break;
case S_SOSPESO:
if (e == fe_modify)
{
TSheet_field& s = sfield(F_CLIFO);
int r = s.selected();
s.set_row_cell(S_SOSPESO, o.get_bool(), r);
s.force_update(r);
}
break;
case DLG_USER:
if (e == fe_button)
{
TSheet_field& s = sfield(F_CLIFO);
TMask& m = o.mask();
TLocalisamfile clifo(LF_CLIFO); // Riempio la chiave 1 di CLIFO
clifo.put(CLI_TIPOCF, get(F_TIPO));
clifo.put(CLI_CODCF, m.get(S_CODCF));
if (clifo.curr().edit()) // Modifica interattiva del cliente
{
if (clifo.read() == NOERR) // Se riesco a rileggerlo ...
{
int r = s.selected();
s.set_row_cell(S_RAGSOC, clifo.get(CLI_RAGSOC), r); // aggiorno la ragione sociale,
s.set_row_cell(S_COFI, clifo.get(CLI_COFI), r); // il codice fiscale
s.set_row_cell(S_PAIV, clifo.get(CLI_PAIV), r); // la partita IVA
TString4 alleg = clifo.get(CLI_ALLEG);
if (alleg.blank())
alleg = "0";
s.set_row_cell(S_ALLEG, alleg, r); // l'allegato
s.set_row_cell(S_SOSPESO, clifo.get(CLI_SOSPESO), r); // il sospeso
s.force_update(r);
}
}
}
break;
default: break;
}
return true;
}
///////////////////////////////////////////////////////////
// TCheck_PIVA
///////////////////////////////////////////////////////////
class TCheck_PIVA : public TSkeleton_application
{
public:
virtual void main_loop();
};
void TCheck_PIVA::main_loop()
{
TSheet_field::set_line_number_width(7);
TCheck_PIVA_mask m;
m.run();
}
void controlla_PIVA(int argc, char* argv[])
{
TCheck_PIVA cp;
cp.run(argc, argv, TR("Controllo Partita IVA"));
}

140
src/cg01/cg1310.cpp Normal file
View File

@ -0,0 +1,140 @@
#include <applicat.h>
#include <automask.h>
#include <progind.h>
#include <recarray.h>
#include <recset.h>
#include <relation.h>
#include <reputils.h>
#include <clifo.h>
#include "cfban.h"
///////////////////////////////////////////////////////////
// TAgg_IBAN_mask
///////////////////////////////////////////////////////////
class TAgg_IBAN_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TAgg_IBAN_mask() : TAutomask("cg1310") { }
};
bool TAgg_IBAN_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return true;
}
///////////////////////////////////////////////////////////
// TIBAN_app
///////////////////////////////////////////////////////////
class TIBAN_app : public TSkeleton_application
{
protected:
void update(TRecord_array& a, TLog_report& log) const;
void elabora() const;
public:
virtual void main_loop();
};
void TIBAN_app::update(TRecord_array& a, TLog_report& log) const
{
const TRectype& row = a.row(a.last_row());
TString msg;
msg << TR("Aggiornamento banca del ")
<< row.get(CFBAN_TIPOCF) << '/' << row.get_long(CFBAN_CODCF)
<< " : " << row.get(CFBAN_ABI) << '/' << row.get(CFBAN_CAB)
<< " " << row.get(CFBAN_IBAN);
log.log(0, msg);
const int err = a.rewrite();
if (err != NOERR)
{
msg.format(FR("Errore %d durante l'aggiornamento del file delle banche"), err);
log.log(2, msg);
}
}
void TIBAN_app::elabora() const
{
TLog_report log;
TISAM_recordset clifo("USE CLIFO");
TProgind pi(clifo.items(), clifo.cursor()->file(0).description());
TRectype& curr = clifo.cursor()->curr();
for (bool ok = clifo.move_first(); ok; ok = clifo.move_next())
{
if (!pi.addstatus(1))
break;
const TString80 iban = curr.get(CLI_IBAN);
const TString8 abi = curr.get(CLI_CODABI);
const TString8 cab = curr.get(CLI_CODCAB);
if (iban.len() > 15 || atoi(cab) >= 1000)
{
TString16 key; key.format("%c|%ld|V", curr.get_char(CLI_TIPOCF), curr.get_long(CLI_CODCF));
TRecord_array cfban(key, LF_CFBAN);
if (iban.len() > 15)
{
int r = -1;
for (r = cfban.last_row(); r > 0; r = cfban.pred_row(r))
{
const TRectype& row = cfban.row(r);
if (row.get(CFBAN_IBAN) == iban)
break;
}
if (r <= 0)
{
TRectype& row = cfban.row(-1, true);
row.put(CFBAN_IBAN, iban);
if (iban.starts_with("IT"))
{
row.put(CFBAN_ABI, iban.mid(5, 5));
row.put(CFBAN_CAB, iban.mid(10, 5));
row.put(CFBAN_NUMCC, iban.mid(15));
}
update(cfban, log);
}
}
else
{
int r = -1;
for (r = cfban.last_row(); r > 0; r = cfban.pred_row(r))
{
const TRectype& row = cfban.row(r);
if (row.get(CFBAN_ABI) == abi && row.get(CFBAN_CAB) == cab)
break;
}
if (r <= 0)
{
TRectype& row = cfban.row(-1, true);
row.put(CFBAN_ABI, abi);
row.put(CFBAN_CAB, cab);
row.put(CFBAN_NUMCC, curr.get(CLI_NUMCC));
update(cfban, log);
}
}
}
}
log.preview();
}
void TIBAN_app::main_loop()
{
TAgg_IBAN_mask m;
if (m.run() == K_ENTER)
elabora();
}
void agg_iban(int argc, char* argv[])
{
TIBAN_app a;
a.run(argc, argv, TR("Allineamento IBAN"));
}

39
src/cg01/cg1310.uml Normal file
View File

@ -0,0 +1,39 @@
PAGE "Allineamento IBAN" -1 -1 60 5
NUMBER 101 5
BEGIN
PROMPT 1 1 "Ditta "
FLAGS "FD"
USE LF_NDITTE
INPUT CODDITTA 101
OUTPUT 102 RAGSOC
CHECKTYPE REQUIRED
END
STRING 102 50
BEGIN
PROMPT 7 2 ""
FLAGS "D"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 3 "Questa procedura allinea il campo IBAN in anagrafica clienti/fornitori "
END
TEXT DLG_NULL
BEGIN
PROMPT 1 4 "con l'elenco delle banche associate alla corrispondente anagrafica"
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
#include <elabar.h>
ENDPAGE
ENDMASK

154
src/cg01/cg1311.cpp Normal file
View File

@ -0,0 +1,154 @@
#include <applicat.h>
#include <automask.h>
#include <progind.h>
#include <recarray.h>
#include <recset.h>
#include <relation.h>
#include <reputils.h>
#include <sheet.h>
#include <mov.h>
#include <nditte.h>
#include <partite.h>
#include <rmov.h>
class TXRef_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly);
void test_rmov();
public:
TXRef_mask(const char* title);
};
void TXRef_mask::test_rmov()
{
TLog_report log;
TFast_isamfile mov(LF_MOV);
TFast_isamfile part(LF_PARTITE); part.setkey(2);
TString msg;
TISAM_recordset rmov_set("USE RMOV");
const TRectype& rmov = rmov_set.cursor()->curr();
{
TProgress_monitor pm(rmov_set.items(), TR("Scansione righe contabili"));
for (bool ok = rmov_set.move_first(); ok; ok = rmov_set.move_next())
{
const long numreg = rmov.get_long(RMV_NUMREG);
const int numrig = rmov.get_int(RMV_NUMRIG);
msg.format(FR("Riga %3d del movimento %7ld del %s: "), numrig, numreg, (const char*)rmov.get(RMV_DATAREG));
if (numreg != mov.get_long(MOV_NUMREG))
{
mov.put(MOV_NUMREG, numreg);
if (mov.read() != NOERR)
mov.zero();
}
if (numreg != mov.get_long(MOV_NUMREG))
{
msg << TR("manca il record di testata");
log.log(2, msg);
}
if (rmov.get_char(RMV_ROWTYPE) == 'K')
{
part.put(PART_NREG, numreg);
part.put(PART_NUMRIG, numrig);
if (part.read() != NOERR)
{
msg << TR("manca il record di saldaconto");
log.log(2, msg);
}
}
if (!pm.add_status())
break;
}
}
log.preview();
}
bool TXRef_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case DLG_USER:
if (e == fe_button)
{
TArray_sheet sheet(-1, -1, 70, 20, TR("Scelta ditta"), HR("Codice|Ragione Sociale@50"));
TToken_string row;
TLocalisamfile ditte(LF_NDITTE);
FOR_EACH_FILE_RECORD(ditte)
{
const long cod = ditte.get_long(NDT_CODDITTA);
if (prefix().exist(cod))
{
row.cut(0);
row.add(cod);
row.add(ditte.get(NDT_RAGSOC));
const long pos = sheet.add(row);
if (cod == prefix().get_codditta())
sheet.select(pos);
}
}
if (sheet.run() == K_ENTER)
set(DLG_USER, sheet.row().get(0), 0x3);
return false;
}
if (e == fe_modify || e == fe_close)
{
const long cod = atol(o.get());
if (prefix().exist(cod))
prefix().set_codditta(cod);
else
return error_box(FR("La ditta %05ld non è attivata per la contabilità"), cod);
}
break;
case DLG_SELECT:
if (e == fe_button)
{
test_rmov();
return false;
}
break;
default:
break;
}
return true;
}
TXRef_mask::TXRef_mask(const char* title) : TAutomask(title, 1, 30, 5)
{
add_number(DLG_USER, 0, TR("Codice ditta "), 1, 1, 5, "BUF");
add_button(DLG_SELECT, 0, "", -12, -1, 10, 2);
add_button(DLG_QUIT, 0, "", -22, -1, 10, 2);
set_handlers();
}
class TXRef_check: public TSkeleton_application
{
public:
const char* app_name() const { return TR("Controllo integrità archivi"); }
virtual void main_loop();
};
void TXRef_check::main_loop()
{
open_files(LF_CLIFO, LF_NDITTE, LF_PCON, LF_MOV, LF_RMOV, LF_RMOVIVA,
LF_PARTITE, LF_SCADENZE, LF_PAGSCA, 0);
TXRef_mask m(app_name());
while (m.run() != K_QUIT);
}
void xref_check(int argc, char* argv[])
{
TXRef_check ez;
ez.run(argc, argv, ez.app_name());
}

498
src/cg01/cg1312.cpp Normal file
View File

@ -0,0 +1,498 @@
#include <applicat.h>
#include <automask.h>
#include <defmask.h>
#include <files.h>
#include <isam.h>
#include <progind.h>
#include <recarray.h>
#include <recset.h>
#include <reputils.h>
#include <utility.h>
#include <validate.h>
#include <modaut.h>
#include "cgsaldac.h"
#include "cglib.h"
#include "cg1300m.h"
#include <clifo.h>
#include <mov.h>
#include <occas.h>
#include <rmoviva.h>
#include <pagsca.h>
#define AGR_PCON1 201
#define AGR_PCON2 202
///////////////////////////////////////////////////////////
// TCheck_ivadiff_mask
///////////////////////////////////////////////////////////
class TCheck_ivadiff_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TCheck_ivadiff_mask() : TAutomask("cg1300m") { }
};
// Carica lo sheet in base alle impostazioni correnti (F_CLIFO, F_COFI)
bool TCheck_ivadiff_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_CODDITTA:
break;
default: break;
}
return true;
}
///////////////////////////////////////////////////////////
// TCheck_ivadiff
///////////////////////////////////////////////////////////
static bool partita_chiusa_al(const TPartita& p, const TDate& d)
{
bool c = p.chiusa();
if (c)
{
const TImporto imp = p.calcola_saldo_al(true, d, d, d);
c = imp.is_zero();
}
return c;
}
class TCheck_ivadiff : public TSkeleton_application
{
protected:
void check_year(long firm);
public:
virtual void main_loop();
};
static void LOG_IVA_DIFF(TLog_report & rep, TTrec & trec, const TRectype& id)
{
TString msg(300);
for (int f = 0; f < trec.fields(); f++)
{
TToken_string tmp = trec.fielddef(f);
const TString val = id.get(tmp.get(0));
const TFieldtypes type = (TFieldtypes) tmp.get_int();
int len = tmp.get_int(); len = len < 10 ? 10 : len;
if ((type < _intfld) || (type == _charfld) || (type == _boolfld))
len = -len;
const TString16 fmt = format("%%%ds", len);
msg << format(fmt, (const char *) val) << " ";
}
rep.log(0, msg);
msg.cut(0);
for (int i = 0; i < 132; i++)
msg <<'_';
rep.log(0, msg);
}
void TCheck_ivadiff::check_year(long firm)
{
if (!(has_module(SCAUT, CHK_DONGLE) && ini_get_bool(CONFIG_DITTA, "cg", "GesSal")))
{
warning_box("Per l'iva differita o per cassa è necessario il saldaconto");
return;
}
TRelation rel(LF_MOV);
rel.add(LF_RMOVIVA,"NUMREG=NUMREG");
rel.add(LF_PCON,"GRUPPO=GRUPPO|CONTO=CONTO",1,LF_RMOVIVA,AGR_PCON1);
rel.add(LF_PCON,"GRUPPO=GRUPPO|CONTO=CONTO|SOTTOCONTO=SOTTOCONTO",1,LF_RMOVIVA,AGR_PCON2);
rel.add(LF_CAUSALI,"CODCAUS=CODCAUS");
TCursor cur(&rel, "", 4);
TLocalisamfile & mov = cur.relation()->lfile();
TLocalisamfile & rmoviva = cur.relation()->lfile(LF_RMOVIVA);
TRectype from(cur.curr()); from.zero();
TRectype to(from);
TString8 fromreg("~"), toreg("0");
TRelation regrel("REG");
TCursor reg(&regrel);
TString4 codreg;
long items = reg.items();
TLocalisamfile id(LF_IVADIFF);
TRectype& idcurr = id.curr();
TString pimsg; pimsg << TR("Ricalcolo IVA differita ditta ") << firm;
TLog_report rep(pimsg, "bagn011a");
TTrec trec;
TToken_string msg;
TToken_string tmp;
rep.set_orientation(2);
trec.get(LF_IVADIFF);
for (int f = 0; f < trec.fields(); f++)
{
TToken_string tmp = trec.fielddef(f);
const TString val = tmp.get(0);
const TFieldtypes type = (TFieldtypes) tmp.get_int();
int len = tmp.get_int(); len = len < 10 ? 10 : len;
if ((type < _intfld) || (type == _charfld) || (type == _boolfld))
len = -len;
const TString16 fmt = format("%%%ds", len);
msg << format(fmt, (const char *) val) << " ";
}
rep.log(0, "");
rep.log(0, msg);
rep.log(0, "");
for (reg = 0L; reg.pos() < items; ++reg)
{
codreg = reg.curr().get("CODTAB").mid(4);
if (codreg < fromreg)
fromreg = codreg;
if (codreg > toreg)
toreg = codreg;
}
from.put(MOV_REG, fromreg);
to.put(MOV_REG, toreg);
const TString16 filter("LIQDIFF==\"X\"");
cur.freeze(false);
cur.setregion(from, to);
cur.setfilter(filter);
items = cur.items();
cur.freeze();
{
TProgress_monitor pi(items, pimsg, false);
for (cur = 0L; cur.pos() < items; ++cur)
{
if (!pi.set_status(cur.pos()))
break;
const TDate data = mov.get(MOV_DATAREG);
const int year = data.year();
const TDate primo(1, 1, year);
const TDate ultimo(31, 12, year);
TString16 key; key.format("%05ld%04d", firm, year);
TRectype & lia = (TRectype &) cache().get("%LIA", key);
const TString4 freqviva = lia.get("S7");
const TString4 codreg = mov.get("REG");
TString16 s; s << year; s << format("%-3s", (const char *) codreg);
const TRegistro & reg = cached_registro(codreg, year);
const int liqmonth = mov.get_int(MOV_MESELIQ);
const TString4 tipodoc = mov.get(MOV_TIPODOC);
const bool corrisp = reg.corrispettivi();
const tiporeg tipomov = reg.tipo_registro(); // 1=Vendite; 2=Acquisti
TPartite_array arrpart; // Partite interessate
TPointer_array pagscatt; // Righe di pagsca interessate
const bool iva_diff = is_IVA_diff(mov.curr());
const char sezfat = tipomov == vendita ? 'D' : 'A'; // Sezione preferita per fatture decisa in base a vendita->'A' o acquisto->'D'
const char sezpag = (sezfat=='D') ? 'A' : 'D';
const long numreg = mov.get_long(MOV_NUMREG);
real tot_incassato, tot_da_incassare;
bool game_found = false;
arrpart.add_numreg(numreg);
const TPartita* p = arrpart.first();
const int row = p ? p->mov2rig(numreg, 0) : 0;
game_found = row > 0;
if (game_found)
{
const TRiga_partite& rp = p->riga(row);
TImporto pg_per, nc_per;
const bool chiusa = partita_chiusa_al(*p, ultimo);
rp.calcola_pagato_periodo(primo, eotime, pg_per, nc_per, &pagscatt);
if (pagscatt.items() >= 2)
{
// Fondo tra loro le righe generate dallo stesso pagamento
for (int p = pagscatt.last(); p > 0; p--)
{
const TRectype& p0 = (const TRectype&)pagscatt[p];
const TRectype& p1 = (const TRectype&)pagscatt[p-1];
if (p0.get_int(PAGSCA_NRIGP) == p1.get_int(PAGSCA_NRIGP))
{
const real imp = p0.get_real(PAGSCA_IMPORTO);
((TRectype&)p1).add(PAGSCA_IMPORTO, imp);
pagscatt.destroy(p, true);
}
}
}
if (iva_diff)
{
TPointer_array pagscaold;
TImporto pg_tot, nc_tot;
rp.calcola_pagato_periodo(TDate(0L), ultimo, pg_tot, nc_tot, &pagscaold);
// Controllo se ci siam persi delle note di credito negli anni scorsi
if (!nc_tot.is_zero() && pagscaold.items() > pagscatt.items())
{
FOR_EACH_ARRAY_ITEM(pagscaold, i, obj)
{
const TRectype& pagsca = *(const TRectype*)obj;
const int anno = pagsca.get_int(PAGSCA_ANNO);
const int nrigp = pagsca.get_int(PAGSCA_NRIGP);
// Appartiene all'anno scorso?
if (anno < year && nrigp < 999) // 9999 on pagsca -> 999 on ivadiff
{
const TPartita& p = arrpart.partita(pagsca);
const TRiga_partite& rp = p.riga(nrigp);
// E' veramente una nota di credito?
if (rp.tipo() == tm_nota_credito)
{
bool found = false;
FOR_EACH_ARRAY_ITEM(pagscatt, j, ps)
{
if (ps == obj)
{
found = true;
break;
}
}
if (!found)
{
TLocalisamfile id(LF_IVADIFF);
id.put(RMI_NUMREG, rmoviva.get(RMI_NUMREG));
id.put(RMI_NUMRIG, rmoviva.get(RMI_NUMRIG));
id.put("NUMPRO", nrigp);
if (id.read(_isequal) != NOERR || id.get_int("ANNOLIQ") == 0)
pagscatt.add(obj);
}
}
}
}
TImporto incasso = pg_tot;
TImporto saldo = rp.importo(false);
incasso += nc_tot;
saldo += incasso;
saldo.normalize(sezfat);
incasso.normalize(sezpag);
if (saldo.valore() > ZERO)
tot_da_incassare = saldo.valore();
if (incasso.valore() > ZERO)
tot_incassato = incasso.valore();
}
}
TISAM_recordset recset("USE IVADIFF\nFROM NUMREG=#NR\nTO NUMREG=#NR");
recset.set_var("#NR", numreg);
TLocalisamfile& id = recset.cursor()->file();
TImporto saldo;
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
const TImporto imp(id.get_char("SEZIONE"), id.get_real("IMPORTO"));
saldo += imp;
}
bool idchiusa = saldo.is_zero();
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
id.put("CHIUSA", idchiusa);
id.rewrite();
}
do
{
const int rmi_tipoatt = max(rmoviva.get_int(RMI_TIPOATT), 1); // Poteva capitare tipoatt == 0
const TString4 codiva = rmoviva.get(RMI_CODIVA);
TCodiceIVA civa(codiva);
if (!civa.ok())
{
error_box(FR("Codice IVA \"%s\" non riconosciuto alla riga %d del movimento %ld."),
(const char*)codiva, rmoviva.get_int(RMI_NUMRIG), rmoviva.get_long(RMI_NUMREG));
continue;
}
const real imponibile_orig = rmoviva.get_real(RMI_IMPONIBILE);
const real imposta_orig = rmoviva.get_real(RMI_IMPOSTA);
const real lordo_orig = imponibile_orig + imposta_orig;
char sezfat = (tipomov == vendita) ? 'D' : 'A';
const TDate datareg = mov.get(MOV_DATAREG);
const int numrig = rmoviva.get_int(RMI_NUMRIG);
id.put(RMI_NUMREG, numreg);
id.put(RMI_NUMRIG, numrig);
id.put("NUMPRO", 0);
if (id.read(_isequal) != NOERR)
{
id.zero();
id.put(RMI_NUMREG, numreg);
id.put(RMI_NUMRIG, numrig);
id.put("NUMPRO", 0);
id.put(PART_TIPOMOV, tm_fattura);
id.put("TIPOATT", rmi_tipoatt);
id.put("ANNOLIQ", datareg.year());
int mesereg = datareg.month();
if (freqviva == "T")
{
const int resto = mesereg % 3;
if (resto > 0)
mesereg += 3-resto;
}
id.put("MESELIQ", mesereg);
id.put("TIPOIVA", tipomov == 2 ? 2 : 1);
id.put("TIPODIFF", 1);
id.put(MOV_DATAREG, mov.get(MOV_DATADOC));
id.put(RMI_CODIVA, codiva);
id.put("SEZIONE", sezfat);
id.put("IMPORTO", imponibile_orig+imposta_orig);
id.put(RMI_IMPONIBILE, imponibile_orig);
id.put(RMI_IMPOSTA, imposta_orig);
if (id.write() == NOERR)
LOG_IVA_DIFF(rep, trec, id.curr());
}
if (!pagscatt.empty())
{
const char sezpag = tipomov == vendita ? 'A' : 'D';
real totfat = mov.get(MOV_TOTDOC);
real tot = totfat;
FOR_EACH_ARRAY_ITEM(pagscatt, r, obj)
{
const TRectype& pagsca = *(TRectype*)obj;
const int nrigp = pagsca.get_int(PAGSCA_NRIGP);
const long numreg = rmoviva.get_long(RMI_NUMREG);
const int numrig = rmoviva.get_int(RMI_NUMRIG);
const TPartita& p = arrpart.partita(pagsca);
const TRiga_partite& rp = p.riga(nrigp);
const long nregpag = rp.get_long(PART_NREG);
const int nrigpag = rp.get_int(PART_NUMRIG);
TImporto pagtmp = p.importo_pagsca(pagsca);
pagtmp.normalize(sezpag);
real val_imp = pagtmp.valore() * lordo_orig / tot;
real val_iva;
if (r == pagscatt.last() && chiusa)
{
TLocalisamfile rid(LF_IVADIFF);
rid.put(MOV_NUMREG, numreg);
rid.put(RMI_NUMRIG, numrig);
val_iva = imposta_orig;
bool pag_found = false;
int err = rid.read(_isgteq);
for (; err == NOERR ; err = rid.next())
{
const long ridnumreg =rid.get_long(RMI_NUMREG);
const int ridnumrig = rid.get_int(RMI_NUMRIG);
const tipo_movimento ridtipopag = (tipo_movimento) rid.get_int(PART_TIPOMOV);
if (ridnumreg == numreg && ridnumrig == numrig)
{
if ((ridtipopag != tm_fattura) && ((rid.get_long("NUMREGP") != nregpag) &&
(rid.get_int("NUMRIGP") != nrigpag)))
{
pag_found = true;
if (sezfat != sezpag)
val_iva -= rid.get_real(RMI_IMPOSTA);
else
val_iva += rid.get_real(RMI_IMPOSTA);
}
}
else
break;
if (!pag_found)
val_iva = civa.scorpora(val_imp, TCurrency::get_firm_dec());
else
civa.scorpora(val_imp, TCurrency::get_firm_dec());
}
}
else
val_iva = civa.scorpora(val_imp, TCurrency::get_firm_dec());
id.zero();
id.put(RMI_NUMREG, numreg);
id.put(RMI_NUMRIG, numrig);
CHECKD(nrigp > 0, "Invalid NRIGP ", nrigp);
id.put("NUMPRO", nrigp);
if (id.read(_isequal, _lock) != NOERR)
{
id.zero();
id.put(RMI_NUMREG, numreg);
id.put(RMI_NUMRIG, numrig);
id.put("NUMPRO", nrigp);
id.put(MOV_DATAREG, mov.get(MOV_DATADOC));
id.put("TIPOATT", rmi_tipoatt);
id.put("TIPOIVA", tipomov == 2 ? 2 : 1);
id.put("TIPODIFF", 1);
id.put(RMI_CODIVA, codiva);
tipo_movimento tipomov_pag = tm_pagamento;
if (nrigp <= 0)
fatal_box("numero riga pagamento errato partita : %s/%s - %d", (const char *) pagsca.get(PAGSCA_ANNO),
(const char *) pagsca.get(PAGSCA_NUMPART),
nrigp);
TDate d = rp.get(PART_DATAPAG);
tipomov_pag = rp.tipo();
id.put(PART_TIPOMOV, tipomov_pag);
id.put("NUMREGP", rp.get(PART_NREG));
id.put("NUMRIGP", rp.get(PART_NUMRIG));
if (!d.ok())
d = rp.get(PART_DATADOC);
if (!d.ok())
d = rp.get(PART_DATAREG);
id.put("DATAREGP", d);
id.put("ANNOLIQ", d.year());
int meseliq = d.month();
if (freqviva == "T")
{
const int resto = meseliq % 3;
if (resto > 0)
meseliq += 3-resto;
}
id.put("MESELIQ", meseliq);
id.put("SEZIONE", pagtmp.sezione());
id.put("IMPORTO", val_imp + val_iva);
id.put(RMI_IMPONIBILE, val_imp);
id.put(RMI_IMPOSTA, val_iva);
if (id.write() == NOERR)
LOG_IVA_DIFF(rep, trec, id.curr());
}
}
}
} while (cur.next_match(LF_RMOVIVA));
}
}
}
rep.print_or_preview();
}
void TCheck_ivadiff::main_loop()
{
TCheck_ivadiff_mask m;
while (m.run() == K_ENTER)
check_year(m.get_long(F_CODDITTA));
}
void controlla_ivadiff(int argc, char* argv[])
{
TCheck_ivadiff cp;
cp.run(argc, argv, TR("Ricalcolo IVA differita"));
}

Some files were not shown because too many files have changed in this diff Show More