Patch level :2.0 partners personalizzazioni

Files correlati     :ve7.exe
Ricompilazione Demo : [ ]
Commento            :compilato ve7.exe con le varie personalizzazioni conad,whitesun,
teamsystem etc.


git-svn-id: svn://10.65.10.50/trunk@11578 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2003-11-10 11:01:03 +00:00
parent 5f557ca6e0
commit 97d26f74be
6 changed files with 339 additions and 328 deletions

View File

@ -9,11 +9,15 @@ int main( int argc, char** argv )
switch (r) switch (r)
{ {
case 3:
ve7400(argc, argv); break; // esportazione bolle CONAD per marpesca
case 2: case 2:
ve7300(argc, argv); break; // stampa riepilogo entrate fornitori ve7300(argc, argv); break; // stampa riepilogo entrate fornitori
case 1:
ve7200(argc, argv); break; // stampa flussi di cassa per white sun
case 0: case 0:
default: default:
ve7100(argc, argv); break; // contabilizzazione documenti ve7100(argc, argv); break; // trasferimento documenti Team System
} }
exit(0); exit(0);
return 0; return 0;

View File

@ -2,6 +2,8 @@
#define __VE7_H #define __VE7_H
int ve7100 (int, char**); int ve7100 (int, char**);
int ve7200 (int, char**);
int ve7300 (int, char**); int ve7300 (int, char**);
int ve7400 (int, char**);
#endif #endif

View File

