Generazione scadenze archivi contabili, finito a Prassi piacendo

git-svn-id: svn://10.65.10.50/trunk@1661 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1995-08-01 10:24:33 +00:00
parent b89f762389
commit 5acb056d43
2 changed files with 167 additions and 100 deletions

View File

@ -6,12 +6,15 @@
#include <pconti.h> #include <pconti.h>
#include <partite.h> #include <partite.h>
#include <scadenze.h> #include <scadenze.h>
#include <stosoll.h>
#include <lffiles.h> #include <lffiles.h>
#include <relation.h> #include <relation.h>
#include <utility.h> #include <utility.h>
#include "../cg/conto.h" #include "../cg/conto.h"
#include "../cg/pagament.h" #include "../cg/pagament.h"
#include "../cg/cglib.h"
#include "sc1200.h" #include "sc1200.h"
class TCreatepart_app : public TApplication class TCreatepart_app : public TApplication
@ -19,6 +22,7 @@ class TCreatepart_app : public TApplication
TLocalisamfile* _conti; TLocalisamfile* _conti;
TLocalisamfile* _partite; TLocalisamfile* _partite;
TLocalisamfile* _scadenze; TLocalisamfile* _scadenze;
TLocalisamfile* _pagsca;
int _anno; int _anno;
@ -28,11 +32,11 @@ protected:
virtual bool destroy(); virtual bool destroy();
virtual bool menu(MENU_TAG m); virtual bool menu(MENU_TAG m);
bool zap_partite(bool check_erase); bool zap_partite();
public: public:
bool is_clifo(int g, int c, char& cf); int is_clifo(int g, int c, char& cf, int& indbil);
TCreatepart_app() {} TCreatepart_app() {}
virtual ~TCreatepart_app() {} virtual ~TCreatepart_app() {}
}; };
@ -45,6 +49,7 @@ bool TCreatepart_app::create()
_conti = new TLocalisamfile(LF_PCON); _conti = new TLocalisamfile(LF_PCON);
_partite = new TLocalisamfile(LF_PARTITE); _partite = new TLocalisamfile(LF_PARTITE);
_scadenze = new TLocalisamfile(LF_SCADENZE); _scadenze = new TLocalisamfile(LF_SCADENZE);
_pagsca = new TLocalisamfile(LF_STOSOLL);
dispatch_e_menu(BAR_ITEM(1)); dispatch_e_menu(BAR_ITEM(1));
return TRUE; return TRUE;
@ -55,80 +60,101 @@ bool TCreatepart_app::destroy()
delete _conti; delete _conti;
delete _partite; delete _partite;
delete _scadenze; delete _scadenze;
delete _pagsca;
return TApplication::destroy(); return TApplication::destroy();
} }
bool TCreatepart_app::zap_partite(bool zap) bool TCreatepart_app::zap_partite()
{ {
// ritorna il primo valore utile per partita temporanea AP; bool first = TRUE;
// se ce ne sono gia' propone la cancellazione e se ok for (_partite->first(); !_partite->eof(); _partite->next())
// la esegue perfidamente {
// ignora saldaconto altri esercizi
if (_partite->get_long(PART_ANNO) != _anno)
continue;
_partite->zero(); if (first)
_partite->put(PART_ANNO, _anno); {
bool ok = yesno_box("Il saldaconto per l'esercizio scelto non e' vuoto."
long last = 0l;
bool go = _partite->read(_isgteq) == NOERR;
if (zap && go)
zap = yesno_box("Il saldaconto per l'esercizio scelto non e' vuoto."
" La procedura lo azzera completamente." " La procedura lo azzera completamente."
" Si desidera proseguire?"); " Si desidera proseguire?");
if (zap && go) if (ok)
zap = yesno_box("Confermare l'azzeramento del saldaconto esistente"); ok = yesno_box("Confermare l'azzeramento del saldaconto esistente");
if (!ok) return FALSE;
first = FALSE;
}
while (go) bool gos = TRUE;
{ bool goi = TRUE;
if (zap)
{ for (int i = 1; gos || goi ; i++)
for (int i = 0; ; i++)
{ {
// zappa scadenze // zappa scadenze
if (gos)
{
_scadenze->zero(); _scadenze->zero();
_scadenze->put(SCAD_ANNO, _partite->get(PART_ANNO)); _scadenze->put(SCAD_ANNO, _partite->get(PART_ANNO));
_scadenze->put(SCAD_NUMPART, _partite->get(PART_NUMPART)); _scadenze->put(SCAD_NUMPART, _partite->get(PART_NUMPART));
_scadenze->put(SCAD_NRATA, i+1); _scadenze->put(SCAD_NRATA, i+1);
if (_scadenze->read() == NOERR) _scadenze->remove(); if (gos = (_scadenze->read() == NOERR))
else _scadenze->remove();
{
_partite->remove();
break;
}
}
}
go = _partite->next() == NOERR;
} }
return zap; // zappa solleciti
if (goi)
{
_pagsca->zero();
_pagsca->put(SOLL_ANNO, _partite->get(PART_ANNO));
_pagsca->put(SOLL_NUMPART, _partite->get(PART_NUMPART));
_pagsca->put(SOLL_NRIGP, i+1);
if (goi = (_pagsca->read() == NOERR))
_pagsca->remove();
}
}
_partite->remove();
}
return TRUE;
} }
bool TCreatepart_app::is_clifo(int g, int c, char& cf) int TCreatepart_app::is_clifo(int g, int c, char& cf, int& indbil)
{ {
static int gr = -1, ct = -1; // deve ritornare QUANTI sono i conti in cui appare lo stesso
// TBI deve ritornare QUANTI sono i conti in cui appare lo stesso
// cliente; se piu' di uno deve creare n rate, una per cliente // cliente; se piu' di uno deve creare n rate, una per cliente
if (g != gr || c != ct)
{
_conti->zero(); _conti->zero();
_conti->put(PCN_GRUPPO, g); _conti->put(PCN_GRUPPO, g);
_conti->put(PCN_CONTO, c); _conti->put(PCN_CONTO, c);
if (_conti->read() != NOERR) if (_conti->read() != NOERR)
// TBC c'era un'error_box: ci vuole? {
return FALSE; warning_box("Piano dei conti disallineato con archivio saldi: esecuzione interrotta");
gr = g; ct = c; return 0;
} }
if (_conti->get(PCN_TMCF).empty()) if (_conti->get(PCN_TMCF).empty())
return FALSE; return 0;
cf = _conti->get_char(PCN_TMCF); cf = _conti->get_char(PCN_TMCF);
return TRUE; indbil = _conti->get_int(PCN_INDBIL);
long cl = _conti->get_long(PCN_SOTTOCONTO);
// cerca tutti i conti in cui compare lo stesso cliente o
// fornitore
int ncli = 0;
for (_conti->first(); !_conti->eof(); _conti->next())
{
if (_conti->get_char(PCN_TMCF) == cf &&
_conti->get_long(PCN_SOTTOCONTO) == cl)
ncli++;
}
return ncli;
} }
@ -145,15 +171,16 @@ bool TCreatepart_app::menu(MENU_TAG)
m.set(F_DESCCL, desccl); m.set(F_DESCCL, desccl);
m.set(F_DESCFO, descfo); m.set(F_DESCFO, descfo);
while (m.run() != K_QUIT) while (m.run() == K_ENTER)
{ {
int n_part = 0; _anno = m.get_int(F_ANNO);
desccl = m.get(F_DESCCL); desccl = m.get(F_DESCCL);
descfo = m.get(F_DESCFO); descfo = m.get(F_DESCFO);
int n_part = 0;
m.set(F_NUMPART, format("%d",n_part)); m.set(F_NUMPART, format("%d",n_part));
_anno = m.get_int(F_ANNO);
// sputtana tutto il saldaculo
if (!zap_partite()) break;
saldi.lfile().zero(); saldi.lfile().zero();
saldi.lfile().put(SLD_ANNOES, _anno); saldi.lfile().put(SLD_ANNOES, _anno);
@ -161,28 +188,54 @@ bool TCreatepart_app::menu(MENU_TAG)
TCursor cur(&saldi, "", 1, &saldi.curr(), &saldi.curr()); TCursor cur(&saldi, "", 1, &saldi.curr(), &saldi.curr());
const long items = cur.items(); const long items = cur.items();
long npart = 0L; long npart = 0L;
// determina ultima partita; la prima volta,
// se ce n'e' chiedi se si vuole cancellare
long last_partita = 1l;
if (items > 0) if (items > 0)
{ {
begin_wait(); begin_wait();
TProgind prind(items, "Creazione saldaconto", FALSE, TRUE,45);
int hw = 0; int hw = 0;
for (cur = 0, hw = 0 ; cur.pos() < items; ++cur, hw++) for (cur = 0, hw = 0 ; cur.pos() < items; ++cur, hw++)
{ {
char cf; char cf; int nclienti;
int gruppo = cur.curr().get_int(SLD_GRUPPO); int gruppo = cur.curr().get_int(SLD_GRUPPO);
int conto = cur.curr().get_int(SLD_CONTO); int conto = cur.curr().get_int(SLD_CONTO);
long sottoc = cur.curr().get_long(SLD_SOTTOCONTO); long sottoc = cur.curr().get_long(SLD_SOTTOCONTO);
if (is_clifo(gruppo, conto, cf)) int indbil;
if ((nclienti = is_clifo(gruppo, conto, cf, indbil)) > 0)
{ {
TImporto saldo(cur.curr().get_char(SLD_FLAGSALINI), cur.curr().get_real(SLD_SALDO)); TSaldo sld;
TImporto pdare('D', cur.curr().get_real(SLD_PDARE));
TImporto pavere('A', cur.curr().get_real(SLD_PAVERE)); // ciuccia il saldo e vedi se e' movimentato nell'esercizio corrente
if (!sld.ultima_immissione_verifica(_anno, gruppo, conto, sottoc, indbil, 1))
{
// non movimentato: se e' conto patrimoniale....
if (!(indbil == 1 || indbil == 2 || indbil == 5))
{
prind.addstatus(1);
continue;
}
// .. vedi saldo esercizio precedente, altrimenti inkul
sld.saldofin_esprec(_anno, gruppo, conto, sottoc);
}
// genera importo con sezione appropriata
TImporto saldo(cur.curr().get_char(SLD_FLAGSALINI), sld.saldoini());
TImporto pdare('D', sld.prgdare());
TImporto pavere('A', sld.prgavere());
saldo += pdare; saldo += pdare;
saldo += pavere; saldo += pavere;
saldo.normalize(); saldo.normalize();
// (whew)
if (!saldo.is_zero()) if (!saldo.is_zero())
{ {
TString16 id; TString16 id;
@ -192,15 +245,8 @@ bool TCreatepart_app::menu(MENU_TAG)
// pag.set_total(val, ZERO, ZERO); // pag.set_total(val, ZERO, ZERO);
// pag.set_rate_auto(); // pag.set_rate_auto();
// sputtana tutto il saldaculo
if (!zap_partite(hw == 0)) return FALSE;
// determina ultima partita; la prima volta,
// se ce n'e' chiedi se si vuole cancellare
long last_partita = 1l;
// apri partita dimmerda // apri partita dimmerda
id << format("*%05ld", last_partita); id << format("*%05ld", last_partita++);
_partite->zero(); _partite->zero();
_partite->put(PART_ANNO, _anno); _partite->put(PART_ANNO, _anno);
@ -211,7 +257,6 @@ bool TCreatepart_app::menu(MENU_TAG)
_partite->put(PART_DATADOC, today); _partite->put(PART_DATADOC, today);
_partite->put(PART_SEZ, saldo.sezione()); _partite->put(PART_SEZ, saldo.sezione());
_partite->put(PART_IMPORTO, saldo.valore()); _partite->put(PART_IMPORTO, saldo.valore());
// _partite->put(PART_CODPAG, codpag);
_partite->put(PART_CODVAL, "LIT"); _partite->put(PART_CODVAL, "LIT");
_partite->put(PART_TIPOCF, cf); _partite->put(PART_TIPOCF, cf);
_partite->put(PART_GRUPPOCL, gruppo); _partite->put(PART_GRUPPOCL, gruppo);
@ -219,6 +264,8 @@ bool TCreatepart_app::menu(MENU_TAG)
_partite->put(PART_SOTTOCONTO,sottoc); _partite->put(PART_SOTTOCONTO,sottoc);
_partite->put(PART_DESCR, cf == 'C' ? desccl : descfo); _partite->put(PART_DESCR, cf == 'C' ? desccl : descfo);
// _partite->put(PART_CODPAG, codpag);
// cazzata dare/avere/fare/baciare/cagare // cazzata dare/avere/fare/baciare/cagare
int tipo = (cf == 'C' ? (saldo.sezione() == 'D' ? 1 : 3) : int tipo = (cf == 'C' ? (saldo.sezione() == 'D' ? 1 : 3) :
(saldo.sezione() == 'D' ? 3 : 1)); (saldo.sezione() == 'D' ? 3 : 1));
@ -226,33 +273,53 @@ bool TCreatepart_app::menu(MENU_TAG)
_partite->put(PART_TIPOMOV, tipo); _partite->put(PART_TIPOMOV, tipo);
_partite->write(); _partite->write();
if (tipo == 1)
{
// apri scadenze dimmerda: tante quanti clienti ci sono // apri scadenze dimmerda: tante quanti clienti ci sono
// TBI vedi n. clienti
int nclienti = 1;
for (int i = 0; i < nclienti; i++) for (int i = 0; i < nclienti; i++)
{ {
_scadenze->zero(); _scadenze->zero();
_scadenze->put(SCAD_ANNO, _anno); _scadenze->put(SCAD_ANNO, _anno);
_scadenze->put(SCAD_NUMPART, id); _scadenze->put(SCAD_NUMPART, id);
_scadenze->put(SCAD_NRATA, i+1); _scadenze->put(SCAD_NRATA, i+1);
_scadenze->put(SCAD_IMPORTO, val/real((double)nclienti));
_scadenze->put(SCAD_TIPOCF, cf);
_scadenze->put(SCAD_SOTTOCONTO, sottoc);
// oldies and goldies
// not removed, you know why
// ------------------------------------------------------------
// _scadenze->put(SCAD_CODPAG, codpag); // _scadenze->put(SCAD_CODPAG, codpag);
// _scadenze->put(SCAD_ULTCLASS, pag.ulc_rata(i)); // _scadenze->put(SCAD_ULTCLASS, pag.ulc_rata(i));
// _scadenze->put(SCAD_TIPOPAG, pag.tipo_rata(i)); // _scadenze->put(SCAD_TIPOPAG, pag.tipo_rata(i));
_scadenze->put(SCAD_IMPORTO, val/real((double)nclienti));
// _scadenze->put(SCAD_DATASCAD, pag.data_rata(i)); // _scadenze->put(SCAD_DATASCAD, pag.data_rata(i));
_scadenze->put(SCAD_TIPOCF, cf);
// _scadenze->put(SCAD_GRUPPO, gruppo); // _scadenze->put(SCAD_GRUPPO, gruppo);
// _scadenze->put(SCAD_CONTO, conto); // _scadenze->put(SCAD_CONTO, conto);
_scadenze->put(SCAD_SOTTOCONTO, sottoc);
_scadenze->write(); _scadenze->write();
} }
}
else
{
// apri insoluto
for (int i = 0; i < nclienti; i++)
{
_pagsca->zero();
_pagsca->put(SOLL_ANNO, _anno);
_pagsca->put(SOLL_NUMPART, id);
_pagsca->put(SOLL_NRIGP, i+1);
_pagsca->put(SOLL_IMPORTO, val/real((double)nclienti));
_pagsca->put(SOLL_TIPOC, cf);
_pagsca->put(SOLL_SOTTOCONTO, sottoc);
_pagsca->write();
}
}
n_part++; n_part++;
m.set(F_NUMPART, format("%d",n_part)); m.set(F_NUMPART, format("%d",n_part));
} }
} }
prind.addstatus(1);
} }
end_wait(); end_wait();
} }

View File

@ -10,7 +10,7 @@ END
TEXT DLG_NULL TEXT DLG_NULL
BEGIN BEGIN
PROMPT 32 1 "@bATTENZIONE" PROMPT 31 1 "@bATTENZIONE"
END END
TEXT DLG_NULL TEXT DLG_NULL