1998-11-04 18:04:26 +00:00
|
|
|
|
#include <currency.h>
|
1999-05-24 13:34:11 +00:00
|
|
|
|
#include <recarray.h>
|
1997-05-12 15:31:33 +00:00
|
|
|
|
#include <relapp.h>
|
1996-11-14 17:40:05 +00:00
|
|
|
|
#include <msksheet.h>
|
|
|
|
|
#include <sheet.h>
|
1999-04-26 15:58:05 +00:00
|
|
|
|
#include <tabutil.h>
|
1996-11-14 17:40:05 +00:00
|
|
|
|
#include <utility.h>
|
1998-11-04 18:04:26 +00:00
|
|
|
|
|
1997-02-12 09:15:50 +00:00
|
|
|
|
#include <clifo.h>
|
1998-11-04 18:04:26 +00:00
|
|
|
|
|
1996-11-14 17:40:05 +00:00
|
|
|
|
#include "ef0.h"
|
|
|
|
|
#include "ef0300.h"
|
|
|
|
|
#include "ef0301.h"
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
1996-12-06 15:50:15 +00:00
|
|
|
|
//Classe per la gestione di distinte (inserimento, modifica, cancellazione) //
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// e per la creazione automatica di distinte per importi. //
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
1996-11-14 17:40:05 +00:00
|
|
|
|
class TVariazione_distinte: public TRelation_application
|
|
|
|
|
{
|
|
|
|
|
TMask *_msk, *_m2;
|
|
|
|
|
TDistinta *_distinta;
|
1996-11-22 17:17:26 +00:00
|
|
|
|
TRelation *_rel;
|
1999-05-24 13:34:11 +00:00
|
|
|
|
|
1996-11-14 17:40:05 +00:00
|
|
|
|
protected:
|
|
|
|
|
virtual void init_query_mode(TMask&);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
virtual void init_insert_mode(TMask&);
|
|
|
|
|
virtual void init_modify_mode(TMask&);
|
1996-11-14 17:40:05 +00:00
|
|
|
|
virtual const char* get_next_key();
|
|
|
|
|
virtual int read(TMask& m);
|
|
|
|
|
virtual int rewrite(const TMask& m);
|
|
|
|
|
virtual int write(const TMask& m);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
virtual bool remove();
|
1996-11-14 17:40:05 +00:00
|
|
|
|
virtual TMask* get_mask(int mode) {return _msk;}
|
1996-11-22 17:17:26 +00:00
|
|
|
|
virtual bool changing_mask(int mode) {return FALSE;}
|
1997-03-25 16:05:38 +00:00
|
|
|
|
static bool tipodist_handler(TMask_field& f, KEY k);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
static bool importo_handler(TMask_field& f, KEY k);
|
|
|
|
|
static bool imp_aut_handler(TMask_field& f, KEY k);
|
|
|
|
|
static bool impdist_notify(TSheet_field& s, int r, KEY key);
|
|
|
|
|
static bool imp_notify(TSheet_field& s, int r, KEY key);
|
1996-11-14 17:40:05 +00:00
|
|
|
|
static bool conferma_handler(TMask_field& f, KEY k);
|
|
|
|
|
static bool annulla_handler(TMask_field& f, KEY k);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
static bool data_handler(TMask_field& f, KEY k);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
static bool ordina_handler(TMask_field& f, KEY k);
|
|
|
|
|
static void calcola_totale();
|
|
|
|
|
static void calcola();
|
|
|
|
|
static void aggiungi();
|
1998-11-04 18:04:26 +00:00
|
|
|
|
static bool effetto_aggiunto(const long numero);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
static void carica_riba(int tipopag, const bool reset = TRUE);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
static void ord_data();
|
|
|
|
|
static void ord_fatt();
|
1997-05-12 15:31:33 +00:00
|
|
|
|
// ritorna un riferimento allo sheet degli effetti (righe) nella
|
|
|
|
|
// distinta
|
|
|
|
|
TSheet_field& righe_sheet() const { return (TSheet_field&)_msk->field(F_SHEET_RIBA); }
|
|
|
|
|
// ritorna un riferimento allo sheet delle righe
|
|
|
|
|
TSheet_field& righe_sel_sheet() const { return (TSheet_field&)_m2->field(F_SHEET); }
|
1996-11-14 17:40:05 +00:00
|
|
|
|
bool cerca(long num);
|
|
|
|
|
bool user_create();
|
|
|
|
|
bool user_destroy();
|
|
|
|
|
void aggiorna();
|
1999-06-18 15:35:05 +00:00
|
|
|
|
TToken_string* common_f(const TMask& m, TToken_string& datidist);
|
|
|
|
|
|
1996-11-14 17:40:05 +00:00
|
|
|
|
public:
|
|
|
|
|
virtual TRelation* get_relation() const {return _rel;}
|
|
|
|
|
TVariazione_distinte() {};
|
|
|
|
|
virtual ~TVariazione_distinte() {};
|
|
|
|
|
};
|
|
|
|
|
|
1996-12-06 15:50:15 +00:00
|
|
|
|
// restituisce un riferimento all' applicazione
|
|
|
|
|
inline TVariazione_distinte& app(){ return (TVariazione_distinte&)main_app(); }
|
1996-11-14 17:40:05 +00:00
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// quando si va in query mode abilita i campi relativi alla chiave
|
|
|
|
|
// di ricerca e resetta i campi relativi ai totali
|
1996-11-14 17:40:05 +00:00
|
|
|
|
void TVariazione_distinte::init_query_mode(TMask&)
|
|
|
|
|
{
|
1996-11-22 17:17:26 +00:00
|
|
|
|
_msk->enable(F_NUMBER);
|
|
|
|
|
_msk->enable(F_TIPODIST);
|
1996-11-14 17:40:05 +00:00
|
|
|
|
_msk->reset(F_TOTIMP);
|
1997-05-12 15:31:33 +00:00
|
|
|
|
_msk->enable(F_TIPOPAG);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
_msk->enable(F_TIPOCF);
|
1996-11-14 17:40:05 +00:00
|
|
|
|
}
|
1996-12-06 15:50:15 +00:00
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// quando si va in insert mode resetta i campi della maschera relativi
|
|
|
|
|
// ai totali, abilita i campi relativi alla valuta e disabilta i campi
|
|
|
|
|
// relativi alla chiave di ricerca
|
1996-11-14 17:40:05 +00:00
|
|
|
|
void TVariazione_distinte::init_insert_mode(TMask&)
|
|
|
|
|
{
|
|
|
|
|
_msk->reset(F_TOTIMP);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
_msk->enable(F_CODVAL);
|
|
|
|
|
_msk->disable(F_NUMBER);
|
1997-05-12 15:31:33 +00:00
|
|
|
|
_msk->disable(F_TIPODIST);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
_msk->enable(F_TIPOPAG);
|
|
|
|
|
_msk->enable(F_TIPOCF);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// quando si va in modify mode disabilta i campi relativi alla chiave
|
|
|
|
|
// di ricerca
|
1996-11-22 17:17:26 +00:00
|
|
|
|
void TVariazione_distinte::init_modify_mode(TMask&)
|
|
|
|
|
{
|
|
|
|
|
_msk->disable(F_NUMBER);
|
|
|
|
|
_msk->disable(F_TIPODIST);
|
1997-05-12 15:31:33 +00:00
|
|
|
|
_msk->disable(F_TIPOPAG);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
_msk->disable(F_TIPOCF);
|
1996-11-14 17:40:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
1997-05-12 15:31:33 +00:00
|
|
|
|
// ritorna il prossimo numero di distinta valido
|
1996-11-14 17:40:05 +00:00
|
|
|
|
const char* TVariazione_distinte::get_next_key()
|
1997-01-15 16:00:56 +00:00
|
|
|
|
{
|
2000-05-05 15:25:49 +00:00
|
|
|
|
const TString& tipodist = curr_mask().get(F_TIPODIST);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
TLocalisamfile& effetti = _rel->lfile();
|
1997-01-15 16:00:56 +00:00
|
|
|
|
effetti.put(EFF_TIPODIST,tipodist);
|
2000-05-05 15:25:49 +00:00
|
|
|
|
effetti.put(EFF_NDIST,99999L);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
effetti.setkey(4);
|
2000-05-05 15:25:49 +00:00
|
|
|
|
|
|
|
|
|
long ndist = 1;
|
|
|
|
|
const int err = effetti.read(_isgreat);
|
|
|
|
|
if (err != _isemptyfile)
|
|
|
|
|
{
|
|
|
|
|
if (err == NOERR)
|
|
|
|
|
effetti.prev();
|
|
|
|
|
if (effetti.get(EFF_TIPODIST) == tipodist)
|
|
|
|
|
ndist += effetti.get_long(EFF_NDIST);
|
|
|
|
|
}
|
|
|
|
|
|
1997-05-12 15:31:33 +00:00
|
|
|
|
return format("%d|%ld",F_NUMBER,ndist);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
}
|
1996-11-14 17:40:05 +00:00
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// ritorna TRUE se trovo nell'array delle righe distinta l'effetto
|
|
|
|
|
// passato
|
1996-11-14 17:40:05 +00:00
|
|
|
|
bool TVariazione_distinte::cerca(long num)
|
|
|
|
|
{
|
1997-01-15 16:00:56 +00:00
|
|
|
|
TArray& righedist = _distinta->righe();
|
1997-05-12 15:31:33 +00:00
|
|
|
|
|
|
|
|
|
for (int i = _distinta->items() - 1; i >= 0; i--)// ciclo sugli elementi dell'array
|
1997-02-18 15:10:08 +00:00
|
|
|
|
{
|
1996-11-14 17:40:05 +00:00
|
|
|
|
TEffetto& eff = (TEffetto&)righedist[i];
|
1997-05-12 15:31:33 +00:00
|
|
|
|
|
|
|
|
|
if (num == eff.get_long(EFF_NPROGTR))
|
|
|
|
|
return TRUE;
|
1996-11-14 17:40:05 +00:00
|
|
|
|
}
|
1997-05-12 15:31:33 +00:00
|
|
|
|
return FALSE;
|
1996-11-14 17:40:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// metodo che permette di scivere sull'array (in memoria) gli
|
|
|
|
|
// effetti presenti nello sheet
|
1996-11-14 17:40:05 +00:00
|
|
|
|
void TVariazione_distinte::aggiorna()
|
|
|
|
|
{
|
|
|
|
|
TSheet_field& shrighe = righe_sheet();
|
1997-01-15 16:00:56 +00:00
|
|
|
|
int items = shrighe.items();
|
1997-02-18 15:10:08 +00:00
|
|
|
|
for (int i = 0; i < items; i++)// prendo tutte le righe dello sheet
|
1996-11-14 17:40:05 +00:00
|
|
|
|
{
|
|
|
|
|
TToken_string& row = shrighe.row(i);
|
|
|
|
|
row.restart();
|
1997-05-12 15:31:33 +00:00
|
|
|
|
long num = row.get_long(shrighe.cid2index(F_NRIBA));
|
1997-02-18 15:10:08 +00:00
|
|
|
|
if (!cerca(num))// se non <20> gi<67> presente in memoria
|
|
|
|
|
{ // carico l'effetto nell'array
|
1996-11-14 17:40:05 +00:00
|
|
|
|
TLocalisamfile eff(LF_EFFETTI);
|
1997-05-12 15:31:33 +00:00
|
|
|
|
TRectype & rec = eff.curr();
|
1996-11-14 17:40:05 +00:00
|
|
|
|
eff.setkey(1);
|
|
|
|
|
rec.zero();
|
|
|
|
|
rec.put(EFF_NPROGTR, num);
|
1997-05-12 15:31:33 +00:00
|
|
|
|
eff.read();
|
|
|
|
|
|
|
|
|
|
TEffetto* effetto = new TEffetto(rec);
|
1996-11-14 17:40:05 +00:00
|
|
|
|
TArray& righedist = _distinta->righe();
|
|
|
|
|
righedist.add(effetto);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Metodo che permette di prendere i dati dalla maschera e metterli in
|
|
|
|
|
// una TToken_string che servir<69> per passarli alla write della distinta
|
1999-06-18 15:35:05 +00:00
|
|
|
|
TToken_string* TVariazione_distinte::common_f(const TMask& m, TToken_string& datidist)
|
1996-11-14 17:40:05 +00:00
|
|
|
|
{
|
1997-01-15 16:00:56 +00:00
|
|
|
|
char tipodist = m.get(F_TIPODIST)[0];// prendo i dati
|
|
|
|
|
long ndist = m.get_long(F_NUMBER); // identificatvi della
|
1996-12-06 15:50:15 +00:00
|
|
|
|
TDate datadist = (TDate)m.get(F_DATA);// distinta
|
|
|
|
|
long codabi = m.get_long(F_CODABIP); // dalla maschera
|
|
|
|
|
long codcab = m.get_long(F_CODCABP);
|
|
|
|
|
m.autosave(*_rel);
|
1999-06-18 15:35:05 +00:00
|
|
|
|
|
|
|
|
|
datidist.add(tipodist); // inserisco i dati nella
|
|
|
|
|
datidist.add(ndist); // token string
|
|
|
|
|
datidist.add(datadist);
|
|
|
|
|
datidist.add(codabi);
|
|
|
|
|
datidist.add(codcab);
|
|
|
|
|
return &datidist;
|
1996-11-14 17:40:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
1996-12-06 15:50:15 +00:00
|
|
|
|
// carica nella maschera i dati dai files
|
1996-11-14 17:40:05 +00:00
|
|
|
|
int TVariazione_distinte::read(TMask& m)
|
|
|
|
|
{
|
|
|
|
|
m.autoload(*_rel);
|
|
|
|
|
int err = _rel->status();
|
|
|
|
|
if (err == NOERR)
|
1997-01-15 16:00:56 +00:00
|
|
|
|
{
|
1997-02-18 15:10:08 +00:00
|
|
|
|
//resetto l'array che contiene gli effetti nella distinta
|
|
|
|
|
err = _distinta->reset();
|
|
|
|
|
// legge la distinta dal record corrente della relazione
|
|
|
|
|
err = _distinta->read(_rel->curr());
|
1996-11-14 17:40:05 +00:00
|
|
|
|
if (err == NOERR)
|
|
|
|
|
{
|
|
|
|
|
TToken_string riga(80);
|
|
|
|
|
TSheet_field& shrighe = righe_sheet();
|
1997-01-15 16:00:56 +00:00
|
|
|
|
shrighe.reset();
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// prendo il numero di effetti nella distinta
|
1999-05-24 13:34:11 +00:00
|
|
|
|
const int items = _distinta->items();
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// carico tutti gli effetti della distinta nello sheet
|
1997-05-12 15:31:33 +00:00
|
|
|
|
if (items > 0)
|
|
|
|
|
{
|
1999-05-24 13:34:11 +00:00
|
|
|
|
TString16 codice; // Codice per cache
|
|
|
|
|
|
|
|
|
|
TArray& righedist = _distinta->righe();
|
1997-05-12 15:31:33 +00:00
|
|
|
|
TEffetto& e = (TEffetto&)righedist[0];
|
1999-05-24 13:34:11 +00:00
|
|
|
|
m.set(F_DATA, e.get(EFF_DATADIST));// distinta
|
|
|
|
|
m.set(F_CODABIP, e.get(EFF_CODABIP)); // dalla maschera
|
|
|
|
|
m.set(F_CODCABP, e.get(EFF_CODCABP));
|
1997-05-12 15:31:33 +00:00
|
|
|
|
for (int i = 0; i < items; i++)
|
|
|
|
|
{
|
|
|
|
|
TEffetto& eff = (TEffetto&)righedist[i];
|
|
|
|
|
riga.cut(0);
|
|
|
|
|
riga.add(' ');
|
|
|
|
|
const long numero = eff.get_long(EFF_NPROGTR);
|
|
|
|
|
riga.add(numero);
|
|
|
|
|
riga.add(eff.get(EFF_DATASCAD));
|
|
|
|
|
//prendo la ragione sociale del cliente conoscendone il codice
|
1999-05-24 13:34:11 +00:00
|
|
|
|
|
|
|
|
|
codice.cut(0);
|
|
|
|
|
codice << eff.get_tipo(); codice << '|' << eff.get(EFF_CODCF);
|
|
|
|
|
riga.add(cache().get(LF_CLIFO, codice, CLI_RAGSOC));
|
|
|
|
|
|
2001-05-02 13:40:49 +00:00
|
|
|
|
codice = eff.get(EFF_CODABI);
|
|
|
|
|
TString desc(cache().get("%BAN", codice, "S0"));
|
|
|
|
|
codice << eff.get(EFF_CODCAB);
|
|
|
|
|
desc << " " << cache().get("%BAN", codice, "S0");
|
|
|
|
|
desc.cut(50);
|
|
|
|
|
riga.add(desc);
|
1999-05-24 13:34:11 +00:00
|
|
|
|
|
1997-05-12 15:31:33 +00:00
|
|
|
|
if (eff.fatt(numero))// se l'effetto contiene solo una fattura
|
|
|
|
|
{ // metto i riferimenti al documento ed al numero di rata
|
|
|
|
|
const TRectype& rec_r = eff.row_r(1);
|
|
|
|
|
riga.add(rec_r.get(REFF_NFATT));
|
|
|
|
|
riga.add(rec_r.get(REFF_DATAFATT));
|
|
|
|
|
if (eff.rows_r() == 1)
|
|
|
|
|
riga.add(rec_r.get(REFF_NRATA));
|
|
|
|
|
else
|
|
|
|
|
riga.add("Varie");
|
|
|
|
|
}
|
|
|
|
|
else// se l'effetto contiene pi<70> di una fattura
|
|
|
|
|
{ // non metto i riferimenti al documento ed al numero di rata
|
|
|
|
|
riga.add("Varie");
|
|
|
|
|
riga.add("Varie");
|
|
|
|
|
riga.add("Varie");
|
|
|
|
|
}
|
|
|
|
|
//gestisco il controllo sulla presenza o meno di una valuta
|
|
|
|
|
const TString16 codval(eff.get(EFF_CODVAL));
|
|
|
|
|
if (i == 0)
|
2001-05-02 13:40:49 +00:00
|
|
|
|
{
|
|
|
|
|
const bool valuta = ::is_true_value(codval);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
m.set(F_CODVAL, codval);
|
1997-05-12 15:31:33 +00:00
|
|
|
|
m.enable(F_CODVAL, valuta);
|
|
|
|
|
}
|
|
|
|
|
riga.add(codval);
|
2001-05-02 13:40:49 +00:00
|
|
|
|
const real soldi = eff.get_real(EFF_IMPORTO);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
riga.add(soldi.string());
|
2001-05-02 13:40:49 +00:00
|
|
|
|
const real soldival = eff.get_real(EFF_IMPORTOVAL);
|
|
|
|
|
if (!soldival.is_zero())
|
1999-10-22 10:00:18 +00:00
|
|
|
|
riga.add(soldival.string());
|
1998-11-04 18:04:26 +00:00
|
|
|
|
|
1997-05-12 15:31:33 +00:00
|
|
|
|
shrighe.row(i) = riga;
|
1996-11-22 17:17:26 +00:00
|
|
|
|
}
|
1996-11-14 17:40:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return err;
|
|
|
|
|
}
|
|
|
|
|
|
1997-05-12 15:31:33 +00:00
|
|
|
|
// riscrive distinta
|
|
|
|
|
int TVariazione_distinte::rewrite(const TMask& m)
|
|
|
|
|
{
|
|
|
|
|
// prima di riscrive controllo se ci sono effetti nello sheet
|
|
|
|
|
// selezionati per l'eliminazione
|
|
|
|
|
TEffetto eff;
|
|
|
|
|
TLocalisamfile file(LF_EFFETTI);
|
|
|
|
|
const char tipodist = _msk->get(F_TIPODIST)[0];
|
|
|
|
|
const long ndist = _msk->get_long(F_NUMBER);
|
|
|
|
|
TDistinta * distinta = app()._distinta;
|
|
|
|
|
TSheet_field& sf = righe_sheet();
|
|
|
|
|
int items = sf.items();
|
|
|
|
|
int to_delete = 0;
|
|
|
|
|
for (int i = items - 1; i >= 0 ; i--)
|
|
|
|
|
{
|
|
|
|
|
TToken_string& row = sf.row(i);
|
|
|
|
|
if (*row.get(0) == 'X') // to delete
|
|
|
|
|
to_delete++;
|
|
|
|
|
}
|
|
|
|
|
if (items <= to_delete)
|
|
|
|
|
{ // non posso cancellare tutti gli effetti di una distinta
|
|
|
|
|
error_box("Impossibile escludere tutti gli effetti dalla distinta.\n Utilizzare elimina per cancellarla.");
|
|
|
|
|
return NOERR;
|
|
|
|
|
}
|
|
|
|
|
if (to_delete > 0)
|
|
|
|
|
{
|
1996-11-22 17:17:26 +00:00
|
|
|
|
TArray& righedist = distinta->righe();
|
1997-02-18 15:10:08 +00:00
|
|
|
|
//ciclo sugli elementi dello sheet
|
1997-05-12 15:31:33 +00:00
|
|
|
|
|
|
|
|
|
for (int i = items - 1; i >= 0; i--)
|
1997-02-18 15:10:08 +00:00
|
|
|
|
{
|
1999-05-24 13:34:11 +00:00
|
|
|
|
TToken_string& row = sf.row(i);
|
|
|
|
|
if (*row.get(0) == 'X') // to delete
|
|
|
|
|
{
|
|
|
|
|
const long num = row.get_long(1);
|
|
|
|
|
//ciclo sugli elementi dell'array
|
|
|
|
|
for (int j = 0; j < distinta->items(); j++)
|
|
|
|
|
{
|
|
|
|
|
TEffetto& eff = (TEffetto&)righedist[j];
|
|
|
|
|
if (num == eff.get_long(EFF_NPROGTR))
|
1997-05-12 15:31:33 +00:00
|
|
|
|
{
|
1999-05-24 13:34:11 +00:00
|
|
|
|
// tolgo l'effetto dall'array
|
|
|
|
|
righedist.destroy(j,TRUE);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// tolgo l'effetto dallo sheet
|
|
|
|
|
sf.destroy(i);
|
|
|
|
|
eff.read(file, tipodist, ndist, i + 1);
|
|
|
|
|
eff.zero(EFF_TIPODIST);
|
|
|
|
|
eff.zero(EFF_NDIST);
|
|
|
|
|
eff.zero(EFF_DATADIST);
|
|
|
|
|
eff.zero(EFF_NRIGADIST);
|
|
|
|
|
eff.zero(EFF_CODABIP);
|
|
|
|
|
eff.zero(EFF_CODCABP);
|
|
|
|
|
eff.rewrite(file);
|
|
|
|
|
}
|
1996-11-22 17:17:26 +00:00
|
|
|
|
}
|
1997-05-12 15:31:33 +00:00
|
|
|
|
}
|
1997-02-18 15:10:08 +00:00
|
|
|
|
//resetto l'array che contiene gli effetti nella distinta
|
|
|
|
|
int err = _distinta->reset();
|
1999-06-18 15:35:05 +00:00
|
|
|
|
aggiorna();
|
|
|
|
|
|
|
|
|
|
TToken_string datidist;
|
|
|
|
|
err = _distinta->rewrite(common_f(m, datidist));
|
1997-02-18 15:10:08 +00:00
|
|
|
|
if (err == NOERR)
|
|
|
|
|
{ // riposiziono la relazione
|
1996-11-22 17:17:26 +00:00
|
|
|
|
_rel->lfile().setkey(4);
|
|
|
|
|
TRectype& curr = _rel->curr();
|
1997-01-15 16:00:56 +00:00
|
|
|
|
curr.put(EFF_TIPODIST, tipodist);
|
|
|
|
|
curr. put(EFF_NDIST, ndist);
|
|
|
|
|
curr. put(EFF_NRIGADIST, 1);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
_rel->read();
|
|
|
|
|
}
|
|
|
|
|
return err;
|
1996-11-14 17:40:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
1996-12-06 15:50:15 +00:00
|
|
|
|
// scrive distinta
|
1996-11-14 17:40:05 +00:00
|
|
|
|
int TVariazione_distinte::write(const TMask& m)
|
1997-01-15 16:00:56 +00:00
|
|
|
|
{
|
1997-02-18 15:10:08 +00:00
|
|
|
|
//resetto l'array che contiene gli effetti nella distinta
|
|
|
|
|
int err = _distinta->reset();
|
1996-11-22 17:17:26 +00:00
|
|
|
|
char tipodist = m.get(F_TIPODIST)[0];
|
1997-01-15 16:00:56 +00:00
|
|
|
|
long ndist = m.get_long(F_NUMBER);
|
1999-06-18 15:35:05 +00:00
|
|
|
|
aggiorna();
|
|
|
|
|
|
|
|
|
|
TToken_string datidist;
|
|
|
|
|
err = _distinta->write(TRUE, common_f(m, datidist));
|
1996-11-22 17:17:26 +00:00
|
|
|
|
if (err == NOERR)
|
1997-02-18 15:10:08 +00:00
|
|
|
|
{ //riposiziono la relazione
|
1996-11-22 17:17:26 +00:00
|
|
|
|
_rel->lfile().setkey(4);
|
|
|
|
|
TRectype& curr = _rel->curr();
|
1997-01-15 16:00:56 +00:00
|
|
|
|
curr.put(EFF_TIPODIST, tipodist);
|
|
|
|
|
curr. put(EFF_NDIST, ndist);
|
|
|
|
|
curr. put(EFF_NRIGADIST, 1);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
_rel->read();
|
|
|
|
|
}
|
|
|
|
|
return err;
|
1996-11-14 17:40:05 +00:00
|
|
|
|
}
|
1996-11-22 17:17:26 +00:00
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Metodo che permette di eliminare una distinta, l'eliminazione
|
|
|
|
|
// consiste nell'andare a togliere dagli effetti i dati ad essa
|
|
|
|
|
// relativi.
|
1996-11-22 17:17:26 +00:00
|
|
|
|
bool TVariazione_distinte::remove()
|
1996-11-14 17:40:05 +00:00
|
|
|
|
{
|
1998-11-04 18:04:26 +00:00
|
|
|
|
TMask* m = _msk;
|
1996-11-22 17:17:26 +00:00
|
|
|
|
char tipodist = m->get(F_TIPODIST)[0];
|
|
|
|
|
long ndist = m->get_long(F_NUMBER);
|
1998-11-04 18:04:26 +00:00
|
|
|
|
bool err = _distinta->remove(tipodist, ndist) == NOERR;
|
1996-11-22 17:17:26 +00:00
|
|
|
|
return err;
|
1996-11-14 17:40:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
1996-12-06 15:50:15 +00:00
|
|
|
|
// creo la relap
|
1996-11-14 17:40:05 +00:00
|
|
|
|
bool TVariazione_distinte::user_create()
|
|
|
|
|
{
|
1999-05-24 13:34:11 +00:00
|
|
|
|
open_files(LF_TAB, LF_TABCOM, LF_EFFETTI, LF_REFFETTI, LF_CESS, NULL);
|
1996-11-14 17:40:05 +00:00
|
|
|
|
_msk = new TMask("ef0300a");
|
|
|
|
|
_m2 = new TMask("ef0300c");
|
|
|
|
|
_rel = new TRelation(LF_EFFETTI);
|
1999-05-24 13:34:11 +00:00
|
|
|
|
|
1996-11-14 17:40:05 +00:00
|
|
|
|
_distinta = new TDistinta;
|
1997-02-18 15:10:08 +00:00
|
|
|
|
set_search_field(F_NUMBER);//setto il campo di ricerca della distinta
|
1997-03-25 16:05:38 +00:00
|
|
|
|
_msk->set_handler(F_TIPODIST, tipodist_handler);
|
1998-11-04 18:04:26 +00:00
|
|
|
|
_msk->set_handler(F_IMPBUTTON, importo_handler);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
_m2->set_handler(F_TOTIMPDIST, imp_aut_handler);
|
1996-11-14 17:40:05 +00:00
|
|
|
|
_m2->set_handler(DLG_OK, conferma_handler);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
_m2->set_handler(DLG_CANCEL, annulla_handler);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
_m2->set_handler(F_DADATA, data_handler);
|
|
|
|
|
_m2->set_handler(F_ADATA, data_handler);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
_m2->set_handler(F_TIPORD, ordina_handler);
|
|
|
|
|
righe_sheet().set_notify(impdist_notify);
|
|
|
|
|
righe_sel_sheet().set_notify(imp_notify);
|
1996-11-14 17:40:05 +00:00
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1996-12-06 15:50:15 +00:00
|
|
|
|
// distruggo la relap
|
1996-11-14 17:40:05 +00:00
|
|
|
|
bool TVariazione_distinte::user_destroy()
|
|
|
|
|
{
|
|
|
|
|
delete _msk;
|
|
|
|
|
delete _m2;
|
|
|
|
|
delete _rel;
|
|
|
|
|
delete _distinta;
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1998-11-04 18:04:26 +00:00
|
|
|
|
// Cerca se la riba indicata da <numero> e' gia stato inserita nello spreadsheet principale
|
|
|
|
|
bool TVariazione_distinte::effetto_aggiunto(const long numero)
|
|
|
|
|
{
|
|
|
|
|
TMask* m = app()._msk;
|
|
|
|
|
TSheet_field& sf_riba = (TSheet_field&)m->field(F_SHEET_RIBA);
|
|
|
|
|
bool rt = FALSE;
|
|
|
|
|
const int items = sf_riba.items();
|
|
|
|
|
for (int i=0; i<items && !rt; i++)
|
|
|
|
|
{
|
|
|
|
|
TToken_string& row = sf_riba.row(i);
|
|
|
|
|
if (row.get_long(1) == numero)
|
|
|
|
|
rt = TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return rt;
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Permette di caricare lo sheet per la selezione delle riba da
|
|
|
|
|
// aggiungere alla distinta: vengono presi tutti gli effetti sul file
|
|
|
|
|
// LF_EFFETTI che non hanno ancora un riferimento ad una distinta;
|
|
|
|
|
// inoltre <20> possibile inserire nella distinta effetti aventi lo stesso
|
|
|
|
|
// tipo di pagamento.
|
1999-04-06 15:34:39 +00:00
|
|
|
|
void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
|
1996-11-22 17:17:26 +00:00
|
|
|
|
{
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// deve caricare solo quegli effetti che non hanno riferimento alla
|
|
|
|
|
// distinta quindi setta i campi ad essa relativi a zero
|
1996-11-22 17:17:26 +00:00
|
|
|
|
char tipodist = 0;
|
|
|
|
|
long ndist = 0;
|
1997-05-12 15:31:33 +00:00
|
|
|
|
int nrigadist = 0;
|
1996-11-22 17:17:26 +00:00
|
|
|
|
TEffetto eff;
|
|
|
|
|
TLocalisamfile f(LF_EFFETTI);
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// per prendere la ragione sociale del cliente di cui ho il codice
|
1996-11-22 17:17:26 +00:00
|
|
|
|
TToken_string riga(80);
|
|
|
|
|
TMask* m2 = app()._m2;
|
1999-04-06 15:34:39 +00:00
|
|
|
|
if (reset)
|
|
|
|
|
m2->reset();
|
1996-11-22 17:17:26 +00:00
|
|
|
|
TSheet_field& sf = (TSheet_field&)m2->field(F_SHEET);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
if (reset)
|
|
|
|
|
sf.reset();
|
1998-11-04 18:04:26 +00:00
|
|
|
|
|
|
|
|
|
TString16 codval = app()._msk->get(F_CODVAL);
|
1999-04-26 15:58:05 +00:00
|
|
|
|
TString16 codtab;
|
1998-11-04 18:04:26 +00:00
|
|
|
|
|
1996-11-22 17:17:26 +00:00
|
|
|
|
int err, i = 0;
|
|
|
|
|
err = eff.read(f, tipodist, ndist, nrigadist);
|
1997-01-15 16:00:56 +00:00
|
|
|
|
int tipop = eff.get_int(EFF_TIPOPAG);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
int tipod = app()._msk->get(F_TIPOCF)[0];
|
|
|
|
|
|
1997-01-15 16:00:56 +00:00
|
|
|
|
while ( (err == NOERR) && (tipodist == 0))
|
1997-02-18 15:10:08 +00:00
|
|
|
|
{
|
1997-01-15 16:00:56 +00:00
|
|
|
|
// se effetti di tipo cambiario (pagher<65>, tratta, tratta accettata)
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// se non indico un tipo di effetto prendo il tipo del primo che
|
|
|
|
|
// seleziono
|
1997-05-12 15:31:33 +00:00
|
|
|
|
const bool to_select = (tipopag == 0) || (tipopag == tipop) ||
|
|
|
|
|
((tipopag == 2 || tipopag ==5 || tipopag == 7) &&
|
1998-11-04 18:04:26 +00:00
|
|
|
|
(tipop == 2 || tipop ==5 || tipop == 7));
|
1999-05-24 13:34:11 +00:00
|
|
|
|
const char tipo = eff.get_tipo();
|
|
|
|
|
|
1998-11-04 18:04:26 +00:00
|
|
|
|
TString16 valuta = eff.get(EFF_CODVAL);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
|
2001-05-02 13:40:49 +00:00
|
|
|
|
const bool valuta_ok = ::same_values(valuta, codval);
|
1998-11-04 18:04:26 +00:00
|
|
|
|
const long numero = eff.get_long(EFF_NPROGTR);
|
|
|
|
|
|
1999-04-06 15:34:39 +00:00
|
|
|
|
if (to_select && valuta_ok && !effetto_aggiunto(numero) && tipo == tipod)
|
1997-01-15 16:00:56 +00:00
|
|
|
|
{
|
1998-11-04 18:04:26 +00:00
|
|
|
|
riga = " "; // Campo selezione
|
|
|
|
|
|
1997-05-12 15:31:33 +00:00
|
|
|
|
riga.add(numero);
|
|
|
|
|
riga.add(eff.get(EFF_DATASCAD));
|
1999-05-24 13:34:11 +00:00
|
|
|
|
|
|
|
|
|
TString16 codice;
|
|
|
|
|
codice << tipo << '|' << eff.get(EFF_CODCF);
|
|
|
|
|
riga.add(cache().get(LF_CLIFO, codice, CLI_RAGSOC));
|
|
|
|
|
|
2001-05-02 13:40:49 +00:00
|
|
|
|
codice = eff.get(EFF_CODABI);
|
|
|
|
|
TString desc(cache().get("%BAN", codice, "S0"));
|
|
|
|
|
codice << eff.get(EFF_CODCAB);
|
|
|
|
|
desc << " " << cache().get("%BAN", codice, "S0");
|
|
|
|
|
desc.cut(50);
|
|
|
|
|
riga.add(desc);
|
1999-05-24 13:34:11 +00:00
|
|
|
|
|
1997-05-12 15:31:33 +00:00
|
|
|
|
if (eff.fatt(numero))// se l'effetto contiene solo una fattura
|
|
|
|
|
{ // metto i riferimenti al documento ed al numero di rata
|
|
|
|
|
const TRectype& rec_r = eff.row_r(1);
|
|
|
|
|
riga.add(rec_r.get(REFF_NFATT));
|
|
|
|
|
riga.add(rec_r.get(REFF_DATAFATT));
|
|
|
|
|
if (eff.rows_r() == 1)
|
|
|
|
|
riga.add(rec_r.get(REFF_NRATA));
|
|
|
|
|
else
|
|
|
|
|
riga.add(("Varie"));
|
|
|
|
|
}
|
|
|
|
|
else// se l'effetto contiene pi<70> di una fattura
|
|
|
|
|
{ // non metto i riferimenti al documento ed al numero di rata
|
|
|
|
|
riga.add(("Varie"));
|
|
|
|
|
riga.add(("Varie"));
|
|
|
|
|
riga.add(("Varie"));
|
|
|
|
|
}
|
1998-11-04 18:04:26 +00:00
|
|
|
|
riga.add(valuta);
|
|
|
|
|
|
2001-05-02 13:40:49 +00:00
|
|
|
|
const real soldi = eff.get_real(EFF_IMPORTO);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
riga.add(soldi.string());
|
1998-11-04 18:04:26 +00:00
|
|
|
|
|
2001-05-02 13:40:49 +00:00
|
|
|
|
const real soldival = eff.get_real(EFF_IMPORTOVAL);
|
|
|
|
|
if (!soldival.is_zero())
|
1999-10-22 10:00:18 +00:00
|
|
|
|
riga.add(soldival.string());
|
1998-11-04 18:04:26 +00:00
|
|
|
|
|
1997-05-12 15:31:33 +00:00
|
|
|
|
sf.row(i) = riga;
|
|
|
|
|
i++;
|
1997-01-15 16:00:56 +00:00
|
|
|
|
}
|
1996-11-22 17:17:26 +00:00
|
|
|
|
f.setkey(4);
|
1997-02-18 15:10:08 +00:00
|
|
|
|
err = eff.next(f);//leggo l'effetto successivo
|
|
|
|
|
tipodist = eff.get(EFF_TIPODIST)[0];// e ne prendo il tipo distinta
|
1997-01-15 16:00:56 +00:00
|
|
|
|
tipop = eff.get_int(EFF_TIPOPAG);
|
1996-11-14 17:40:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
1997-03-25 16:05:38 +00:00
|
|
|
|
// Handler per gestire il fatto che una distinta allo sconto pu<70>
|
|
|
|
|
// contenere solo effetti cambiari
|
|
|
|
|
bool TVariazione_distinte::tipodist_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
1997-05-12 15:31:33 +00:00
|
|
|
|
if (k == K_SPACE)
|
|
|
|
|
{
|
|
|
|
|
TMask &m = f.mask();
|
|
|
|
|
const bool allo_sconto = f.get()[0] == 'S';
|
|
|
|
|
|
|
|
|
|
m.enable(F_TIPOPAG, !allo_sconto);
|
|
|
|
|
if (allo_sconto)
|
|
|
|
|
m.set(F_TIPOPAG,2);
|
1997-03-25 16:05:38 +00:00
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Handler per gestire il caricamento degli effetti nella distinta
|
|
|
|
|
// in automatico relativamente ad un importo fissato (per la maschera
|
|
|
|
|
// princiapale)
|
1996-11-22 17:17:26 +00:00
|
|
|
|
bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// se importo distinta maggiore importo presentato si devono andare a
|
|
|
|
|
// caricare effetti in automatico per un valore minore uguale alla
|
|
|
|
|
// differenza dei suddetti importi
|
1998-11-04 18:04:26 +00:00
|
|
|
|
if (k == K_SPACE)
|
|
|
|
|
{
|
|
|
|
|
aggiungi();
|
|
|
|
|
TSheet_field& sf_riba = (TSheet_field&)f.mask().field(F_SHEET_RIBA);
|
|
|
|
|
sf_riba.force_update();
|
|
|
|
|
}
|
|
|
|
|
|
1996-11-14 17:40:05 +00:00
|
|
|
|
return TRUE;
|
1996-11-22 17:17:26 +00:00
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Handler per gestire il caricamento degli effetti nella distinta in
|
|
|
|
|
// automatico relativamente ad un importo fissato (per la maschera
|
|
|
|
|
// secondaria)
|
1996-11-22 17:17:26 +00:00
|
|
|
|
bool TVariazione_distinte::imp_aut_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
TMask& m2 = f.mask();
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// se quando si entra nell maschera il campo contiene un valore
|
|
|
|
|
// significa che si deve procedere con il caricamento automatico
|
|
|
|
|
// di effetti per l'importo iscritto nel campo
|
1997-05-12 15:31:33 +00:00
|
|
|
|
if (k == K_TAB && f.to_check(k, TRUE))
|
1996-11-22 17:17:26 +00:00
|
|
|
|
{
|
|
|
|
|
TMask* m = app()._msk;
|
|
|
|
|
TSheet_field& sf = (TSheet_field&)m2.field(F_SHEET);
|
|
|
|
|
TSheet_field& sf_riba = (TSheet_field&)m->field(F_SHEET_RIBA);
|
1997-05-12 15:31:33 +00:00
|
|
|
|
real res = m2.get_real(F_TOTIMPDIST);
|
1998-11-04 18:04:26 +00:00
|
|
|
|
if (res > ZERO)
|
1997-02-18 15:10:08 +00:00
|
|
|
|
{ // se i due importi sono diversi da zero
|
2001-05-02 13:40:49 +00:00
|
|
|
|
TString16 val = m->get(F_CODVAL);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
int items = sf.items();
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// cerca se esiste un effetto con importo uguale a quello
|
|
|
|
|
// da caricare
|
1997-05-12 15:31:33 +00:00
|
|
|
|
for (int i = 0; i < items; i++)
|
1996-11-22 17:17:26 +00:00
|
|
|
|
{
|
1997-05-12 15:31:33 +00:00
|
|
|
|
TToken_string& row = sf.row(i);
|
|
|
|
|
TString16 codval = row.get(sf.cid2index(F_VALUTA));
|
2001-05-02 13:40:49 +00:00
|
|
|
|
codval.trim();
|
1997-05-12 15:31:33 +00:00
|
|
|
|
// se la valuta non appare o <20> lire faccio in modo che vengano
|
|
|
|
|
// presi gli effetti con valuta inesistente
|
2001-05-02 13:40:49 +00:00
|
|
|
|
const bool valuta = ::is_true_value(codval);
|
|
|
|
|
const real imp(row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO)));
|
|
|
|
|
if (imp == res && ::same_values(codval, val))
|
1997-05-12 15:31:33 +00:00
|
|
|
|
{
|
|
|
|
|
row.add('X', 0);
|
|
|
|
|
res = ZERO;
|
|
|
|
|
}
|
1996-11-22 17:17:26 +00:00
|
|
|
|
}
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// se non esiste un effetto con importo uguale a quello
|
|
|
|
|
// da caricare carico l'importo sommando pi<70> effetti
|
1997-05-12 15:31:33 +00:00
|
|
|
|
for (i = 0; res > ZERO && i < items; i++)
|
1996-12-06 15:50:15 +00:00
|
|
|
|
{
|
1997-05-12 15:31:33 +00:00
|
|
|
|
TToken_string& row = sf.row(i);
|
|
|
|
|
TString16 codval = row.get(sf.cid2index(F_VALUTA));
|
2001-05-02 13:40:49 +00:00
|
|
|
|
codval.trim();
|
|
|
|
|
const bool valuta = ::is_true_value(codval) ;
|
|
|
|
|
const real imp(row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO)));
|
1997-05-12 15:31:33 +00:00
|
|
|
|
// se l'importo, della riga corrente dello sheet, <20> minore
|
|
|
|
|
// dell 'importo che si deve caricare e se lo rimane anche
|
|
|
|
|
// sommato all'importo gi<67> selezionato, si procede a rendere
|
|
|
|
|
// la riga selezionata per il caricamento
|
2001-05-02 13:40:49 +00:00
|
|
|
|
if (::same_values(codval, val) && imp <= res)
|
1997-05-12 15:31:33 +00:00
|
|
|
|
{
|
|
|
|
|
row.add('X',0);
|
|
|
|
|
res -= imp;
|
|
|
|
|
}
|
|
|
|
|
}
|
1996-11-22 17:17:26 +00:00
|
|
|
|
sf.force_update();
|
|
|
|
|
calcola();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Handler per gestire la pressione del bottone conferma della maschera
|
|
|
|
|
// per l'aggiunta delle riba (ef0300c)
|
1996-11-14 17:40:05 +00:00
|
|
|
|
bool TVariazione_distinte::conferma_handler(TMask_field& f, KEY k)
|
1996-11-22 17:17:26 +00:00
|
|
|
|
{
|
1997-05-12 15:31:33 +00:00
|
|
|
|
if (k == K_ENTER)
|
1996-11-14 17:40:05 +00:00
|
|
|
|
{
|
1997-05-12 15:31:33 +00:00
|
|
|
|
TMask * msk = app()._msk;
|
|
|
|
|
TSheet_field & sf_riba = (TSheet_field&)msk->field(F_SHEET_RIBA);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
TMask& m = f.mask();
|
1997-05-12 15:31:33 +00:00
|
|
|
|
|
1996-12-06 15:50:15 +00:00
|
|
|
|
m.close(); // chiudo la maschera secondaria
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// scarico tutte le righe, selezionate, dello sheet della maschera
|
|
|
|
|
// secondaria nello sheet della maschera primaria della relap (ef0300a)
|
1996-11-22 17:17:26 +00:00
|
|
|
|
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET);
|
|
|
|
|
int items = sf.items();
|
|
|
|
|
for (int i = 0; i < items; i++)
|
|
|
|
|
{
|
|
|
|
|
TToken_string& row = sf.row(i);
|
1997-05-12 15:31:33 +00:00
|
|
|
|
if (*row.get(0) == 'X') // selected
|
1996-11-22 17:17:26 +00:00
|
|
|
|
{
|
1997-05-12 15:31:33 +00:00
|
|
|
|
row.add(" ", 0);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
sf_riba.row(-1) = row;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
1996-11-14 17:40:05 +00:00
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Handler per gestire la pressione del bottone annulla della maschera
|
|
|
|
|
// per l'aggiunta delle riba (ef0300c)
|
1996-11-14 17:40:05 +00:00
|
|
|
|
bool TVariazione_distinte::annulla_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
1996-11-22 17:17:26 +00:00
|
|
|
|
TMask& m = f.mask();
|
|
|
|
|
m.close();
|
1996-11-14 17:40:05 +00:00
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Handler per gestire la scelta per data, nella maschera di scelta
|
|
|
|
|
// delle riba (ef0300c)
|
1999-04-06 15:34:39 +00:00
|
|
|
|
bool TVariazione_distinte::data_handler(TMask_field& f, KEY k)
|
1996-11-22 17:17:26 +00:00
|
|
|
|
{
|
1999-04-06 15:34:39 +00:00
|
|
|
|
if (f.to_check(k) && k == K_TAB)
|
|
|
|
|
{
|
|
|
|
|
// Carica prima tutte le ri.ba e poi toglie quelle che non servono in base alla selzione
|
|
|
|
|
int tipopag = app()._msk->get_int(F_TIPOPAG);
|
2002-12-17 12:06:01 +00:00
|
|
|
|
if (tipopag != 0)
|
|
|
|
|
{
|
|
|
|
|
TWait_cursor hourglass;
|
|
|
|
|
carica_riba(tipopag, FALSE);
|
|
|
|
|
}
|
1999-04-06 15:34:39 +00:00
|
|
|
|
|
|
|
|
|
TMask& m = f.mask();
|
|
|
|
|
bool deleted = FALSE;
|
|
|
|
|
TDate datad = m.get_date(F_DADATA);
|
|
|
|
|
TDate dataa = m.get_date(F_ADATA);
|
|
|
|
|
|
|
|
|
|
if (!datad.ok())
|
|
|
|
|
datad = botime;
|
|
|
|
|
if (!dataa.ok())
|
|
|
|
|
dataa = eotime;
|
|
|
|
|
TDate data_sh;
|
|
|
|
|
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET);
|
|
|
|
|
TString_array& sa = sf.rows_array();
|
|
|
|
|
// tolgo dallo sheet gli effetti che hanno la data non compresa nel range
|
|
|
|
|
for (int i = sa.items()-1; i >=0 ; i--)
|
|
|
|
|
{
|
|
|
|
|
TToken_string& row = sa.row(i);
|
|
|
|
|
data_sh = (TDate)row.get(2);
|
|
|
|
|
if (data_sh > dataa || data_sh < datad)
|
|
|
|
|
sa.remove(i);
|
|
|
|
|
}
|
|
|
|
|
sa.pack();
|
|
|
|
|
sf.force_update();
|
1996-11-22 17:17:26 +00:00
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// COMPARE FUNCTION per l'ordinamento per data degli effetti presenti
|
|
|
|
|
// nello sheet, nella maschera di scelta delle riba (ef0300c)
|
1996-11-22 17:17:26 +00:00
|
|
|
|
HIDDEN int confronta_data(const TObject** o1, const TObject** o2)
|
|
|
|
|
{
|
|
|
|
|
int val;
|
|
|
|
|
TToken_string* s1 = (TToken_string*) *o1;
|
|
|
|
|
TToken_string* s2 = (TToken_string*) *o2;
|
|
|
|
|
TDate data1 = s1->get(2);
|
|
|
|
|
TDate data2 = s2->get(2);
|
|
|
|
|
if (data1 == data2)
|
|
|
|
|
val = 0;
|
|
|
|
|
else
|
|
|
|
|
val = (data1 > data2) ? +1 : -1;
|
|
|
|
|
return val;
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Handler per gestire l'ordinamento per data degli effetti presenti
|
|
|
|
|
// nello sheet, nella maschera di scelta delle riba (ef0300c)
|
1996-11-22 17:17:26 +00:00
|
|
|
|
void TVariazione_distinte::ord_data()
|
2002-12-17 12:06:01 +00:00
|
|
|
|
{
|
|
|
|
|
TWait_cursor hourglass;
|
1996-11-22 17:17:26 +00:00
|
|
|
|
TMask* m = app()._m2;
|
|
|
|
|
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET);
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// scarico tutte le righe dello sheet in un array
|
|
|
|
|
TArray& effetti = sf.rows_array();
|
|
|
|
|
// faccio l'ordinamento degli elementi dell'array
|
|
|
|
|
effetti.sort(confronta_data);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
sf.force_update();
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// COMPARE FUNCTION per l'ordinamento per numero e data fattura degli
|
|
|
|
|
// effetti presenti nello sheet, nella maschera di scelta delle riba
|
1996-11-22 17:17:26 +00:00
|
|
|
|
HIDDEN int confronta_fatt(const TObject** o1, const TObject** o2)
|
|
|
|
|
{
|
|
|
|
|
int val;
|
|
|
|
|
TToken_string* s1 = (TToken_string*) *o1;
|
|
|
|
|
TToken_string* s2 = (TToken_string*) *o2;
|
|
|
|
|
long num1 = s1->get_long(4);
|
|
|
|
|
long num2 = s2->get_long(4);
|
|
|
|
|
TDate data1 = s1->get(5);
|
|
|
|
|
TDate data2 = s2->get(5);
|
1996-12-06 15:50:15 +00:00
|
|
|
|
// ordinamento sul numero fattura
|
1996-11-22 17:17:26 +00:00
|
|
|
|
if (num1 != num2)
|
|
|
|
|
{
|
|
|
|
|
val = (num1 > num2) ? +1 : -1;
|
|
|
|
|
return val;
|
1996-12-06 15:50:15 +00:00
|
|
|
|
}
|
|
|
|
|
// ordinamento sulla data fattura
|
1996-11-22 17:17:26 +00:00
|
|
|
|
if (data1 == data2)
|
|
|
|
|
{
|
|
|
|
|
val = 0;
|
|
|
|
|
return val;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
val = (data1 > data2) ? +1 : -1;
|
|
|
|
|
return val;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Handler per gestire l'ordinamento per numero e data fattura degli
|
|
|
|
|
// effetti presenti nello sheet, nella maschera di scelta delle riba
|
1996-11-22 17:17:26 +00:00
|
|
|
|
void TVariazione_distinte::ord_fatt()
|
|
|
|
|
{
|
2002-12-17 12:06:01 +00:00
|
|
|
|
TWait_cursor hourglass;
|
1996-11-22 17:17:26 +00:00
|
|
|
|
TMask* m = app()._m2;
|
|
|
|
|
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET);
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// scarico le righe dello sheet in un array
|
|
|
|
|
TArray& effetti = sf.rows_array();
|
1996-12-06 15:50:15 +00:00
|
|
|
|
effetti.sort(confronta_fatt);// ordino gli elementi dell'array
|
1996-11-22 17:17:26 +00:00
|
|
|
|
sf.force_update();
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Handler per gestire i diversi ordinamenti, nella maschera di scelta
|
|
|
|
|
// delle riba (ef0300c)
|
1996-11-22 17:17:26 +00:00
|
|
|
|
bool TVariazione_distinte::ordina_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
if (f.to_check(k, TRUE))
|
|
|
|
|
{
|
|
|
|
|
char ord = f.get()[0];
|
|
|
|
|
if (ord == 'S')//ordino gli effetti nello sheet per data
|
|
|
|
|
ord_data();
|
|
|
|
|
if (ord == 'F')
|
|
|
|
|
ord_fatt();//ordino gli effetti nello sheet per fattura
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Metodo che calcola i totali relativi alla distinta (totale in
|
|
|
|
|
// lire e totale in valuta(se presente)) nella maschera principale
|
1996-11-14 17:40:05 +00:00
|
|
|
|
void TVariazione_distinte::calcola_totale()
|
|
|
|
|
{
|
|
|
|
|
TMask* m = app()._msk;
|
|
|
|
|
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET_RIBA);
|
1997-05-12 15:31:33 +00:00
|
|
|
|
const int items = sf.items();
|
|
|
|
|
real impdist;
|
|
|
|
|
const TString16 codval = m->get(F_CODVAL);
|
2001-05-02 13:40:49 +00:00
|
|
|
|
const bool valuta = ::is_true_value(codval);
|
|
|
|
|
|
1996-11-14 17:40:05 +00:00
|
|
|
|
for (int i = 0; i < items; i++)
|
|
|
|
|
{
|
1997-05-12 15:31:33 +00:00
|
|
|
|
TToken_string& row = sf.row(i);
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// se l'effetto <20> selezionato per l'eliminazione tolgo il suo importo
|
|
|
|
|
// dal totale presentazione della distinta
|
1997-05-12 15:31:33 +00:00
|
|
|
|
|
|
|
|
|
if (*row.get(0) != 'X') // valido (not to delete)
|
|
|
|
|
{
|
2001-05-02 13:40:49 +00:00
|
|
|
|
const real imp = row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO));
|
1997-05-12 15:31:33 +00:00
|
|
|
|
impdist += imp;
|
|
|
|
|
}
|
1996-11-14 17:40:05 +00:00
|
|
|
|
}
|
|
|
|
|
m->set(F_TOTIMP, impdist);
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Metodo che calcola i totali relativi alla selezione effetti per la
|
|
|
|
|
// distinta nella maschera di scelta delle riba (ef0300c)
|
1996-11-22 17:17:26 +00:00
|
|
|
|
void TVariazione_distinte::calcola()
|
|
|
|
|
{
|
|
|
|
|
TMask* m2 = app()._m2;
|
|
|
|
|
TMask* m = app()._msk;
|
|
|
|
|
TSheet_field& sf = (TSheet_field&)m2->field(F_SHEET);
|
1997-05-12 15:31:33 +00:00
|
|
|
|
const int items = sf.items();
|
|
|
|
|
real impsel;
|
1998-11-04 18:04:26 +00:00
|
|
|
|
const real imp_pres = m->get_real(F_TOTIMP);
|
1997-05-12 15:31:33 +00:00
|
|
|
|
const TString16 codval = m->get(F_CODVAL);
|
2001-05-02 13:40:49 +00:00
|
|
|
|
const bool valuta = ::is_true_value(codval);
|
|
|
|
|
|
1996-11-22 17:17:26 +00:00
|
|
|
|
for (int i = 0; i < items; i++)
|
|
|
|
|
{
|
1996-12-06 15:50:15 +00:00
|
|
|
|
TToken_string& row = sf.row(i);
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// se l'effetto <20> selezionato aggiungo il suo importo al totale importo
|
|
|
|
|
// selezionato
|
1997-05-12 15:31:33 +00:00
|
|
|
|
if (*row.get(0) == 'X')
|
1996-11-22 17:17:26 +00:00
|
|
|
|
{
|
2001-05-02 13:40:49 +00:00
|
|
|
|
const real imp = row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO));
|
1996-11-22 17:17:26 +00:00
|
|
|
|
impsel += imp;
|
1997-02-12 09:15:50 +00:00
|
|
|
|
}
|
1996-11-22 17:17:26 +00:00
|
|
|
|
}
|
1997-05-12 15:31:33 +00:00
|
|
|
|
m2->set(F_IMPSEL, impsel);
|
1998-11-04 18:04:26 +00:00
|
|
|
|
m2->set(F_TOTIMPDIST, impsel);
|
1996-11-22 17:17:26 +00:00
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Notify per il calcolo dei totali relativi alla selezione effetti
|
|
|
|
|
// per la distinta nella maschera di scelta delle riba (ef0300c)
|
1996-11-22 17:17:26 +00:00
|
|
|
|
bool TVariazione_distinte::imp_notify(TSheet_field& s, int r, KEY key)
|
|
|
|
|
{
|
|
|
|
|
if (s.to_check(key, TRUE))
|
|
|
|
|
calcola();
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Metodo che permette di aggiungere effetti alla distinta caricandoli
|
|
|
|
|
// tra quelli non ancora assegnati, chiamato quando si aggiunge una
|
|
|
|
|
// riga allo sheet degli effetti della distinta
|
1996-11-22 17:17:26 +00:00
|
|
|
|
void TVariazione_distinte::aggiungi()
|
|
|
|
|
{
|
1997-01-15 16:00:56 +00:00
|
|
|
|
TMask* m = app()._msk;
|
1996-11-22 17:17:26 +00:00
|
|
|
|
TMask* m2 = app()._m2;
|
2002-12-17 12:06:01 +00:00
|
|
|
|
int tipopag = m->get_int(F_TIPOPAG);
|
|
|
|
|
if (tipopag != 0)
|
|
|
|
|
{
|
|
|
|
|
TWait_cursor hourglass;
|
|
|
|
|
carica_riba(tipopag);
|
|
|
|
|
}
|
1996-11-22 17:17:26 +00:00
|
|
|
|
m2->reset(F_TOTIMPDIST);
|
|
|
|
|
m2->reset(F_IMPSEL);
|
2001-05-02 13:40:49 +00:00
|
|
|
|
const TString16 codval = m->get(F_CODVAL);
|
|
|
|
|
m2->set(F_CODVALS, codval);
|
1997-05-12 15:31:33 +00:00
|
|
|
|
m2->run();
|
|
|
|
|
calcola_totale();
|
1996-11-22 17:17:26 +00:00
|
|
|
|
}
|
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
|
// Notify per il calcolo dei totali relativi alla distinta
|
1996-12-06 15:50:15 +00:00
|
|
|
|
// nella maschera della relap (ef0300a)
|
1996-11-14 17:40:05 +00:00
|
|
|
|
bool TVariazione_distinte::impdist_notify(TSheet_field& s, int r, KEY key)
|
|
|
|
|
{
|
|
|
|
|
if (s.to_check(key, TRUE))
|
|
|
|
|
calcola_totale();
|
1997-05-13 09:05:36 +00:00
|
|
|
|
if (key == K_INS)
|
|
|
|
|
{
|
|
|
|
|
aggiungi();
|
|
|
|
|
s.force_update();
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
1996-11-14 17:40:05 +00:00
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ef0300(int argc, char* argv[])
|
|
|
|
|
{
|
|
|
|
|
TVariazione_distinte a ;
|
1997-05-12 15:31:33 +00:00
|
|
|
|
a.run(argc, argv, "Distinte di presentazione");
|
1996-11-14 17:40:05 +00:00
|
|
|
|
return 0;
|
1999-04-06 15:34:39 +00:00
|
|
|
|
}
|