@ -14,13 +14,15 @@
#include "ve7100a.h" #include "ve7100a.h"
static char rata_types[] = {'3', '3', '1', '2', '4', '3', '1', '2', '2'};
class TContabil_tsys : public TContabilizzazione // velib04b class TContabil_tsys : public TContabilizzazione // velib04b
{ {
ofstream * _output_file; ofstream * _output_file;
TConfig * _conf; TConfig * _conf;
protected: protected:
virtual error_type write_all(TDocumento& doc, TMovimentoPN & movimento); virtual error_type write_all(TDocumento& doc, TMovimentoPN_VE & movimento);
public: public:
void open(); void open();
@ -99,6 +101,8 @@ error_type TContabil_tsys::write_all(TDocumento& doc, TMovimentoPN_VE & moviment
// basta solo ritornare qualcosa di != da no_error, per evitare le operazioni successive // basta solo ritornare qualcosa di != da no_error, per evitare le operazioni successive
// a write_all // a write_all
TString row(4500); TString row(4500);
const TString spaces(2500, ' ');
const TString zeros(256, '0');
TRectype& head = movimento.lfile().curr(); TRectype& head = movimento.lfile().curr();
const int iva_items = movimento.iva_items(); const int iva_items = movimento.iva_items();
const int cg_items = movimento.cg_items(); const int cg_items = movimento.cg_items();
@ -367,11 +371,11 @@ error_type TContabil_tsys::write_all(TDocumento& doc, TMovimentoPN_VE & moviment
real imprata = pag.importo_rata(i); real imprata = pag.importo_rata(i);
format_signed(imprata * molt, 12, work); format_signed(imprata * molt, 12, work);
if (work[11] == '-') if (work[11] == '-')
work[11] == '+'; work[11] = '+';
row << work; row << work;
format_signed(doc.bolli(imprata, AUTO_DECIMALS, _netto) * molt, 12, work); format_signed(doc.bolli(imprata, AUTO_DECIMALS, _netto) * molt, 12, work);
if (work[11] == '-') if (work[11] == '-')
work[11] == '+'; work[11] = '+';
row << work; row << work;
check_len("Riba", row, 24); check_len("Riba", row, 24);
static char tipocf = doc.get_char(DOC_TIPOCF); static char tipocf = doc.get_char(DOC_TIPOCF);
@ -548,7 +552,7 @@ void TContabil_tsys_app::build_num_sheet()
bool found = FALSE; bool found = FALSE;
for (int i = _tipi_doc.last(); !found && i >= 0; i--) for (int i = _tipi_doc.last(); !found && i >= 0; i--)
found |= z.find(((TToken_string &)_tipi_doc[i]).get(0)) >= 0; found |= (z.find(((TToken_string &)_tipi_doc[i]).get(0)) >= 0);
if (found) if (found)
_num_sheet->enable_row(pos); _num_sheet->enable_row(pos);
else else

View File

@ -1,13 +1,8 @@
#include <applicat.h> #include <applicat.h>
#include <assoc.h>
#include <automask.h> #include <automask.h>
#include <currency.h>
#include <msksheet.h>
#include <printer.h> #include <printer.h>
#include <recarray.h> #include <progind.h>
#include <relation.h>
#include <sort.h> #include <sort.h>
#include "velib.h" #include "velib.h"
#include "ve7.h" #include "ve7.h"
@ -38,8 +33,8 @@ public:
void TDocumentoOrdine::scadord_recalc() void TDocumentoOrdine::scadord_recalc()
{ {
TAssoc_array scadenze; TAssoc_array scadenze;
scadenze.destroy(); scadenze.destroy();
_scadenze_array.destroy(); _scadenze_array.destroy();
_scadenze_current = -1; _scadenze_current = -1;
TRectype& testadoc = head(); TRectype& testadoc = head();
@ -50,59 +45,59 @@ void TDocumentoOrdine::scadord_recalc()
const TRiga_documento& rigadoc = physical_row(i+1); const TRiga_documento& rigadoc = physical_row(i+1);
bool evasa = rigadoc.get_bool(RDOC_RIGAEVASA); bool evasa = rigadoc.get_bool(RDOC_RIGAEVASA);
if (!evasa) if (!evasa)
evasa = (rigadoc.qtaresidua() <= 0); evasa = (rigadoc.qtaresidua() <= 0);
if (!evasa) if (!evasa)
{ {
TDate datacons = rigadoc.get_date(RDOC_DATACONS); TDate datacons = rigadoc.get_date(RDOC_DATACONS);
if (!datacons.ok()) if (!datacons.ok())
datacons = testadoc.get_date(DOC_DATACONS); datacons = testadoc.get_date(DOC_DATACONS);
TString16 codval = valuta(); TString16 codval = valuta();
real totimponibili = rigadoc.valore(FALSE, AUTO_DECIMALS); real totimponibili = rigadoc.valore(FALSE, AUTO_DECIMALS);
real totimposte = rigadoc.iva().imposta(totimponibili, AUTO_DECIMALS, codval); real totimposte = rigadoc.iva().imposta(totimponibili, AUTO_DECIMALS, codval);
real totspese = ZERO; real totspese = ZERO;
const bool is_in_valuta = in_valuta(); const bool is_in_valuta = in_valuta();
if (is_in_valuta) if (is_in_valuta)
{ {
const real change(cambio()); const real change(cambio());
TCurrency_documento val1(totimponibili, *this); val1.change_to_firm_val(); TCurrency_documento val1(totimponibili, *this); val1.change_to_firm_val();
TCurrency_documento val2(totimposte, *this); val2.change_to_firm_val(); TCurrency_documento val2(totimposte, *this); val2.change_to_firm_val();
TCurrency_documento val3(totspese, *this); val3.change_to_firm_val(); TCurrency_documento val3(totspese, *this); val3.change_to_firm_val();
pag.set_total_valuta(totimponibili, totimposte, totspese, change, val1.get_num(), val2.get_num() ,val3.get_num(), codval); pag.set_total_valuta(totimponibili, totimposte, totspese, change, val1.get_num(), val2.get_num() ,val3.get_num(), codval);
} }
else else
pag.set_total(totimponibili, totimposte, totspese); pag.set_total(totimponibili, totimposte, totspese);
pag.set_inizio(datacons); pag.set_inizio(datacons);
pag.set_rate_auto(); pag.set_rate_auto();
const int numrate = pag.n_rate( ); const int numrate = pag.n_rate( );
real rata; real rata;
for (int i = 0; i< numrate; i++) for (int i = 0; i< numrate; i++)
{ {
rata = pag.importo_rata(i, is_in_valuta); rata = pag.importo_rata(i, is_in_valuta);
const char* datastringa = (const char*) pag.data_rata(i).string(); const char* datastringa = (const char*) pag.data_rata(i).string();
if (scadenze.is_key(datastringa)) if (scadenze.is_key(datastringa))
{ {
real& valore = (real&)scadenze[datastringa]; real& valore = (real&)scadenze[datastringa];
valore+=rata; valore+=rata;
} }
else else
{ {
real* oggetto = new real(rata); real* oggetto = new real(rata);
scadenze.add(datastringa,(TObject*)oggetto); scadenze.add(datastringa,(TObject*)oggetto);
} }
} }
} }
} }
scadenze.restart(); scadenze.restart();
real* c; real* c;
for (c = (real*) scadenze.first_item(); c != NULL; c = (real*) scadenze.succ_item()) for (c = (real*) scadenze.first_item(); c != NULL; c = (real*) scadenze.succ_item())
{ {
const char* datastringa = scadenze.get_hashobj()->key(); const char* datastringa = scadenze.get_hashobj()->key();
TToken_string t; TToken_string t;
t.add(datastringa); t.add(datastringa);
real importo(*c); real importo(*c);
t.add(importo.string()); t.add(importo.string());
_scadenze_array.add(t); _scadenze_array.add(t);
} }
if (_scadenze_array.items() > 0) if (_scadenze_array.items() > 0)
_scadenze_current++; _scadenze_current++;
@ -206,25 +201,25 @@ bool TFlussi_mask::on_field_event(TOperable_field& o, TField_event e, long jolly
class TStampaFlussiCassa : public TSkeleton_application class TStampaFlussiCassa : public TSkeleton_application
{ {
#pragma pack(1) #pragma pack(1)
struct struct_scadenza struct struct_scadenza
{ {
char data[9]; char data[9];
real importo; real importo;
char descrizione[80]; char descrizione[80];
char estremidoc[45]; char estremidoc[45];
char statodoc; char statodoc;
}; };
#pragma pack() #pragma pack()
TRelation* _rel; TRelation* _rel;
TCursor* _cur; TCursor* _cur;
TFlussi_mask* _msk; TFlussi_mask* _msk;
TFlussi_form* _form; TFlussi_form* _form;
TSort* _sort; TSort* _sort;
TString_array _tipi_doc; // Array di stringhe contenente i tipi documenti da elaborare TString_array _tipi_doc; // Array di stringhe contenente i tipi documenti da elaborare
TDate _datascadi, _datascadf; TDate _datascadi, _datascadf;
real _totale; // totale a partire da saldo iniziale real _totale; // totale a partire da saldo iniziale
protected: protected:
virtual bool create(void); virtual bool create(void);
@ -246,12 +241,12 @@ public:
bool TStampaFlussiCassa::create() bool TStampaFlussiCassa::create()
{ {
open_files(LF_DOC, LF_RIGHEDOC, LF_SCADENZE, LF_CLIFO, LF_CFVEN, 0); open_files(LF_TAB, LF_TABCOM, LF_DOC, LF_RIGHEDOC, LF_PARTITE, LF_SCADENZE, LF_PAGSCA, LF_CLIFO, LF_CFVEN, 0);
_rel = new TRelation(LF_SCADENZE); _rel = new TRelation(LF_SCADENZE);
_rel->add(LF_PARTITE,"TIPOC==TIPOC|GRUPPO==GRUPPO|CONTO==CONTO|SOTTOCONTO==SOTTOCONTO|ANNO=ANNO|NUMPART==NUMPART",1,0); _rel->add(LF_PARTITE,"TIPOC==TIPOC|GRUPPO==GRUPPO|CONTO==CONTO|SOTTOCONTO==SOTTOCONTO|ANNO=ANNO|NUMPART==NUMPART",1,0);
_rel->add(LF_PAGSCA, "TIPOC==TIPOC|GRUPPO==GRUPPO|CONTO==CONTO|SOTTOCONTO==SOTTOCONTO|ANNO==ANNO|NUMPART==NUMPART|NRIGA==NRIGA|NRATA==NRATA"); _rel->add(LF_PAGSCA, "TIPOC==TIPOC|GRUPPO==GRUPPO|CONTO==CONTO|SOTTOCONTO==SOTTOCONTO|ANNO==ANNO|NUMPART==NUMPART|NRIGA==NRIGA|NRATA==NRATA");
_cur = new TCursor(_rel, "PAGATA != \"X\"", 2); _cur = new TCursor(_rel, "PAGATA!=\"X\"", 2);
_msk = new TFlussi_mask(); _msk = new TFlussi_mask();
_form = new TFlussi_form(); _form = new TFlussi_form();
_sort = new TSort(sizeof(struct_scadenza)); _sort = new TSort(sizeof(struct_scadenza));
@ -261,8 +256,8 @@ bool TStampaFlussiCassa::create()
bool TStampaFlussiCassa::destroy() bool TStampaFlussiCassa::destroy()
{ {
delete _sort; delete _sort;
delete _form; delete _form;
delete _msk; delete _msk;
delete _cur; delete _cur;
delete _rel; delete _rel;
@ -276,17 +271,17 @@ void TStampaFlussiCassa::main_loop()
_datascadi = _msk->get_date(F_DATASCADI); _datascadi = _msk->get_date(F_DATASCADI);
_datascadf = _msk->get_date(F_DATASCADF); _datascadf = _msk->get_date(F_DATASCADF);
_totale = _msk->get_real(F_SALDOINI); _totale = _msk->get_real(F_SALDOINI);
_sort->init(); // inizializza il sort _sort->init(); // inizializza il sort
elabora_scad(); // cominciamo dalle scadenze elabora_scad(); // cominciamo dalle scadenze
elabora_doc(); // continuiamo con i documenti elabora_doc(); // continuiamo con i documenti
_sort->endsort(); // fine sort _sort->endsort(); // fine sort
stampa_flussi(); // stampiamo il tutto stampa_flussi(); // stampiamo il tutto
} }
} }
void TStampaFlussiCassa::stampa_flussi() void TStampaFlussiCassa::stampa_flussi()
{ {
const int reclen = sizeof(struct_scadenza); const int reclen = sizeof(struct_scadenza);
TString256 result; TString256 result;
printer().open(); printer().open();
print_header(); print_header();
@ -297,22 +292,22 @@ void TStampaFlussiCassa::stampa_flussi()
if (_totale > 0) if (_totale > 0)
{ {
_form->find_field('B', odd_page, FF_B_IMPORTOD).set(_totale.string()); _form->find_field('B', odd_page, FF_B_IMPORTOD).set(_totale.string());
_form->find_field('B', odd_page, FF_B_IMPORTOA).set(""); _form->find_field('B', odd_page, FF_B_IMPORTOA).set("");
} }
else else
{ {
_form->find_field('B', odd_page, FF_B_IMPORTOA).set(_totale.string()); _form->find_field('B', odd_page, FF_B_IMPORTOA).set(_totale.string());
_form->find_field('B', odd_page, FF_B_IMPORTOD).set(""); _form->find_field('B', odd_page, FF_B_IMPORTOD).set("");
} }
_form->find_field('B', odd_page, FF_B_DESCRIZIONE).set("Saldo iniziale"); _form->find_field('B', odd_page, FF_B_DESCRIZIONE).set("Saldo iniziale");
_form->find_field('B', odd_page, FF_B_DESCRIZIONE).set("Saldo iniziale"); _form->find_field('B', odd_page, FF_B_DESCRIZIONE).set("Saldo iniziale");
section.update(); section.update();
for (word i = 0; i < section.height(); i++) for (word i = 0; i < section.height(); i++)
{ {
TPrintrow row = section.row(i); TPrintrow row = section.row(i);
printer().print(section.row(i)); printer().print(section.row(i));
} }
struct_scadenza* riga; struct_scadenza* riga;
@ -320,7 +315,7 @@ void TStampaFlussiCassa::stampa_flussi()
while (riga != NULL) while (riga != NULL)
{ {
print_line(riga); print_line(riga);
riga = (struct_scadenza*) _sort->retrieve(); riga = (struct_scadenza*) _sort->retrieve();
} }
printer().close(); printer().close();
} }
@ -344,197 +339,201 @@ void TStampaFlussiCassa::elabora_scad()
TRectype& recscad = _cur->curr(); TRectype& recscad = _cur->curr();
const TRectype& recpartita = _cur->curr(LF_PARTITE); const TRectype& recpartita = _cur->curr(LF_PARTITE);
const long items = _cur->items(); const TRecnotype items = _cur->items();
for (*_cur=0; _cur->pos()<items; ++(*_cur)) _cur->freeze();
{ TProgind pi(items, "Elaboarzione scadenze", FALSE, TRUE);
struct_scadenza riga_scadenza; for (*_cur=0; _cur->pos()<items; ++(*_cur))
TPartita partita(recpartita); {
const int nriga = recscad.get_int(SCAD_NRIGA); pi.addstatus(1);
const int nrata = recscad.get_int(SCAD_NRATA); struct_scadenza riga_scadenza;
TRiga_scadenze rigascadenze = partita.rata(nriga, nrata); TPartita partita(recpartita);
TDate datascad = recscad.get_date(SCAD_DATASCAD); const int nriga = recscad.get_int(SCAD_NRIGA);
long data = datascad.date2ansi(); const int nrata = recscad.get_int(SCAD_NRATA);
TRiga_scadenze rigascadenze = partita.rata(nriga, nrata);
TDate datascad = recscad.get_date(SCAD_DATASCAD);
long data = datascad.date2ansi();
TImporto importo = rigascadenze.residuo(FALSE); TImporto importo = rigascadenze.residuo(FALSE);
importo.normalize('D'); importo.normalize('D');
TString16 codice; TString16 codice;
codice.cut(0); codice.cut(0);
codice << recscad.get(SCAD_TIPOCF); codice << recscad.get(SCAD_TIPOCF);
codice << '|' << recscad.get(SCAD_SOTTOCONTO); codice << '|' << recscad.get(SCAD_SOTTOCONTO);
TString80 descr = cache().get(LF_CLIFO, codice, CLI_RAGSOC); TString80 descr = cache().get(LF_CLIFO, codice, CLI_RAGSOC);
sprintf(riga_scadenza.data, "%8ld", data); sprintf(riga_scadenza.data, "%8ld", data);
riga_scadenza.importo = importo.valore(); riga_scadenza.importo = importo.valore();
strcpy(riga_scadenza.descrizione, descr); strcpy(riga_scadenza.descrizione, descr);
TString80 estremi = "Doc. "; TString80 estremi = "Doc. ";
estremi << recpartita.get(PART_NUMDOC); estremi << recpartita.get(PART_NUMDOC);
estremi << " del " << recpartita.get(PART_DATADOC); estremi << " del " << recpartita.get(PART_DATADOC);
estremi << " - Prot. " << recpartita.get(PART_PROTIVA); estremi << " - Prot. " << recpartita.get(PART_PROTIVA);
strcpy(riga_scadenza.estremidoc, estremi); strcpy(riga_scadenza.estremidoc, estremi);
riga_scadenza.statodoc = ' '; riga_scadenza.statodoc = ' ';
const char* record = (const char*) &riga_scadenza; const char* record = (const char*) &riga_scadenza;
_sort->sort(record); _sort->sort(record);
} }
_cur->freeze(FALSE);
} }
void TStampaFlussiCassa::elabora_doc() void TStampaFlussiCassa::elabora_doc()
{ {
TSheet_field& sheet = _msk->sfield(F_SHEETDOC); TSheet_field& sheet = _msk->sfield(F_SHEETDOC);
const int items = sheet.items();
TRelation doc_rel(LF_DOC);
TRectype da(LF_DOC);
TRectype a(LF_DOC);
const long items = sheet.items();
if (items > 0) if (items > 0)
{ {
int year_from = _msk->get_int(F_ESERCIZIO); TRelation doc_rel(LF_DOC);
int year_to = _datascadf.year(); TRectype da(LF_DOC);
bool ok = TRUE; TRectype a(LF_DOC);
TString16 codnum, tipodoc;
bool aresiduo;
char dastato, astato;
TString filt_expr;
TDate dataini(1, 1, year_from);
da.put("DATADOC", dataini);
da.put("PROVV", "D");
da.put("ANNO", year_from);
a.put("DATADOC", _datascadf);
a.put("PROVV", "D");
a.put("ANNO", year_to);
filt_expr << "(";
FOR_EACH_SHEET_ROW(sheet, r, row)
{
codnum = row->get(0);
tipodoc = row->get(2);
dastato = row->get_char(4);
astato = row->get_char(5);
aresiduo = row->get_char(6);
if (codnum.not_empty() && tipodoc.not_empty())
{
filt_expr << "((CODNUM=\"";
filt_expr << codnum << "\")&&";
filt_expr << "(TIPODOC=\"";
filt_expr << tipodoc << "\")";
if (dastato != ' ')
filt_expr << " &&(STATO>=\"" << dastato << "\")";
if (astato != ' ')
filt_expr << "&&(STATO<=\"" << astato << "\")";
filt_expr << ")||";
}
}
filt_expr.rtrim(2);
filt_expr << ")";
TCursor doc_cur(&doc_rel,filt_expr,3,&da,&a); int year_from = _msk->get_int(F_ESERCIZIO);
const long cur_items = doc_cur.items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato int year_to = _datascadf.year();
if (cur_items != 0) bool ok = TRUE;
{ TString16 codnum, tipodoc;
doc_cur.freeze(); bool aresiduo;
const TRectype& cur_rec = doc_cur.curr(); char dastato, astato;
for (doc_cur = 0; doc_cur.pos() < cur_items; ++doc_cur) TString filt_expr;
{ TDate dataini(1, 1, year_from);
TDocumento documento(cur_rec); da.put("DATADOC", dataini);
if (documento.is_ordine()) da.put("PROVV", "D");
{ da.put("ANNO", year_from);
TDocumentoOrdine* doc = new TDocumentoOrdine; a.put("DATADOC", _datascadf);
if (doc->read(doc_cur.curr()) == NOERR) // legge il documento a.put("PROVV", "D");
{ a.put("ANNO", year_to);
doc->scadord_recalc(); filt_expr << "(";
for (int i=0;i < doc->scadord_items(); i++) FOR_EACH_SHEET_ROW(sheet, r, row)
{ {
struct_scadenza riga_scadenza; codnum = row->get(0);
TDate datascad = doc->scadord_get("DATA"); tipodoc = row->get(2);
if (datascad >= _datascadi && datascad <= _datascadf) dastato = row->get_char(4);
{ astato = row->get_char(5);
long data = datascad.date2ansi(); aresiduo = row->get_char(6) > ' ';
real importoscad = doc->scadord_get("IMPORTO"); if (codnum.not_empty() && tipodoc.not_empty())
const char sez = doc->tipocf(); {
TImporto importo((sez=='C' ? 'D' : 'A'), importoscad); filt_expr << "((CODNUM=\"";
importo.normalize('D'); filt_expr << codnum << "\")&&";
TString16 codice; filt_expr << "(TIPODOC=\"";
codice.cut(0); filt_expr << tipodoc << "\")";
codice << doc->tipocf(); if (dastato != ' ')
codice << '|' << doc->codcf(); filt_expr << " &&(STATO>=\"" << dastato << "\")";
TString80 descr = cache().get(LF_CLIFO, codice, CLI_RAGSOC); if (astato != ' ')
TString80 estremi = doc->tipo().codice(); filt_expr << "&&(STATO<=\"" << astato << "\")";
estremi << " n. " << doc->numero(); filt_expr << ")||";
estremi << " del " << doc->data().string(); }
const char stato = doc->stato(); }
sprintf(riga_scadenza.data, "%8ld", data); filt_expr.rtrim(2);
riga_scadenza.importo = importo.valore(); filt_expr << ")";
strcpy(riga_scadenza.descrizione, descr);
strcpy(riga_scadenza.estremidoc, estremi); TCursor doc_cur(&doc_rel,filt_expr,3,&da,&a);
riga_scadenza.statodoc = stato; const TRecnotype cur_items = doc_cur.items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato
const char* record = (const char*) &riga_scadenza; if (cur_items != 0)
_sort->sort(record); {
} doc_cur.freeze();
doc->scadord_set_next(); const TRectype& cur_rec = doc_cur.curr();
} TProgind pi(cur_items, "Elaborazione documenti", FALSE, TRUE);
} for (doc_cur = 0; doc_cur.pos() < cur_items; ++doc_cur)
else {
delete doc; pi.addstatus(1);
} TDocumento documento(cur_rec);
else if (documento.is_ordine())
{ {
TDocumentoEsteso* doc = new TDocumentoEsteso; TDocumentoOrdine* doc = new TDocumentoOrdine;
if (doc->read(doc_cur.curr()) == NOERR) // legge il documento if (doc->read(doc_cur.curr()) == NOERR) // legge il documento
{ {
doc->scadenze_recalc(); doc->scadord_recalc();
for (int i=0;i < doc->scadenze_items(); i++) for (int i=0;i < doc->scadord_items(); i++)
{ {
struct_scadenza riga_scadenza; struct_scadenza riga_scadenza;
TDate datascad = doc->scadenze_get("DATA"); TDate datascad = doc->scadord_get("DATA");
if (datascad >= _datascadi && datascad <= _datascadf) if (datascad >= _datascadi && datascad <= _datascadf)
{ {
long data = datascad.date2ansi(); long data = datascad.date2ansi();
real importoscad = doc->scadenze_get("IMPORTO"); real importoscad = doc->scadord_get("IMPORTO");
const char sez = doc->tipocf(); const char sez = doc->tipocf();
TImporto importo((sez=='C' ? 'D' : 'A'), importoscad); TImporto importo((sez=='C' ? 'D' : 'A'), importoscad);
importo.normalize('D'); importo.normalize('D');
TString16 codice; TString16 codice;
codice.cut(0); codice.cut(0);
codice << doc->tipocf(); codice << doc->tipocf();
codice << '|' << doc->codcf(); codice << '|' << doc->codcf();
TString80 descr = cache().get(LF_CLIFO, codice, CLI_RAGSOC); TString80 descr = cache().get(LF_CLIFO, codice, CLI_RAGSOC);
TString80 estremi = doc->tipo().codice(); TString80 estremi = doc->tipo().codice();
estremi << " n. " << doc->numero(); estremi << " n. " << doc->numero();
estremi << " del " << doc->data().string(); estremi << " del " << doc->data().string();
const char stato = doc->stato(); const char stato = doc->stato();
sprintf(riga_scadenza.data, "%8ld", data); sprintf(riga_scadenza.data, "%8ld", data);
riga_scadenza.importo = importo.valore(); riga_scadenza.importo = importo.valore();
strcpy(riga_scadenza.descrizione, descr); strcpy(riga_scadenza.descrizione, descr);
strcpy(riga_scadenza.estremidoc, estremi); strcpy(riga_scadenza.estremidoc, estremi);
riga_scadenza.statodoc = stato; riga_scadenza.statodoc = stato;
const char* record = (const char*) &riga_scadenza; const char* record = (const char*) &riga_scadenza;
_sort->sort(record); _sort->sort(record);
} }
doc->scadenze_set_next(); doc->scadord_set_next();
} }
} }
else delete doc;
delete doc; }
} else
} {
} TDocumentoEsteso* doc = new TDocumentoEsteso;
} if (doc->read(doc_cur.curr()) == NOERR) // legge il documento
{
doc->scadenze_recalc();
for (int i=0;i < doc->scadenze_items(); i++)
{
struct_scadenza riga_scadenza;
TDate datascad = doc->scadenze_get("DATA");
if (datascad >= _datascadi && datascad <= _datascadf)
{
long data = datascad.date2ansi();
real importoscad = doc->scadenze_get("IMPORTO");
const char sez = doc->tipocf();
TImporto importo((sez=='C' ? 'D' : 'A'), importoscad);
importo.normalize('D');
TString16 codice;
codice.cut(0);
codice << doc->tipocf();
codice << '|' << doc->codcf();
TString80 descr = cache().get(LF_CLIFO, codice, CLI_RAGSOC);
TString80 estremi = doc->tipo().codice();
estremi << " n. " << doc->numero();
estremi << " del " << doc->data().string();
const char stato = doc->stato();
sprintf(riga_scadenza.data, "%8ld", data);
riga_scadenza.importo = importo.valore();
strcpy(riga_scadenza.descrizione, descr);
strcpy(riga_scadenza.estremidoc, estremi);
riga_scadenza.statodoc = stato;
const char* record = (const char*) &riga_scadenza;
_sort->sort(record);
}
doc->scadenze_set_next();
}
}
delete doc;
}
}
}
}
} }
void TStampaFlussiCassa::print_line(struct_scadenza* riga) void TStampaFlussiCassa::print_line(struct_scadenza* riga)
{ {
const long scadenza = atol(riga->data); const long scadenza = atol(riga->data);
const TDate datascad(scadenza); const TDate datascad(scadenza);
const real importo = riga->importo; const real importo = riga->importo;
TString80 descr = riga->descrizione; TString80 descr = riga->descrizione;
descr.trim(); descr.trim();
_form->find_field('B', odd_page, FF_B_DESCRIZIONE).set(descr); _form->find_field('B', odd_page, FF_B_DESCRIZIONE).set(descr);
if (importo.sign() >=0) if (importo.sign() >=0)
{ {
_form->find_field('B', odd_page, FF_B_IMPORTOD).set(importo.string()); _form->find_field('B', odd_page, FF_B_IMPORTOD).set(importo.string());
_form->find_field('B', odd_page, FF_B_IMPORTOA).set(""); _form->find_field('B', odd_page, FF_B_IMPORTOA).set("");
} }
else else
{ {
_form->find_field('B', odd_page, FF_B_IMPORTOA).set(importo.string()); _form->find_field('B', odd_page, FF_B_IMPORTOA).set(importo.string());
_form->find_field('B', odd_page, FF_B_IMPORTOD).set(""); _form->find_field('B', odd_page, FF_B_IMPORTOD).set("");
} }
TString80 estremi = riga->estremidoc; TString80 estremi = riga->estremidoc;
_form->find_field('B', odd_page, FF_B_ESTREMIDOC).set(estremi); _form->find_field('B', odd_page, FF_B_ESTREMIDOC).set(estremi);
@ -549,7 +548,7 @@ void TStampaFlussiCassa::print_line(struct_scadenza* riga)
section.update(); section.update();
for (word i = 0; i < section.height(); i++) for (word i = 0; i < section.height(); i++)
{ {
TPrintrow row = section.row(i); TPrintrow row = section.row(i);
printer().print(section.row(i)); printer().print(section.row(i));
} }
} }

View File

@ -1211,6 +1211,60 @@ public:
virtual ~TContabilizzazione(); virtual ~TContabilizzazione();
}; };
///////////////////////////////////////////////////////////
// TContabilizzazione
///////////////////////////////////////////////////////////
// TMovimentoPN_VE
// Classe derivata da TMovimentoPN per calcolare automaticamente le righe conabili
// una volta settate le righe iva e la riga di totale documento
// Sostanzialmente di tratta di aggiungere un metodo in piu' :
// recalc_cg_rows(), liberamente ispirato alla notify_iva() in cg2102.cpp
class TMovimentoPN_VE : public TMovimentoPN
{
TCausale * _caus;
bool _valuta;
protected:
// simula il K_SPACE di iva_notify
void create_row(int i, const TString & descr_cr);
// simula il K_ENTER di iva_notify
void enter_row(int i, const TString & descr_cr);
// verifica se si tratta di iva indetraibile
bool detraibile(TRectype& rec) const ;
// cerca la prima tra quelle di contabilita' che corrisponde al tipo indicato
int type2pos(char tipo);
// Trova nelle righe contabili un conto nelle righe di tipo prescelto
int bill2pos(const TBill& conto, const TString & codcms, const TString & fascms, char tipo);
// trasforma un real in TImporto, in base al tipo riga
TImporto real2imp(const real& r, char row_type);
// setta il record delle righe di contabilita'
int insert_cg_rec(int n, const TImporto& imp, TBill& conto, const char * codcms, const char * fascms, const char* desc, char tipo);
// setta il record delle righe di contabilita'
int set_cg_rec(int n, const TImporto& imp, TBill& conto, const char * codcms, const char * fascms, const char* desc, char tipo);
// aggiunge l'importo indicato alla n-esima riga di contabilita'
bool add_cg_rec(int n, const TImporto& imp);
// Legge l'importo della riga n e lo ritorna col segno dovuto
TImporto get_cg_imp(int n);
// Setta l'importo della riga n
void set_cg_imp(int n, const TImporto& imp);
// verifica se il movimento e' quadrato oppure ha qualche maledetto sbilancio
// ritorna TRUE, ovviamente, se everything's alright.
public:
// ricalcola le righe di contabilita' dalle righe iva presenti
// e verifica la quadratura del movimento. Ritorna TRUE se il movimento e' scrivibile
void set_caus(TCausale * c) { _caus = c;}
bool movement_ok() ;
void add_row_re(int i);
bool add_row_cp_re(int i);
void map_conto_re(TBill & c);
void destroy_iva_row(int i = -1);
int recalc_cg_rows(const TString & descr_cr, TCausale & caus);
TMovimentoPN_VE(bool valuta) : _valuta(valuta), _caus(NULL) {};
virtual ~TMovimentoPN_VE() {}
};
class TCopia_documento : public TElaborazione // velib04 class TCopia_documento : public TElaborazione // velib04
{ {
public: public:

View File

@ -30,59 +30,7 @@
#include "../cg/cgsaldac.h" #include "../cg/cgsaldac.h"
#include "../cg/cglib02.h" #include "../cg/cglib02.h"
///////////////////////////////////////////////////////////
// TContabilizzazione
///////////////////////////////////////////////////////////
// TMovimentoPN_VE
// Classe derivata da TMovimentoPN per calcolare automaticamente le righe conabili
// una volta settate le righe iva e la riga di totale documento
// Sostanzialmente di tratta di aggiungere un metodo in piu' :
// recalc_cg_rows(), liberamente ispirato alla notify_iva() in cg2102.cpp
class TMovimentoPN_VE : public TMovimentoPN
{
TCausale * _caus;
bool _valuta;
protected:
// simula il K_SPACE di iva_notify
void create_row(int i, const TString & descr_cr);
// simula il K_ENTER di iva_notify
void enter_row(int i, const TString & descr_cr);
// verifica se si tratta di iva indetraibile
bool detraibile(TRectype& rec) const ;
// cerca la prima tra quelle di contabilita' che corrisponde al tipo indicato
int type2pos(char tipo);
// Trova nelle righe contabili un conto nelle righe di tipo prescelto
int bill2pos(const TBill& conto, const TString & codcms, const TString & fascms, char tipo);
// trasforma un real in TImporto, in base al tipo riga
TImporto real2imp(const real& r, char row_type);
// setta il record delle righe di contabilita'
int insert_cg_rec(int n, const TImporto& imp, TBill& conto, const char * codcms, const char * fascms, const char* desc, char tipo);
// setta il record delle righe di contabilita'
int set_cg_rec(int n, const TImporto& imp, TBill& conto, const char * codcms, const char * fascms, const char* desc, char tipo);
// aggiunge l'importo indicato alla n-esima riga di contabilita'
bool add_cg_rec(int n, const TImporto& imp);
// Legge l'importo della riga n e lo ritorna col segno dovuto
TImporto get_cg_imp(int n);
// Setta l'importo della riga n
void set_cg_imp(int n, const TImporto& imp);
// verifica se il movimento e' quadrato oppure ha qualche maledetto sbilancio
// ritorna TRUE, ovviamente, se everything's alright.
public:
// ricalcola le righe di contabilita' dalle righe iva presenti
// e verifica la quadratura del movimento. Ritorna TRUE se il movimento e' scrivibile
void set_caus(TCausale * c) { _caus = c;}
bool movement_ok() ;
void add_row_re(int i);
bool add_row_cp_re(int i);
void map_conto_re(TBill & c);
void destroy_iva_row(int i = -1);
int recalc_cg_rows(const TString & descr_cr, TCausale & caus);
TMovimentoPN_VE(bool valuta) : _valuta(valuta), _caus(NULL) {};
virtual ~TMovimentoPN_VE() {}
};
void TMovimentoPN_VE::destroy_iva_row(int i) void TMovimentoPN_VE::destroy_iva_row(int i)
{ {